# BoxParser

Artifact: [androidx.media3:media3-extractor](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/extractor/mp4/BoxParser.java+class:androidx.media3.extractor.mp4.BoxParser)

*** ** * ** ***


```
@UnstableApi
class BoxParser
```

<br />

*** ** * ** ***

Utility methods for parsing MP4 format box payloads according to ISO/IEC 14496-12.

## Summary

| ### Public functions |
|---|---|
| `java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/BoxParser#maybeSkipRemainingMetaBoxHeaderBytes(androidx.media3.common.util.ParsableByteArray)(meta: https://developer.android.com/reference/kotlin/androidx/media3/common/util/ParsableByteArray!)` Possibly skips the version and flags fields (1+3 byte) of a full meta box. |
| `java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/BoxParser#parseFullBoxFlags(int)(fullBoxInt: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Parses the box flags out of the additional integer component of a full box. |
| `java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/BoxParser#parseFullBoxVersion(int)(fullBoxInt: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Parses the version number out of the additional integer component of a full box. |
| `java-static https://developer.android.com/reference/kotlin/androidx/media3/common/Metadata?` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/BoxParser#parseMdtaFromMeta(androidx.media3.container.Mp4Box.ContainerBox)(meta: https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box.ContainerBox!)` Parses a metadata meta box if it contains metadata with handler 'mdta'. |
| `java-static https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4TimestampData!` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/BoxParser#parseMvhd(androidx.media3.common.util.ParsableByteArray)(mvhd: https://developer.android.com/reference/kotlin/androidx/media3/common/util/ParsableByteArray!)` Parses an mvhd box (defined in ISO/IEC 14496-12). |
| `java-static https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/TrackSampleTable!` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/BoxParser#parseStbl(androidx.media3.extractor.mp4.Track,androidx.media3.container.Mp4Box.ContainerBox,androidx.media3.extractor.GaplessInfoHolder,boolean)( track: https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/Track!, stblBox: https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box.ContainerBox!, gaplessInfoHolder: https://developer.android.com/reference/kotlin/androidx/media3/extractor/GaplessInfoHolder!, omitTrackSampleTable: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Parses an stbl box (defined in ISO/IEC 14496-12). |
| `java-static https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/Track?` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/BoxParser#parseTrak(androidx.media3.container.Mp4Box.ContainerBox,androidx.media3.container.Mp4Box.LeafBox,long,androidx.media3.common.DrmInitData,boolean,boolean)( trak: https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box.ContainerBox!, mvhd: https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box.LeafBox!, duration: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, drmInitData: https://developer.android.com/reference/kotlin/androidx/media3/common/DrmInitData?, ignoreEditLists: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, isQuickTime: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Parses a trak box (defined in ISO/IEC 14496-12). |
| `java-static (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/TrackSampleTable!>!` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/BoxParser#parseTraks(androidx.media3.container.Mp4Box.ContainerBox,androidx.media3.extractor.GaplessInfoHolder,long,androidx.media3.common.DrmInitData,boolean,boolean,java.util.function.Function<androidx.media3.extractor.mp4.Track,androidx.media3.extractor.mp4.Track>,boolean)( moov: https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box.ContainerBox!, gaplessInfoHolder: https://developer.android.com/reference/kotlin/androidx/media3/extractor/GaplessInfoHolder!, duration: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, drmInitData: https://developer.android.com/reference/kotlin/androidx/media3/common/DrmInitData?, ignoreEditLists: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, isQuickTime: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, modifyTrackFunction: https://developer.android.com/reference/java/util/function/Function.html<@https://developer.android.com/reference/kotlin/androidx/media3/common/util/NullableType https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/Track!, @https://developer.android.com/reference/kotlin/androidx/media3/common/util/NullableType https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/Track!>!, omitTrackSampleTable: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Parse the trak boxes in a moov box (defined in ISO/IEC 14496-12). |
| `java-static https://developer.android.com/reference/kotlin/androidx/media3/common/Metadata!` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/BoxParser#parseUdta(androidx.media3.container.Mp4Box.LeafBox,boolean)(udtaBox: https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box.LeafBox!, ignoreArtwork: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)` Parses a udta box. |

## Public functions

### maybeSkipRemainingMetaBoxHeaderBytes

```
java-static fun maybeSkipRemainingMetaBoxHeaderBytes(meta: ParsableByteArray!): Unit
```

Possibly skips the version and flags fields (1+3 byte) of a full meta box.

Boxes of type `https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box#TYPE_meta()` are defined to be full boxes which have four additional bytes for a version and a flags field (see 4.2 'Object Structure' in ISO/IEC 14496-12:2005). QuickTime do not have such a full box structure. Since some of these files are encoded wrongly, we can't rely on the file type though. Instead we must check the 8 bytes after the common header bytes ourselves.

| Parameters |
|---|---|
| `meta: https://developer.android.com/reference/kotlin/androidx/media3/common/util/ParsableByteArray!` | The 8 or more bytes following the meta box size and type. |

### parseFullBoxFlags

```
java-static fun parseFullBoxFlags(fullBoxInt: Int): Int
```

Parses the box flags out of the additional integer component of a full box.

### parseFullBoxVersion

```
java-static fun parseFullBoxVersion(fullBoxInt: Int): Int
```

Parses the version number out of the additional integer component of a full box.

### parseMdtaFromMeta

```
java-static fun parseMdtaFromMeta(meta: Mp4Box.ContainerBox!): Metadata?
```

Parses a metadata meta box if it contains metadata with handler 'mdta'.

| Parameters |
|---|---|
| `meta: https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box.ContainerBox!` | The metadata box to decode. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/Metadata?` | Parsed metadata, or null. |

### parseMvhd

```
java-static fun parseMvhd(mvhd: ParsableByteArray!): Mp4TimestampData!
```

Parses an mvhd box (defined in ISO/IEC 14496-12).

| Parameters |
|---|---|
| `mvhd: https://developer.android.com/reference/kotlin/androidx/media3/common/util/ParsableByteArray!` | Contents of the mvhd box to be parsed. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4TimestampData!` | An object containing the parsed data. |

### parseStbl

```
java-static fun parseStbl(
    track: Track!,
    stblBox: Mp4Box.ContainerBox!,
    gaplessInfoHolder: GaplessInfoHolder!,
    omitTrackSampleTable: Boolean
): TrackSampleTable!
```

Parses an stbl box (defined in ISO/IEC 14496-12).

| Parameters |
|---|---|
| `track: https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/Track!` | Track to which this sample table corresponds. |
| `stblBox: https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box.ContainerBox!` | stbl (sample table) box to decode. |
| `gaplessInfoHolder: https://developer.android.com/reference/kotlin/androidx/media3/extractor/GaplessInfoHolder!` | Holder to populate with gapless playback information. |
| `omitTrackSampleTable: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether to optimize for metadata retrieval by skipping allocation and population of per-sample arrays in the `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/TrackSampleTable`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/TrackSampleTable!` | Sample table described by the stbl box. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/ParserException` | Thrown if the stbl box can't be parsed. |

### parseTrak

```
java-static fun parseTrak(
    trak: Mp4Box.ContainerBox!,
    mvhd: Mp4Box.LeafBox!,
    duration: Long,
    drmInitData: DrmInitData?,
    ignoreEditLists: Boolean,
    isQuickTime: Boolean
): Track?
```

Parses a trak box (defined in ISO/IEC 14496-12).

| Parameters |
|---|---|
| `trak: https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box.ContainerBox!` | Box to decode. |
| `mvhd: https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box.LeafBox!` | Movie header box, used to get the timescale. |
| `duration: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The duration in units of the timescale declared in the mvhd box, or `https://developer.android.com/reference/kotlin/androidx/media3/common/C#TIME_UNSET()` if the duration should be parsed from the tkhd box. |
| `drmInitData: https://developer.android.com/reference/kotlin/androidx/media3/common/DrmInitData?` | `https://developer.android.com/reference/kotlin/androidx/media3/common/DrmInitData` to be included in the format, or `null`. |
| `ignoreEditLists: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether to ignore any edit lists in the trak box. |
| `isQuickTime: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | True for QuickTime media. False otherwise. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/Track?` | A `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/Track` instance, or `null` if the track's type isn't supported. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/ParserException` | Thrown if the trak box can't be parsed. |

### parseTraks

```
java-static fun parseTraks(
    moov: Mp4Box.ContainerBox!,
    gaplessInfoHolder: GaplessInfoHolder!,
    duration: Long,
    drmInitData: DrmInitData?,
    ignoreEditLists: Boolean,
    isQuickTime: Boolean,
    modifyTrackFunction: Function<@NullableType Track!, @NullableType Track!>!,
    omitTrackSampleTable: Boolean
): (Mutable)List<TrackSampleTable!>!
```

Parse the trak boxes in a moov box (defined in ISO/IEC 14496-12).

| Parameters |
|---|---|
| `moov: https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box.ContainerBox!` | Moov box to decode. |
| `gaplessInfoHolder: https://developer.android.com/reference/kotlin/androidx/media3/extractor/GaplessInfoHolder!` | Holder to populate with gapless playback information. |
| `duration: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The duration in units of the timescale declared in the mvhd box, or `https://developer.android.com/reference/kotlin/androidx/media3/common/C#TIME_UNSET()` if the duration should be parsed from the tkhd box. |
| `drmInitData: https://developer.android.com/reference/kotlin/androidx/media3/common/DrmInitData?` | `https://developer.android.com/reference/kotlin/androidx/media3/common/DrmInitData` to be included in the format, or `null`. |
| `ignoreEditLists: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether to ignore any edit lists in the trak boxes. |
| `isQuickTime: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | True for QuickTime media. False otherwise. |
| `modifyTrackFunction: https://developer.android.com/reference/java/util/function/Function.html<@https://developer.android.com/reference/kotlin/androidx/media3/common/util/NullableType https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/Track!, @https://developer.android.com/reference/kotlin/androidx/media3/common/util/NullableType https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/Track!>!` | A function to apply to the `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/Track` in the result. |
| `omitTrackSampleTable: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether to optimize for metadata retrieval by skipping allocation and population of per-sample arrays in the `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/TrackSampleTable`. |

| Returns |
|---|---|
| `(https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/TrackSampleTable!>!` | A list of `https://developer.android.com/reference/kotlin/androidx/media3/extractor/mp4/TrackSampleTable` instances. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/ParserException` | Thrown if the trak boxes can't be parsed. |

### parseUdta

```
java-static fun parseUdta(udtaBox: Mp4Box.LeafBox!, ignoreArtwork: Boolean): Metadata!
```

Parses a udta box.

| Parameters |
|---|---|
| `udtaBox: https://developer.android.com/reference/kotlin/androidx/media3/container/Mp4Box.LeafBox!` | The udta (user data) box to decode. |
| `ignoreArtwork: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether to ignore artwork metadata. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/Metadata!` | Parsed metadata. |