# H264Reader

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/ts/H264Reader.java+class:androidx.media3.extractor.ts.H264Reader)

*** ** * ** ***


```
@UnstableApi
public final class H264Reader implements ElementaryStreamReader
```

<br />

*** ** * ** ***

Parses a continuous H264 byte stream and extracts individual frames.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/extractor/ts/H264Reader#H264Reader(androidx.media3.extractor.ts.SeiReader,boolean,boolean,java.lang.String)( https://developer.android.com/reference/androidx/media3/extractor/ts/SeiReader seiReader, boolean allowNonIdrKeyframes, boolean detectAccessUnits, https://developer.android.com/reference/java/lang/String.html containerMimeType )` |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/media3/extractor/ts/H264Reader#consume(androidx.media3.common.util.ParsableByteArray)(https://developer.android.com/reference/androidx/media3/common/util/ParsableByteArray data)` Consumes (possibly partial) data from the current packet. |
| `void` | `https://developer.android.com/reference/androidx/media3/extractor/ts/H264Reader#createTracks(androidx.media3.extractor.ExtractorOutput,androidx.media3.extractor.ts.TsPayloadReader.TrackIdGenerator)( https://developer.android.com/reference/androidx/media3/extractor/ExtractorOutput extractorOutput, https://developer.android.com/reference/androidx/media3/extractor/ts/TsPayloadReader.TrackIdGenerator idGenerator )` Initializes the reader by providing outputs and ids for the tracks. |
| `void` | `https://developer.android.com/reference/androidx/media3/extractor/ts/H264Reader#endOfInputReached()()` Called when there will be no further packets (unless a seek occurs) because the stream ended. |
| `void` | `https://developer.android.com/reference/androidx/media3/extractor/ts/H264Reader#packetStarted(long,int)(long pesTimeUs, @https://developer.android.com/reference/androidx/media3/extractor/ts/TsPayloadReader.Flags int flags)` Called when a packet starts. |
| `void` | `https://developer.android.com/reference/androidx/media3/extractor/ts/H264Reader#seek()()` Notifies the reader that a seek has occurred. |

| ### Inherited methods |
|---|
| From [androidx.media3.extractor.ts.ElementaryStreamReader](https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader) |---|---| | `void` | `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#packetFinished()()` Called when a PES packet ends. | |

## Public constructors

### H264Reader

```
public H264Reader(
    SeiReader seiReader,
    boolean allowNonIdrKeyframes,
    boolean detectAccessUnits,
    String containerMimeType
)
```

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/extractor/ts/SeiReader seiReader` | An SEI reader for consuming closed caption channels. |
| `boolean allowNonIdrKeyframes` | Whether to treat samples consisting of non-IDR I slices as synchronization samples (key-frames). |
| `boolean detectAccessUnits` | Whether to split the input stream into access units (samples) based on slice headers. Pass `false` if the stream contains access unit delimiters (AUDs). |
| `https://developer.android.com/reference/java/lang/String.html containerMimeType` | The MIME type of the container holding the stream. |

## Public methods

### consume

```
public void consume(ParsableByteArray data)
```

Consumes (possibly partial) data from the current packet.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/util/ParsableByteArray data` | The data to consume. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/ParserException` | If the data could not be parsed. |

### createTracks

```
public void createTracks(
    ExtractorOutput extractorOutput,
    TsPayloadReader.TrackIdGenerator idGenerator
)
```

Initializes the reader by providing outputs and ids for the tracks.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/extractor/ExtractorOutput extractorOutput` | The `https://developer.android.com/reference/androidx/media3/extractor/ExtractorOutput` that receives the extracted data. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/TsPayloadReader.TrackIdGenerator idGenerator` | A `https://developer.android.com/reference/androidx/media3/extractor/ts/TsPayloadReader.TrackIdGenerator` that generates unique track ids for the `https://developer.android.com/reference/androidx/media3/extractor/TrackOutput`s. |

### endOfInputReached

```
public void endOfInputReached()
```

Called when there will be no further packets (unless a seek occurs) because the stream ended.

### packetStarted

```
public void packetStarted(long pesTimeUs, @TsPayloadReader.Flags int flags)
```

Called when a packet starts.

| Parameters |
|---|---|
| `long pesTimeUs` | The timestamp associated with the packet. |
| `@https://developer.android.com/reference/androidx/media3/extractor/ts/TsPayloadReader.Flags int flags` | See `https://developer.android.com/reference/androidx/media3/extractor/ts/TsPayloadReader.Flags`. |

### seek

```
public void seek()
```

Notifies the reader that a seek has occurred.