# ElementaryStreamReader

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

*** ** * ** ***


```
@UnstableApi
public interface ElementaryStreamReader
```

<br />

Known direct subclasses [Ac3Reader](https://developer.android.com/reference/androidx/media3/extractor/ts/Ac3Reader), [Ac4Reader](https://developer.android.com/reference/androidx/media3/extractor/ts/Ac4Reader), [AdtsReader](https://developer.android.com/reference/androidx/media3/extractor/ts/AdtsReader), [DtsReader](https://developer.android.com/reference/androidx/media3/extractor/ts/DtsReader), [DvbSubtitleReader](https://developer.android.com/reference/androidx/media3/extractor/ts/DvbSubtitleReader), [H262Reader](https://developer.android.com/reference/androidx/media3/extractor/ts/H262Reader), [H263Reader](https://developer.android.com/reference/androidx/media3/extractor/ts/H263Reader), [H264Reader](https://developer.android.com/reference/androidx/media3/extractor/ts/H264Reader), [H265Reader](https://developer.android.com/reference/androidx/media3/extractor/ts/H265Reader), [Id3Reader](https://developer.android.com/reference/androidx/media3/extractor/ts/Id3Reader), [LatmReader](https://developer.android.com/reference/androidx/media3/extractor/ts/LatmReader), [MpegAudioReader](https://developer.android.com/reference/androidx/media3/extractor/ts/MpegAudioReader), [MpeghReader](https://developer.android.com/reference/androidx/media3/extractor/ts/MpeghReader)

|---|---|
| `https://developer.android.com/reference/androidx/media3/extractor/ts/Ac3Reader` | Parses a continuous (E-)AC-3 byte stream and extracts individual samples. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/Ac4Reader` | Parses a continuous AC-4 byte stream and extracts individual samples. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/AdtsReader` | Parses a continuous ADTS byte stream and extracts individual frames. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/DtsReader` | Parses a continuous DTS or DTS UHD byte stream and extracts individual samples. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/DvbSubtitleReader` | Parses DVB subtitle data and extracts individual frames. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/H262Reader` | Parses a continuous H262 byte stream and extracts individual frames. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/H263Reader` | Parses an ISO/IEC 14496-2 (MPEG-4 Part 2) or ITU-T Recommendation H.263 byte stream and extracts individual frames. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/H264Reader` | Parses a continuous H264 byte stream and extracts individual frames. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/H265Reader` | Parses a continuous H.265 byte stream and extracts individual frames. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/Id3Reader` | Parses ID3 data and extracts individual text information frames. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/LatmReader` | Parses and extracts samples from an AAC/LATM elementary stream. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/MpegAudioReader` | Parses a continuous MPEG Audio byte stream and extracts individual frames. |
| `https://developer.android.com/reference/androidx/media3/extractor/ts/MpeghReader` | Parses a continuous MPEG-H audio byte stream and extracts MPEG-H frames. |

*** ** * ** ***

Extracts individual samples from an elementary media stream, preserving original order.

The expected sequence of method calls is as follows:

1. `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#createTracks(androidx.media3.extractor.ExtractorOutput,androidx.media3.extractor.ts.PesReader.TrackIdGenerator)` (once at initialization)
2. `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#seek()` (optional, to reset the state)
3. `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#packetStarted(long,int)` (to signal the start of a new packet)
4. `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#consume(androidx.media3.common.util.ParsableByteArray)` (zero or more times, to provide packet data)
5. `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#packetFinished()` (to signal the end of the current PES packet)
6. Repeat steps 3-5 for subsequent packets
7. `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#endOfInputReached()` (called when there are no more packets)

## Summary

| ### Public methods |
|---|---|
| `abstract void` | `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#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. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#createTracks(androidx.media3.extractor.ExtractorOutput,androidx.media3.extractor.ts.PesReader.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. |
| `default void` | `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#endOfInputReached()()` Called when there will be no further packets (unless a seek occurs) because the stream ended. |
| `default void` | `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#packetFinished()()` Called when a PES packet ends. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#packetStarted(long,int)(long pesTimeUs, @https://developer.android.com/reference/androidx/media3/extractor/ts/TsPayloadReader.Flags int flags)` Called when a packet starts. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/extractor/ts/ElementaryStreamReader#seek()()` Notifies the reader that a seek has occurred. |

## Public methods

### consume

```
abstract 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

```
abstract 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

```
default void endOfInputReached()
```

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

### packetFinished

```
default void packetFinished()
```

Called when a PES packet ends. For PES packets with an unset length, this is called when the next packet starts or the stream ends.

### packetStarted

```
abstract 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

```
abstract void seek()
```

Notifies the reader that a seek has occurred.