# NalUnitUtil

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

*** ** * ** ***


```
@UnstableApi
public final class NalUnitUtil
```

<br />

*** ** * ** ***

Utility methods for handling H.264/AVC and H.265/HEVC NAL units.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265LayerInfo` Holds data that maps NAL unit header layer ID to the internal layer info specified in VPS. |
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265NalHeader` Holds data parsed from a H.265 NAL unit header. |
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265ProfileTierLevel` Holds data parsed from a H.265 profile_tier_level() of either VPS or SPS. |
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265ProfileTierLevelsAndIndices` Holds a list of H.265 profile_tier_level()s and a corresponding list of indices. |
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265RepFormat` Holds data parsed from a H.265 rep_format() of VPS extension - vps_extension(). |
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265RepFormatsAndIndices` Holds a list of H.265 rep_format()s and a corresponding list of indices. |
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265Sei3dRefDisplayInfoData` Holds data parsed from a H.265 3D reference displays information SEI message. |
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265SpsData` Holds data parsed from a H.265 sequence parameter set NAL unit. |
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265VideoSignalInfo` Holds data parsed from a H.265 video_signal_info() of vps_vui() of vps_extension(). |
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265VideoSignalInfosAndIndices` Holds a list of H.265 video_signal_info()s and a corresponding list of indices. |
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265VpsData` Holds data parsed from a H.265 video parameter set NAL unit. |
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.PpsData` Holds data parsed from a picture parameter set NAL unit. |
| `public final class https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.SpsData` Holds data parsed from a H.264 sequence parameter set NAL unit. |

| ### Constants |
|---|---|
| `static final float[]` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#ASPECT_RATIO_IDC_VALUES()` Aspect ratios indexed by aspect_ratio_idc, in H.264 and H.265 SPSs. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#EXTENDED_SAR() = 255` Value for aspect_ratio_idc indicating an extended aspect ratio, in H.264 and H.265 SPSs. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_AUD() = 9` H.264 access unit delimiter. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_IDR() = 5` H.264 coded slice of an IDR picture. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_NON_IDR() = 1` H.264 coded slice of a non-IDR picture. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_PARTITION_A() = 2` H.264 coded slice data partition A. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_PPS() = 8` H.264 picture parameter set. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_PREFIX() = 14` H.264 prefix NAL unit. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_SEI() = 6` H.264 supplemental enhancement information. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_SPS() = 7` H.264 sequence parameter set. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_UNSPECIFIED() = 24` H.264 unspecified NAL unit. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H265_NAL_UNIT_TYPE_AUD() = 35` H.265 access unit delimiter (AUD_NUT). |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H265_NAL_UNIT_TYPE_BLA_W_LP() = 16` H.265 coded slice segment of a broken link access picture (BLA_W_LP). |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H265_NAL_UNIT_TYPE_CRA() = 21` H.265 coded slice segment of a clean random access picture (CRA_NUT). |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H265_NAL_UNIT_TYPE_PPS() = 34` H.265 picture parameter set (PPS_NUT). |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H265_NAL_UNIT_TYPE_PREFIX_SEI() = 39` H.265 prefixed supplemental enhancement information (PREFIX_SEI_NUT). |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H265_NAL_UNIT_TYPE_RASL_R() = 9` H.265 coded slice segment of a random access skipped leading picture (RASL_R). |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H265_NAL_UNIT_TYPE_SPS() = 33` H.265 sequence parameter set (SPS_NUT). |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H265_NAL_UNIT_TYPE_SUFFIX_SEI() = 40` H.265 suffixed supplemental enhancement information (SUFFIX_SEI_NUT). |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H265_NAL_UNIT_TYPE_UNSPECIFIED() = 48` H.265 unspecified NAL unit. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H265_NAL_UNIT_TYPE_VPS() = 32` H.265 video parameter set (VPS_NUT). |
| `static final byte[]` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#NAL_START_CODE()` Four initial bytes that must prefix NAL units for decoding. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#NAL_UNIT_TYPE_AUD() = 9` **This field is deprecated.** Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_AUD()` <br /> |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#NAL_UNIT_TYPE_IDR() = 5` **This field is deprecated.** Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_IDR()` <br /> |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#NAL_UNIT_TYPE_NON_IDR() = 1` **This field is deprecated.** Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_NON_IDR()` <br /> |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#NAL_UNIT_TYPE_PARTITION_A() = 2` **This field is deprecated.** Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_PARTITION_A()` <br /> |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#NAL_UNIT_TYPE_PPS() = 8` **This field is deprecated.** Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_PPS()` <br /> |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#NAL_UNIT_TYPE_PREFIX() = 14` **This field is deprecated.** Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_PREFIX()` <br /> |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#NAL_UNIT_TYPE_SEI() = 6` **This field is deprecated.** Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_SEI()` <br /> |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#NAL_UNIT_TYPE_SPS() = 7` **This field is deprecated.** Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_SPS()` <br /> |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#VVC_NAL_UNIT_TYPE_DCI() = 13` VVC decoding capability information (DCI_NUT). |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#VVC_NAL_UNIT_TYPE_OPI() = 12` VVC operating point information (OPI_NUT). |
| `static final int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#VVC_NAL_UNIT_TYPE_PREFIX_SEI() = 23` VVC prefixed supplemental enhancement information (PREFIX_SEI_NUT). |

| ### Public methods |
|---|---|
| `static void` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#clearPrefixFlags(boolean[])(boolean[] prefixFlags)` Clears prefix flags, as used by `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#findNalUnit(byte[],int,int,boolean[])`. |
| `static void` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#discardToSps(java.nio.ByteBuffer)(https://developer.android.com/reference/java/nio/ByteBuffer.html data)` Discards data from the buffer up to the first SPS, where `data.position()` is interpreted as the length of the buffer. |
| `static int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#findNalUnit(byte[],int,int,boolean[])( byte[] data, int startOffset, int endOffset, boolean[] prefixFlags )` Finds the first NAL unit in `data`. |
| `static @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#getH265BaseLayerCodecsString(java.util.List<byte[]>)(https://developer.android.com/reference/java/util/List.html<byte[]> csdBuffers)` Returns a new RFC 6381 codecs description string specifically for the single-layer HEVC case. |
| `static int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#getH265NalUnitType(byte[],int)(byte[] data, int offset)` Returns the type of the H.265 NAL unit in `data` that starts at `offset`. |
| `static int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#getNalUnitType(byte[],int)(byte[] data, int offset)` Returns the type of the NAL unit in `data` that starts at `offset`. |
| `static boolean` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#isDependedOn(byte[],int,int,androidx.media3.common.Format)(byte[] data, int offset, int length, https://developer.android.com/reference/androidx/media3/common/Format format)` Returns whether the NAL unit starting with the given bytes can be depended on by subsequent NAL units in decoding order. |
| `static boolean` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#isH264NalUnitDependedOn(byte)(byte nalUnitHeaderFirstByte)` Returns whether the H.264 NAL unit can be depended on by subsequent NAL units in decoding order. |
| `static boolean` | `[isNalUnitSei](https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#isNalUnitSei(androidx.media3.common.Format,byte))(https://developer.android.com/reference/androidx/media3/common/Format format, byte nalUnitHeaderFirstByte)` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#isNalUnitSei(androidx.media3.common.Format,byte[],int)` instead. <br /> |
| `static boolean` | `[isNalUnitSei](https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#isNalUnitSei(java.lang.String,byte))(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html mimeType, byte nalUnitHeaderFirstByte)` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#isNalUnitSei(androidx.media3.common.Format,byte[],int)` in order to support `https://developer.android.com/reference/androidx/media3/common/MimeTypes#VIDEO_DOLBY_VISION()` tracks with backwards compatible `https://developer.android.com/reference/androidx/media3/common/MimeTypes#VIDEO_H264()` or `https://developer.android.com/reference/androidx/media3/common/MimeTypes#VIDEO_H265()` data. <br /> |
| `static boolean` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#isNalUnitSei(androidx.media3.common.Format,byte[],int)(https://developer.android.com/reference/androidx/media3/common/Format format, byte[] data, int offset)` Returns whether the NAL unit with the specified header contains supplemental enhancement information. |
| `static int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#numberOfBytesInNalUnitHeader(androidx.media3.common.Format)(https://developer.android.com/reference/androidx/media3/common/Format format)` Returns the number of bytes in the NAL unit header. |
| `static @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265Sei3dRefDisplayInfoData` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#parseH265Sei3dRefDisplayInfo(byte[],int,int)( byte[] nalData, int nalOffset, int nalLimit )` Parses a H.265 3D reference displays information SEI message syntax defined in ITU-T Recommendation H.265 (2019) subsection G.14.2.3. |
| `static https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265SpsData` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#parseH265SpsNalUnit(byte[],int,int,androidx.media3.container.NalUnitUtil.H265VpsData)( byte[] nalData, int nalOffset, int nalLimit, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265VpsData vpsData )` Parses a H.265 SPS NAL unit using the syntax defined in ITU-T Recommendation H.265 (2019) subsections 7.3.2.2.1 and F.7.3.2.2.1. |
| `static https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265SpsData` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#parseH265SpsNalUnitPayload(byte[],int,int,androidx.media3.container.NalUnitUtil.H265NalHeader,androidx.media3.container.NalUnitUtil.H265VpsData)( byte[] nalData, int nalOffset, int nalLimit, https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265NalHeader nalHeader, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265VpsData vpsData )` Parses a H.265 SPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.265 (2019) subsections 7.3.2.2.1 and F.7.3.2.2.1. |
| `static https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265VpsData` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#parseH265VpsNalUnit(byte[],int,int)(byte[] nalData, int nalOffset, int nalLimit)` Parses a H.265 VPS NAL unit using the syntax defined in ITU-T Recommendation H.265 (2019) subsections 7.3.2.1 and F.7.3.2.1. |
| `static https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.PpsData` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#parsePpsNalUnit(byte[],int,int)(byte[] nalData, int nalOffset, int nalLimit)` Parses a PPS NAL unit using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.2. |
| `static https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.PpsData` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#parsePpsNalUnitPayload(byte[],int,int)(byte[] nalData, int nalOffset, int nalLimit)` Parses a PPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.2. |
| `static int` | `@https://developer.android.com/reference/androidx/media3/common/C.StereoMode https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#parseSeiStereoMode(byte[],int,int)(byte[] seiData, int offset, int limit)` Parses the unescaped RBSP data of an H.264 or H.265 SEI NAL unit (excluding the NAL unit start code and NAL unit header) to extract the `https://developer.android.com/reference/androidx/media3/common/C.StereoMode` from a ` frame_packing_arrangement` SEI message (payload type 45), if present. |
| `static https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.SpsData` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#parseSpsNalUnit(byte[],int,int)(byte[] nalData, int nalOffset, int nalLimit)` Parses a SPS NAL unit using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.1.1. |
| `static https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.SpsData` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#parseSpsNalUnitPayload(byte[],int,int)(byte[] nalData, int nalOffset, int nalLimit)` Parses a SPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.1.1. |
| `static int` | `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#unescapeStream(byte[],int)(byte[] data, int limit)` Unescapes `data` up to the specified limit, replacing occurrences of \[0, 0, 3\] with \[0, 0\]. |

## Constants

### ASPECT_RATIO_IDC_VALUES

```
public static final float[] ASPECT_RATIO_IDC_VALUES
```

Aspect ratios indexed by aspect_ratio_idc, in H.264 and H.265 SPSs.

### EXTENDED_SAR

```
public static final int EXTENDED_SAR = 255
```

Value for aspect_ratio_idc indicating an extended aspect ratio, in H.264 and H.265 SPSs.

### H264_NAL_UNIT_TYPE_AUD

```
public static final int H264_NAL_UNIT_TYPE_AUD = 9
```

H.264 access unit delimiter.

### H264_NAL_UNIT_TYPE_IDR

```
public static final int H264_NAL_UNIT_TYPE_IDR = 5
```

H.264 coded slice of an IDR picture.

### H264_NAL_UNIT_TYPE_NON_IDR

```
public static final int H264_NAL_UNIT_TYPE_NON_IDR = 1
```

H.264 coded slice of a non-IDR picture.

### H264_NAL_UNIT_TYPE_PARTITION_A

```
public static final int H264_NAL_UNIT_TYPE_PARTITION_A = 2
```

H.264 coded slice data partition A.

### H264_NAL_UNIT_TYPE_PPS

```
public static final int H264_NAL_UNIT_TYPE_PPS = 8
```

H.264 picture parameter set.

### H264_NAL_UNIT_TYPE_PREFIX

```
public static final int H264_NAL_UNIT_TYPE_PREFIX = 14
```

H.264 prefix NAL unit.

### H264_NAL_UNIT_TYPE_SEI

```
public static final int H264_NAL_UNIT_TYPE_SEI = 6
```

H.264 supplemental enhancement information.

### H264_NAL_UNIT_TYPE_SPS

```
public static final int H264_NAL_UNIT_TYPE_SPS = 7
```

H.264 sequence parameter set.

### H264_NAL_UNIT_TYPE_UNSPECIFIED

```
public static final int H264_NAL_UNIT_TYPE_UNSPECIFIED = 24
```

H.264 unspecified NAL unit.

### H265_NAL_UNIT_TYPE_AUD

```
public static final int H265_NAL_UNIT_TYPE_AUD = 35
```

H.265 access unit delimiter (AUD_NUT).

### H265_NAL_UNIT_TYPE_BLA_W_LP

```
public static final int H265_NAL_UNIT_TYPE_BLA_W_LP = 16
```

H.265 coded slice segment of a broken link access picture (BLA_W_LP).

### H265_NAL_UNIT_TYPE_CRA

```
public static final int H265_NAL_UNIT_TYPE_CRA = 21
```

H.265 coded slice segment of a clean random access picture (CRA_NUT).

### H265_NAL_UNIT_TYPE_PPS

```
public static final int H265_NAL_UNIT_TYPE_PPS = 34
```

H.265 picture parameter set (PPS_NUT).

### H265_NAL_UNIT_TYPE_PREFIX_SEI

```
public static final int H265_NAL_UNIT_TYPE_PREFIX_SEI = 39
```

H.265 prefixed supplemental enhancement information (PREFIX_SEI_NUT).

### H265_NAL_UNIT_TYPE_RASL_R

```
public static final int H265_NAL_UNIT_TYPE_RASL_R = 9
```

H.265 coded slice segment of a random access skipped leading picture (RASL_R).

### H265_NAL_UNIT_TYPE_SPS

```
public static final int H265_NAL_UNIT_TYPE_SPS = 33
```

H.265 sequence parameter set (SPS_NUT).

### H265_NAL_UNIT_TYPE_SUFFIX_SEI

```
public static final int H265_NAL_UNIT_TYPE_SUFFIX_SEI = 40
```

H.265 suffixed supplemental enhancement information (SUFFIX_SEI_NUT).

### H265_NAL_UNIT_TYPE_UNSPECIFIED

```
public static final int H265_NAL_UNIT_TYPE_UNSPECIFIED = 48
```

H.265 unspecified NAL unit.

### H265_NAL_UNIT_TYPE_VPS

```
public static final int H265_NAL_UNIT_TYPE_VPS = 32
```

H.265 video parameter set (VPS_NUT).

### NAL_START_CODE

```
public static final byte[] NAL_START_CODE
```

Four initial bytes that must prefix NAL units for decoding.

### NAL_UNIT_TYPE_AUD

```
public static final int NAL_UNIT_TYPE_AUD = 9
```

> [!CAUTION]
> **This field is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_AUD()`

### NAL_UNIT_TYPE_IDR

```
public static final int NAL_UNIT_TYPE_IDR = 5
```

> [!CAUTION]
> **This field is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_IDR()`

### NAL_UNIT_TYPE_NON_IDR

```
public static final int NAL_UNIT_TYPE_NON_IDR = 1
```

> [!CAUTION]
> **This field is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_NON_IDR()`

### NAL_UNIT_TYPE_PARTITION_A

```
public static final int NAL_UNIT_TYPE_PARTITION_A = 2
```

> [!CAUTION]
> **This field is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_PARTITION_A()`

### NAL_UNIT_TYPE_PPS

```
public static final int NAL_UNIT_TYPE_PPS = 8
```

> [!CAUTION]
> **This field is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_PPS()`

### NAL_UNIT_TYPE_PREFIX

```
public static final int NAL_UNIT_TYPE_PREFIX = 14
```

> [!CAUTION]
> **This field is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_PREFIX()`

### NAL_UNIT_TYPE_SEI

```
public static final int NAL_UNIT_TYPE_SEI = 6
```

> [!CAUTION]
> **This field is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_SEI()`

### NAL_UNIT_TYPE_SPS

```
public static final int NAL_UNIT_TYPE_SPS = 7
```

> [!CAUTION]
> **This field is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#H264_NAL_UNIT_TYPE_SPS()`

### VVC_NAL_UNIT_TYPE_DCI

```
public static final int VVC_NAL_UNIT_TYPE_DCI = 13
```

VVC decoding capability information (DCI_NUT).

### VVC_NAL_UNIT_TYPE_OPI

```
public static final int VVC_NAL_UNIT_TYPE_OPI = 12
```

VVC operating point information (OPI_NUT).

### VVC_NAL_UNIT_TYPE_PREFIX_SEI

```
public static final int VVC_NAL_UNIT_TYPE_PREFIX_SEI = 23
```

VVC prefixed supplemental enhancement information (PREFIX_SEI_NUT).

## Public methods

### clearPrefixFlags

```
public static void clearPrefixFlags(boolean[] prefixFlags)
```

Clears prefix flags, as used by `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#findNalUnit(byte[],int,int,boolean[])`.

| Parameters |
|---|---|
| `boolean[] prefixFlags` | The flags to clear. |

### discardToSps

```
public static void discardToSps(ByteBuffer data)
```

Discards data from the buffer up to the first SPS, where `data.position()` is interpreted as the length of the buffer.

When the method returns, `data.position()` will contain the new length of the buffer. If the buffer is not empty it is guaranteed to start with an SPS.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/nio/ByteBuffer.html data` | Buffer containing start code delimited NAL units. |

### findNalUnit

```
public static int findNalUnit(
    byte[] data,
    int startOffset,
    int endOffset,
    boolean[] prefixFlags
)
```

Finds the first NAL unit in `data`.

If `prefixFlags` is null then the first three bytes of a NAL unit must be entirely contained within the part of the array being searched in order for it to be found.

When `prefixFlags` is non-null, this method supports finding NAL units whose first four bytes span `data` arrays passed to successive calls. To use this feature, pass the same `prefixFlags` parameter to successive calls. State maintained in this parameter enables the detection of such NAL units. Note that when using this feature, the return value may be 3, 2 or 1 less than `startOffset`, to indicate a NAL unit starting 3, 2 or 1 bytes before the first byte in the current array.

| Parameters |
|---|---|
| `byte[] data` | The data to search. |
| `int startOffset` | The offset (inclusive) in the data to start the search. |
| `int endOffset` | The offset (exclusive) in the data to end the search. |
| `boolean[] prefixFlags` | A boolean array whose first three elements are used to store the state required to detect NAL units where the NAL unit prefix spans array boundaries. The array must be at least 3 elements long. |

| Returns |
|---|---|
| `int` | The offset of the NAL unit, or `endOffset` if a NAL unit was not found. |

### getH265BaseLayerCodecsString

```
public static @Nullable String getH265BaseLayerCodecsString(List<byte[]> csdBuffers)
```

Returns a new RFC 6381 codecs description string specifically for the single-layer HEVC case. When falling back to single-layer HEVC from L-HEVC, both profile and level should be adjusted for the base layer case and the codecs description string should represent that. For the single-layer HEVC case, the string is derived from the SPS of the base layer.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/util/List.html<byte[]> csdBuffers` | The CSD buffers that include the SPS of the base layer. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html` | A RFC 6381 codecs string derived from the SPS of the base layer if such information is available, or null otherwise. |

### getH265NalUnitType

```
public static int getH265NalUnitType(byte[] data, int offset)
```

Returns the type of the H.265 NAL unit in `data` that starts at `offset`.

| Parameters |
|---|---|
| `byte[] data` | The data to search. |
| `int offset` | The start offset of a NAL unit. Must lie between `-3` (inclusive) and `data.length - 3` (exclusive). |

| Returns |
|---|---|
| `int` | The type of the unit. |

### getNalUnitType

```
public static int getNalUnitType(byte[] data, int offset)
```

Returns the type of the NAL unit in `data` that starts at `offset`.

| Parameters |
|---|---|
| `byte[] data` | The data to search. |
| `int offset` | The start offset of a NAL unit. Must lie between `-3` (inclusive) and `data.length - 3` (exclusive). |

| Returns |
|---|---|
| `int` | The type of the unit. |

### isDependedOn

```
public static boolean isDependedOn(byte[] data, int offset, int length, Format format)
```

Returns whether the NAL unit starting with the given bytes can be depended on by subsequent NAL units in decoding order.

| Parameters |
|---|---|
| `byte[] data` | The array holding the first `length` bytes of the NAL unit. |
| `int offset` | The offset in `data` at which the NAL unit starts. |
| `int length` | The number of bytes available. |
| `https://developer.android.com/reference/androidx/media3/common/Format format` | The sample `https://developer.android.com/reference/androidx/media3/common/Format`. |

### isH264NalUnitDependedOn

```
public static boolean isH264NalUnitDependedOn(byte nalUnitHeaderFirstByte)
```

Returns whether the H.264 NAL unit can be depended on by subsequent NAL units in decoding order.

| Parameters |
|---|---|
| `byte nalUnitHeaderFirstByte` | The first byte of nal_unit(). |

### isNalUnitSei

```
public static boolean [isNalUnitSei](https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#isNalUnitSei(androidx.media3.common.Format,byte))(Format format, byte nalUnitHeaderFirstByte)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#isNalUnitSei(androidx.media3.common.Format,byte[],int)` instead.

### isNalUnitSei

```
public static boolean [isNalUnitSei](https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#isNalUnitSei(java.lang.String,byte))(@Nullable String mimeType, byte nalUnitHeaderFirstByte)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil#isNalUnitSei(androidx.media3.common.Format,byte[],int)` in order to support `https://developer.android.com/reference/androidx/media3/common/MimeTypes#VIDEO_DOLBY_VISION()` tracks with backwards compatible `https://developer.android.com/reference/androidx/media3/common/MimeTypes#VIDEO_H264()` or `https://developer.android.com/reference/androidx/media3/common/MimeTypes#VIDEO_H265()` data.

### isNalUnitSei

```
public static boolean isNalUnitSei(Format format, byte[] data, int offset)
```

Returns whether the NAL unit with the specified header contains supplemental enhancement information.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Format format` | The sample `https://developer.android.com/reference/androidx/media3/common/Format`. |
| `byte[] data` | The buffer containing the NAL unit header. |
| `int offset` | The offset of the NAL unit header in `data`. |

| Returns |
|---|---|
| `boolean` | Whether the NAL unit with the specified header is an SEI NAL unit. False is returned if the `MimeType` is `null`. |

### numberOfBytesInNalUnitHeader

```
public static int numberOfBytesInNalUnitHeader(Format format)
```

Returns the number of bytes in the NAL unit header.

The NAL unit header can be used to determine the NAL unit type and whether subsequent NAL units can depend on the current NAL unit.

This is `nalUnitHeaderBytes` from the H.264 spec, or the size of `
nal_unit_header()` in H.265.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Format format` | The sample `https://developer.android.com/reference/androidx/media3/common/Format`. |

### parseH265Sei3dRefDisplayInfo

```
public static @Nullable NalUnitUtil.H265Sei3dRefDisplayInfoData parseH265Sei3dRefDisplayInfo(
    byte[] nalData,
    int nalOffset,
    int nalLimit
)
```

Parses a H.265 3D reference displays information SEI message syntax defined in ITU-T Recommendation H.265 (2019) subsection G.14.2.3. Given a generic PREFIX_SEI NAL unit, only 3D reference displays information SEI is parsed, if exists.

| Parameters |
|---|---|
| `byte[] nalData` | A buffer containing escaped prefix SEI data. |
| `int nalOffset` | The offset of the NAL unit header in `nalData`. |
| `int nalLimit` | The limit of the NAL unit in `nalData`. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265Sei3dRefDisplayInfoData` | A parsed representation of the PPS data. |

### parseH265SpsNalUnit

```
public static NalUnitUtil.H265SpsData parseH265SpsNalUnit(
    byte[] nalData,
    int nalOffset,
    int nalLimit,
    @Nullable NalUnitUtil.H265VpsData vpsData
)
```

Parses a H.265 SPS NAL unit using the syntax defined in ITU-T Recommendation H.265 (2019) subsections 7.3.2.2.1 and F.7.3.2.2.1.

| Parameters |
|---|---|
| `byte[] nalData` | A buffer containing escaped SPS data. |
| `int nalOffset` | The offset of the NAL unit header in `nalData`. |
| `int nalLimit` | The limit of the NAL unit in `nalData`. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265VpsData vpsData` | The VPS that the SPS refers to or `null` if unavailable. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265SpsData` | A parsed representation of the SPS data. |

### parseH265SpsNalUnitPayload

```
public static NalUnitUtil.H265SpsData parseH265SpsNalUnitPayload(
    byte[] nalData,
    int nalOffset,
    int nalLimit,
    NalUnitUtil.H265NalHeader nalHeader,
    @Nullable NalUnitUtil.H265VpsData vpsData
)
```

Parses a H.265 SPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.265 (2019) subsections 7.3.2.2.1 and F.7.3.2.2.1.

| Parameters |
|---|---|
| `byte[] nalData` | A buffer containing escaped SPS data. |
| `int nalOffset` | The offset of the NAL unit payload in `nalData`. |
| `int nalLimit` | The limit of the NAL unit in `nalData`. |
| `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265NalHeader nalHeader` | The parsed representation of the NAL header. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265VpsData vpsData` | The VPS that the SPS refers to or `null` if unavailable. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265SpsData` | A parsed representation of the SPS data. |

### parseH265VpsNalUnit

```
public static NalUnitUtil.H265VpsData parseH265VpsNalUnit(byte[] nalData, int nalOffset, int nalLimit)
```

Parses a H.265 VPS NAL unit using the syntax defined in ITU-T Recommendation H.265 (2019) subsections 7.3.2.1 and F.7.3.2.1.

| Parameters |
|---|---|
| `byte[] nalData` | A buffer containing escaped VPS data. |
| `int nalOffset` | The offset of the NAL unit header in `nalData`. |
| `int nalLimit` | The limit of the NAL unit in `nalData`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.H265VpsData` | A parsed representation of the VPS data. |

### parsePpsNalUnit

```
public static NalUnitUtil.PpsData parsePpsNalUnit(byte[] nalData, int nalOffset, int nalLimit)
```

Parses a PPS NAL unit using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.2.

| Parameters |
|---|---|
| `byte[] nalData` | A buffer containing escaped PPS data. |
| `int nalOffset` | The offset of the NAL unit header in `nalData`. |
| `int nalLimit` | The limit of the NAL unit in `nalData`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.PpsData` | A parsed representation of the PPS data. |

### parsePpsNalUnitPayload

```
public static NalUnitUtil.PpsData parsePpsNalUnitPayload(byte[] nalData, int nalOffset, int nalLimit)
```

Parses a PPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.2.

| Parameters |
|---|---|
| `byte[] nalData` | A buffer containing escaped PPS data. |
| `int nalOffset` | The offset of the NAL unit payload in `nalData`. |
| `int nalLimit` | The limit of the NAL unit in `nalData`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.PpsData` | A parsed representation of the PPS data. |

### parseSeiStereoMode

```
@C.StereoMode
public static int parseSeiStereoMode(byte[] seiData, int offset, int limit)
```

Parses the unescaped RBSP data of an H.264 or H.265 SEI NAL unit (excluding the NAL unit start code and NAL unit header) to extract the `https://developer.android.com/reference/androidx/media3/common/C.StereoMode` from a `
frame_packing_arrangement` SEI message (payload type 45), if present.

Value is one of the following:

- `Format.NO_VALUE`

<br />

| Parameters |
|---|---|
| `byte[] seiData` | A buffer containing unescaped SEI RBSP data. |
| `int offset` | The offset of the SEI RBSP payload (after the NAL unit header) in ` seiData`. |
| `int limit` | The limit (exclusive) of the SEI RBSP payload in `seiData`. |

| Returns |
|---|---|
| `int` | The parsed `https://developer.android.com/reference/androidx/media3/common/C.StereoMode`, or `https://developer.android.com/reference/androidx/media3/common/Format#NO_VALUE()` if no supported ` frame_packing_arrangement` SEI message is present. |

### parseSpsNalUnit

```
public static NalUnitUtil.SpsData parseSpsNalUnit(byte[] nalData, int nalOffset, int nalLimit)
```

Parses a SPS NAL unit using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.1.1.

| Parameters |
|---|---|
| `byte[] nalData` | A buffer containing escaped SPS data. |
| `int nalOffset` | The offset of the NAL unit header in `nalData`. |
| `int nalLimit` | The limit of the NAL unit in `nalData`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.SpsData` | A parsed representation of the SPS data. |

### parseSpsNalUnitPayload

```
public static NalUnitUtil.SpsData parseSpsNalUnitPayload(byte[] nalData, int nalOffset, int nalLimit)
```

Parses a SPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.1.1.

| Parameters |
|---|---|
| `byte[] nalData` | A buffer containing escaped SPS data. |
| `int nalOffset` | The offset of the NAL unit payload in `nalData`. |
| `int nalLimit` | The limit of the NAL unit in `nalData`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/container/NalUnitUtil.SpsData` | A parsed representation of the SPS data. |

### unescapeStream

```
public static int unescapeStream(byte[] data, int limit)
```

Unescapes `data` up to the specified limit, replacing occurrences of \[0, 0, 3\] with \[0, 0\]. The unescaped data is returned in-place, with the return value indicating its length.

Executions of this method are mutually exclusive, so it should not be called with very large buffers.

| Parameters |
|---|---|
| `byte[] data` | The data to unescape. |
| `int limit` | The limit (exclusive) of the data to unescape. |

| Returns |
|---|---|
| `int` | The length of the unescaped data. |