Package com.google.android.exoplayer2.extractor.ts

## Class TsExtractor

- java.lang.Object
- - com.google.android.exoplayer2.extractor.ts.TsExtractor

- All Implemented Interfaces:
    `Extractor`

      public final class TsExtractor
      extends Object
      implements Extractor

  Extracts data from the MPEG-2 TS container format.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static interface` | `TsExtractor.Mode` | Modes for the extractor.

    - ### Nested classes/interfaces inherited from interface com.google.android.exoplayer2.extractor.Extractor

      `Extractor.ReadResult`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static int` | `DEFAULT_TIMESTAMP_SEARCH_BYTES` |
    `static ExtractorsFactory` | `FACTORY` | Factory for `TsExtractor` instances.
    `static int` | `MODE_HLS` | Enable single PMT mode, map `TrackOutput`s by their type (instead of PID) and ignore continuity counters.
    `static int` | `MODE_MULTI_PMT` | Behave as defined in ISO/IEC 13818-1.
    `static int` | `MODE_SINGLE_PMT` | Assume only one PMT will be contained in the stream, even if more are declared by the PAT.
    `static int` | `TS_PACKET_SIZE` |
    `static int` | `TS_STREAM_TYPE_AAC_ADTS` |
    `static int` | `TS_STREAM_TYPE_AAC_LATM` |
    `static int` | `TS_STREAM_TYPE_AC3` |
    `static int` | `TS_STREAM_TYPE_AC4` |
    `static int` | `TS_STREAM_TYPE_AIT` |
    `static int` | `TS_STREAM_TYPE_DTS` |
    `static int` | `TS_STREAM_TYPE_DVBSUBS` |
    `static int` | `TS_STREAM_TYPE_E_AC3` |
    `static int` | `TS_STREAM_TYPE_H262` |
    `static int` | `TS_STREAM_TYPE_H263` |
    `static int` | `TS_STREAM_TYPE_H264` |
    `static int` | `TS_STREAM_TYPE_H265` |
    `static int` | `TS_STREAM_TYPE_HDMV_DTS` |
    `static int` | `TS_STREAM_TYPE_ID3` |
    `static int` | `TS_STREAM_TYPE_MPA` |
    `static int` | `TS_STREAM_TYPE_MPA_LSF` |
    `static int` | `TS_STREAM_TYPE_SPLICE_INFO` |
    `static int` | `TS_SYNC_BYTE` |

    - ### Fields inherited from interface com.google.android.exoplayer2.extractor.Extractor

      `RESULT_CONTINUE, RESULT_END_OF_INPUT, RESULT_SEEK`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `TsExtractor()` |
    `TsExtractor​(int defaultTsPayloadReaderFlags)` |
    `TsExtractor​(int mode, int defaultTsPayloadReaderFlags, int timestampSearchBytes)` |
    `TsExtractor​(int mode, TimestampAdjuster timestampAdjuster, TsPayloadReader.Factory payloadReaderFactory)` |
    `TsExtractor​(int mode, TimestampAdjuster timestampAdjuster, TsPayloadReader.Factory payloadReaderFactory, int timestampSearchBytes)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `init​(ExtractorOutput output)` | Initializes the extractor with an `ExtractorOutput`.
    `int` | `read​(ExtractorInput input, PositionHolder seekPosition)` | Extracts data read from a provided `ExtractorInput`.
    `void` | `release()` | Releases all kept resources.
    `void` | `seek​(long position, long timeUs)` | Notifies the extractor that a seek has occurred.
    `boolean` | `sniff​(ExtractorInput input)` | Returns whether this extractor can extract samples from the `ExtractorInput`, which must provide data from the start of the stream.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### FACTORY

          public static final ExtractorsFactory FACTORY

      Factory for `TsExtractor` instances.

    - #### MODE_MULTI_PMT

          public static final int MODE_MULTI_PMT

      Behave as defined in ISO/IEC 13818-1.
      See Also:
        Constant Field Values

    - #### MODE_SINGLE_PMT

          public static final int MODE_SINGLE_PMT

      Assume only one PMT will be contained in the stream, even if more are declared by the PAT.
      See Also:
        Constant Field Values

    - #### MODE_HLS

          public static final int MODE_HLS

      Enable single PMT mode, map `TrackOutput`s by their type (instead of PID) and ignore continuity counters.
      See Also:
        Constant Field Values

    - #### TS_PACKET_SIZE

          public static final int TS_PACKET_SIZE

      See Also:
        Constant Field Values

    - #### DEFAULT_TIMESTAMP_SEARCH_BYTES

          public static final int DEFAULT_TIMESTAMP_SEARCH_BYTES

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_MPA

          public static final int TS_STREAM_TYPE_MPA

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_MPA_LSF

          public static final int TS_STREAM_TYPE_MPA_LSF

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_AAC_ADTS

          public static final int TS_STREAM_TYPE_AAC_ADTS

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_AAC_LATM

          public static final int TS_STREAM_TYPE_AAC_LATM

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_AC3

          public static final int TS_STREAM_TYPE_AC3

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_DTS

          public static final int TS_STREAM_TYPE_DTS

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_HDMV_DTS

          public static final int TS_STREAM_TYPE_HDMV_DTS

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_E_AC3

          public static final int TS_STREAM_TYPE_E_AC3

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_AC4

          public static final int TS_STREAM_TYPE_AC4

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_H262

          public static final int TS_STREAM_TYPE_H262

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_H263

          public static final int TS_STREAM_TYPE_H263

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_H264

          public static final int TS_STREAM_TYPE_H264

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_H265

          public static final int TS_STREAM_TYPE_H265

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_ID3

          public static final int TS_STREAM_TYPE_ID3

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_SPLICE_INFO

          public static final int TS_STREAM_TYPE_SPLICE_INFO

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_DVBSUBS

          public static final int TS_STREAM_TYPE_DVBSUBS

      See Also:
        Constant Field Values

    - #### TS_STREAM_TYPE_AIT

          public static final int TS_STREAM_TYPE_AIT

      See Also:
        Constant Field Values

    - #### TS_SYNC_BYTE

          public static final int TS_SYNC_BYTE

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### TsExtractor

          public TsExtractor()

    - #### TsExtractor

          public TsExtractor​(@Flags
                             int defaultTsPayloadReaderFlags)

      Parameters:
        `defaultTsPayloadReaderFlags` - A combination of `DefaultTsPayloadReaderFactory` `FLAG_*` values that control the behavior of the payload readers.

    - #### TsExtractor

          public TsExtractor​(@Mode
                             int mode,
                             @Flags
                             int defaultTsPayloadReaderFlags,
                             int timestampSearchBytes)

      Parameters:
        `mode` - Mode for the extractor. One of `MODE_MULTI_PMT`, `MODE_SINGLE_PMT` and `MODE_HLS`.
        `defaultTsPayloadReaderFlags` - A combination of `DefaultTsPayloadReaderFactory` `FLAG_*` values that control the behavior of the payload readers.
        `timestampSearchBytes` - The number of bytes searched from a given position in the stream to find a PCR timestamp. If this value is too small, the duration might be unknown and seeking might not be supported for high bitrate progressive streams. Setting a large value for this field might be inefficient though because the extractor stores a buffer of `timestampSearchBytes` bytes when determining the duration or when performing a seek operation. The default value is `DEFAULT_TIMESTAMP_SEARCH_BYTES`. If the number of bytes left in the stream from the current position is less than `timestampSearchBytes`, the search is performed on the bytes left.

    - #### TsExtractor

          public TsExtractor​(@Mode
                             int mode,
                             TimestampAdjuster timestampAdjuster,
                             TsPayloadReader.Factory payloadReaderFactory)

      Parameters:
        `mode` - Mode for the extractor. One of `MODE_MULTI_PMT`, `MODE_SINGLE_PMT` and `MODE_HLS`.
        `timestampAdjuster` - A timestamp adjuster for offsetting and scaling sample timestamps.
        `payloadReaderFactory` - Factory for injecting a custom set of payload readers.

    - #### TsExtractor

          public TsExtractor​(@Mode
                             int mode,
                             TimestampAdjuster timestampAdjuster,
                             TsPayloadReader.Factory payloadReaderFactory,
                             int timestampSearchBytes)

      Parameters:
        `mode` - Mode for the extractor. One of `MODE_MULTI_PMT`, `MODE_SINGLE_PMT` and `MODE_HLS`.
        `timestampAdjuster` - A timestamp adjuster for offsetting and scaling sample timestamps.
        `payloadReaderFactory` - Factory for injecting a custom set of payload readers.
        `timestampSearchBytes` - The number of bytes searched from a given position in the stream to find a PCR timestamp. If this value is too small, the duration might be unknown and seeking might not be supported for high bitrate progressive streams. Setting a large value for this field might be inefficient though because the extractor stores a buffer of `timestampSearchBytes` bytes when determining the duration or when performing a seek operation. The default value is `DEFAULT_TIMESTAMP_SEARCH_BYTES`. If the number of bytes left in the stream from the current position is less than `timestampSearchBytes`, the search is performed on the bytes left.

  - ### Method Detail

    - #### sniff

          public boolean sniff​(ExtractorInput input)
                        throws IOException

      Description copied from interface: `Extractor`
      Returns whether this extractor can extract samples from the `ExtractorInput`, which must provide data from the start of the stream.

      If `true` is returned, the `input`'s reading position may have been modified. Otherwise, only its peek position may have been modified.

      Specified by:
        `sniff` in interface `Extractor`
      Parameters:
        `input` - The `ExtractorInput` from which data should be peeked/read.
      Returns:
        Whether this extractor can read the provided input.
      Throws:
        `IOException` - If an error occurred reading from the input.

    - #### init

          public void init​(ExtractorOutput output)

      Description copied from interface: `Extractor`
      Initializes the extractor with an `ExtractorOutput`. Called at most once.
      Specified by:
        `init` in interface `Extractor`
      Parameters:
        `output` - An `ExtractorOutput` to receive extracted data.

    - #### seek

          public void seek​(long position,
                           long timeUs)

      Description copied from interface: `Extractor`
      Notifies the extractor that a seek has occurred.

      Following a call to this method, the `ExtractorInput` passed to the next invocation of `Extractor.read(ExtractorInput, PositionHolder)` is required to provide data starting from `position` in the stream. Valid random access positions are the start of the stream and positions that can be obtained from any `SeekMap` passed to the `ExtractorOutput`.

      Specified by:
        `seek` in interface `Extractor`
      Parameters:
        `position` - The byte offset in the stream from which data will be provided.
        `timeUs` - The seek time in microseconds.

    - #### release

          public void release()

      Description copied from interface: `Extractor`
      Releases all kept resources.
      Specified by:
        `release` in interface `Extractor`

    - #### read

          @ReadResult
          public int read​(ExtractorInput input,
                          PositionHolder seekPosition)
                   throws IOException

      Description copied from interface: `Extractor`
      Extracts data read from a provided `ExtractorInput`. Must not be called before `Extractor.init(ExtractorOutput)`.

      A single call to this method will block until some progress has been made, but will not block for longer than this. Hence each call will consume only a small amount of input data.

      In the common case, `Extractor.RESULT_CONTINUE` is returned to indicate that the `ExtractorInput` passed to the next read is required to provide data continuing from the position in the stream reached by the returning call. If the extractor requires data to be provided from a different position, then that position is set in `seekPosition` and `Extractor.RESULT_SEEK` is returned. If the extractor reached the end of the data provided by the `ExtractorInput`, then `Extractor.RESULT_END_OF_INPUT` is returned.

      When this method throws an `IOException`, extraction may continue by providing an `ExtractorInput` with an unchanged `read position` to a subsequent call to this method.

      Specified by:
        `read` in interface `Extractor`
      Parameters:
        `input` - The `ExtractorInput` from which data should be read.
        `seekPosition` - If `Extractor.RESULT_SEEK` is returned, this holder is updated to hold the position of the required data.
      Returns:
        One of the `RESULT_` values defined in this interface.
      Throws:
        `IOException` - If an error occurred reading from or parsing the input.