com.google.android.exoplayer2.extractor.ts.TsExtractor Java Examples

The following examples show how to use com.google.android.exoplayer2.extractor.ts.TsExtractor. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: DefaultExtractorsFactory.java    From TelePlus-Android with GNU General Public License v2.0 6 votes vote down vote up
@Override
public synchronized Extractor[] createExtractors() {
  Extractor[] extractors = new Extractor[FLAC_EXTRACTOR_CONSTRUCTOR == null ? 12 : 13];
  extractors[0] = new MatroskaExtractor(matroskaFlags);
  extractors[1] = new FragmentedMp4Extractor(fragmentedMp4Flags);
  extractors[2] = new Mp4Extractor(mp4Flags);
  extractors[3] = new Mp3Extractor(mp3Flags);
  extractors[4] = new AdtsExtractor();
  extractors[5] = new Ac3Extractor();
  extractors[6] = new TsExtractor(tsMode, tsFlags);
  extractors[7] = new FlvExtractor();
  extractors[8] = new OggExtractor();
  extractors[9] = new PsExtractor();
  extractors[10] = new WavExtractor();
  extractors[11] = new AmrExtractor();
  if (FLAC_EXTRACTOR_CONSTRUCTOR != null) {
    try {
      extractors[12] = FLAC_EXTRACTOR_CONSTRUCTOR.newInstance();
    } catch (Exception e) {
      // Should never happen.
      throw new IllegalStateException("Unexpected error creating FLAC extractor", e);
    }
  }
  return extractors;
}
 
Example #2
Source File: DefaultExtractorsFactory.java    From TelePlus-Android with GNU General Public License v2.0 6 votes vote down vote up
@Override
public synchronized Extractor[] createExtractors() {
  Extractor[] extractors = new Extractor[FLAC_EXTRACTOR_CONSTRUCTOR == null ? 12 : 13];
  extractors[0] = new MatroskaExtractor(matroskaFlags);
  extractors[1] = new FragmentedMp4Extractor(fragmentedMp4Flags);
  extractors[2] = new Mp4Extractor(mp4Flags);
  extractors[3] = new Mp3Extractor(mp3Flags);
  extractors[4] = new AdtsExtractor();
  extractors[5] = new Ac3Extractor();
  extractors[6] = new TsExtractor(tsMode, tsFlags);
  extractors[7] = new FlvExtractor();
  extractors[8] = new OggExtractor();
  extractors[9] = new PsExtractor();
  extractors[10] = new WavExtractor();
  extractors[11] = new AmrExtractor();
  if (FLAC_EXTRACTOR_CONSTRUCTOR != null) {
    try {
      extractors[12] = FLAC_EXTRACTOR_CONSTRUCTOR.newInstance();
    } catch (Exception e) {
      // Should never happen.
      throw new IllegalStateException("Unexpected error creating FLAC extractor", e);
    }
  }
  return extractors;
}
 
Example #3
Source File: DefaultExtractorsFactory.java    From Telegram-FOSS with GNU General Public License v2.0 4 votes vote down vote up
public DefaultExtractorsFactory() {
  tsMode = TsExtractor.MODE_SINGLE_PMT;
}
 
Example #4
Source File: DefaultHlsExtractorFactory.java    From Telegram with GNU General Public License v2.0 4 votes vote down vote up
private static boolean isReusable(Extractor previousExtractor) {
  return previousExtractor instanceof TsExtractor
      || previousExtractor instanceof FragmentedMp4Extractor;
}
 
Example #5
Source File: DefaultHlsExtractorFactory.java    From Telegram with GNU General Public License v2.0 4 votes vote down vote up
private static TsExtractor createTsExtractor(
    @DefaultTsPayloadReaderFactory.Flags int userProvidedPayloadReaderFactoryFlags,
    boolean exposeCea608WhenMissingDeclarations,
    Format format,
    List<Format> muxedCaptionFormats,
    TimestampAdjuster timestampAdjuster) {
  @DefaultTsPayloadReaderFactory.Flags
  int payloadReaderFactoryFlags =
      DefaultTsPayloadReaderFactory.FLAG_IGNORE_SPLICE_INFO_STREAM
          | userProvidedPayloadReaderFactoryFlags;
  if (muxedCaptionFormats != null) {
    // The playlist declares closed caption renditions, we should ignore descriptors.
    payloadReaderFactoryFlags |= DefaultTsPayloadReaderFactory.FLAG_OVERRIDE_CAPTION_DESCRIPTORS;
  } else if (exposeCea608WhenMissingDeclarations) {
    // The playlist does not provide any closed caption information. We preemptively declare a
    // closed caption track on channel 0.
    muxedCaptionFormats =
        Collections.singletonList(
            Format.createTextSampleFormat(
                /* id= */ null,
                MimeTypes.APPLICATION_CEA608,
                /* selectionFlags= */ 0,
                /* language= */ null));
  } else {
    muxedCaptionFormats = Collections.emptyList();
  }
  String codecs = format.codecs;
  if (!TextUtils.isEmpty(codecs)) {
    // Sometimes AAC and H264 streams are declared in TS chunks even though they don't really
    // exist. If we know from the codec attribute that they don't exist, then we can
    // explicitly ignore them even if they're declared.
    if (!MimeTypes.AUDIO_AAC.equals(MimeTypes.getAudioMediaMimeType(codecs))) {
      payloadReaderFactoryFlags |= DefaultTsPayloadReaderFactory.FLAG_IGNORE_AAC_STREAM;
    }
    if (!MimeTypes.VIDEO_H264.equals(MimeTypes.getVideoMediaMimeType(codecs))) {
      payloadReaderFactoryFlags |= DefaultTsPayloadReaderFactory.FLAG_IGNORE_H264_STREAM;
    }
  }

  return new TsExtractor(
      TsExtractor.MODE_HLS,
      timestampAdjuster,
      new DefaultTsPayloadReaderFactory(payloadReaderFactoryFlags, muxedCaptionFormats));
}
 
Example #6
Source File: DefaultHlsExtractorFactory.java    From Telegram with GNU General Public License v2.0 4 votes vote down vote up
@Override
public Result createExtractor(
    Extractor previousExtractor,
    Uri uri,
    Format format,
    List<Format> muxedCaptionFormats,
    DrmInitData drmInitData,
    TimestampAdjuster timestampAdjuster,
    Map<String, List<String>> responseHeaders,
    ExtractorInput extractorInput)
    throws InterruptedException, IOException {

  if (previousExtractor != null) {
    // A extractor has already been successfully used. Return one of the same type.
    if (isReusable(previousExtractor)) {
      return buildResult(previousExtractor);
    } else {
      Result result =
          buildResultForSameExtractorType(previousExtractor, format, timestampAdjuster);
      if (result == null) {
        throw new IllegalArgumentException(
            "Unexpected previousExtractor type: " + previousExtractor.getClass().getSimpleName());
      }
    }
  }

  // Try selecting the extractor by the file extension.
  Extractor extractorByFileExtension =
      createExtractorByFileExtension(
          uri, format, muxedCaptionFormats, drmInitData, timestampAdjuster);
  extractorInput.resetPeekPosition();
  if (sniffQuietly(extractorByFileExtension, extractorInput)) {
    return buildResult(extractorByFileExtension);
  }

  // We need to manually sniff each known type, without retrying the one selected by file
  // extension.

  if (!(extractorByFileExtension instanceof WebvttExtractor)) {
    WebvttExtractor webvttExtractor = new WebvttExtractor(format.language, timestampAdjuster);
    if (sniffQuietly(webvttExtractor, extractorInput)) {
      return buildResult(webvttExtractor);
    }
  }

  if (!(extractorByFileExtension instanceof AdtsExtractor)) {
    AdtsExtractor adtsExtractor = new AdtsExtractor();
    if (sniffQuietly(adtsExtractor, extractorInput)) {
      return buildResult(adtsExtractor);
    }
  }

  if (!(extractorByFileExtension instanceof Ac3Extractor)) {
    Ac3Extractor ac3Extractor = new Ac3Extractor();
    if (sniffQuietly(ac3Extractor, extractorInput)) {
      return buildResult(ac3Extractor);
    }
  }

  if (!(extractorByFileExtension instanceof Ac4Extractor)) {
    Ac4Extractor ac4Extractor = new Ac4Extractor();
    if (sniffQuietly(ac4Extractor, extractorInput)) {
      return buildResult(ac4Extractor);
    }
  }

  if (!(extractorByFileExtension instanceof Mp3Extractor)) {
    Mp3Extractor mp3Extractor =
        new Mp3Extractor(/* flags= */ 0, /* forcedFirstSampleTimestampUs= */ 0);
    if (sniffQuietly(mp3Extractor, extractorInput)) {
      return buildResult(mp3Extractor);
    }
  }

  if (!(extractorByFileExtension instanceof FragmentedMp4Extractor)) {
    FragmentedMp4Extractor fragmentedMp4Extractor =
        createFragmentedMp4Extractor(timestampAdjuster, format, drmInitData, muxedCaptionFormats);
    if (sniffQuietly(fragmentedMp4Extractor, extractorInput)) {
      return buildResult(fragmentedMp4Extractor);
    }
  }

  if (!(extractorByFileExtension instanceof TsExtractor)) {
    TsExtractor tsExtractor =
        createTsExtractor(
            payloadReaderFactoryFlags,
            exposeCea608WhenMissingDeclarations,
            format,
            muxedCaptionFormats,
            timestampAdjuster);
    if (sniffQuietly(tsExtractor, extractorInput)) {
      return buildResult(tsExtractor);
    }
  }

  // Fall back on the extractor created by file extension.
  return buildResult(extractorByFileExtension);
}
 
Example #7
Source File: DefaultExtractorsFactory.java    From Telegram with GNU General Public License v2.0 4 votes vote down vote up
@Override
public synchronized Extractor[] createExtractors() {
  Extractor[] extractors = new Extractor[FLAC_EXTRACTOR_CONSTRUCTOR == null ? 13 : 14];
  extractors[0] = new MatroskaExtractor(matroskaFlags);
  extractors[1] = new FragmentedMp4Extractor(fragmentedMp4Flags);
  extractors[2] = new Mp4Extractor(mp4Flags);
  extractors[3] = new OggExtractor();
  extractors[4] =
      new Mp3Extractor(
          mp3Flags
              | (constantBitrateSeekingEnabled
                  ? Mp3Extractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
                  : 0));
  extractors[5] =
      new AdtsExtractor(
          /* firstStreamSampleTimestampUs= */ 0,
          adtsFlags
              | (constantBitrateSeekingEnabled
                  ? AdtsExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
                  : 0));
  extractors[6] = new Ac3Extractor();
  extractors[7] = new TsExtractor(tsMode, tsFlags);
  extractors[8] = new FlvExtractor();
  extractors[9] = new PsExtractor();
  extractors[10] = new WavExtractor();
  extractors[11] =
      new AmrExtractor(
          amrFlags
              | (constantBitrateSeekingEnabled
                  ? AmrExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
                  : 0));
  extractors[12] = new Ac4Extractor();
  if (FLAC_EXTRACTOR_CONSTRUCTOR != null) {
    try {
      extractors[13] = FLAC_EXTRACTOR_CONSTRUCTOR.newInstance();
    } catch (Exception e) {
      // Should never happen.
      throw new IllegalStateException("Unexpected error creating FLAC extractor", e);
    }
  }
  return extractors;
}
 
Example #8
Source File: DefaultExtractorsFactory.java    From Telegram with GNU General Public License v2.0 4 votes vote down vote up
public DefaultExtractorsFactory() {
  tsMode = TsExtractor.MODE_SINGLE_PMT;
}
 
Example #9
Source File: DefaultHlsExtractorFactory.java    From Telegram-FOSS with GNU General Public License v2.0 4 votes vote down vote up
private static boolean isReusable(Extractor previousExtractor) {
  return previousExtractor instanceof TsExtractor
      || previousExtractor instanceof FragmentedMp4Extractor;
}
 
Example #10
Source File: DefaultHlsExtractorFactory.java    From Telegram-FOSS with GNU General Public License v2.0 4 votes vote down vote up
private static TsExtractor createTsExtractor(
    @DefaultTsPayloadReaderFactory.Flags int userProvidedPayloadReaderFactoryFlags,
    boolean exposeCea608WhenMissingDeclarations,
    Format format,
    List<Format> muxedCaptionFormats,
    TimestampAdjuster timestampAdjuster) {
  @DefaultTsPayloadReaderFactory.Flags
  int payloadReaderFactoryFlags =
      DefaultTsPayloadReaderFactory.FLAG_IGNORE_SPLICE_INFO_STREAM
          | userProvidedPayloadReaderFactoryFlags;
  if (muxedCaptionFormats != null) {
    // The playlist declares closed caption renditions, we should ignore descriptors.
    payloadReaderFactoryFlags |= DefaultTsPayloadReaderFactory.FLAG_OVERRIDE_CAPTION_DESCRIPTORS;
  } else if (exposeCea608WhenMissingDeclarations) {
    // The playlist does not provide any closed caption information. We preemptively declare a
    // closed caption track on channel 0.
    muxedCaptionFormats =
        Collections.singletonList(
            Format.createTextSampleFormat(
                /* id= */ null,
                MimeTypes.APPLICATION_CEA608,
                /* selectionFlags= */ 0,
                /* language= */ null));
  } else {
    muxedCaptionFormats = Collections.emptyList();
  }
  String codecs = format.codecs;
  if (!TextUtils.isEmpty(codecs)) {
    // Sometimes AAC and H264 streams are declared in TS chunks even though they don't really
    // exist. If we know from the codec attribute that they don't exist, then we can
    // explicitly ignore them even if they're declared.
    if (!MimeTypes.AUDIO_AAC.equals(MimeTypes.getAudioMediaMimeType(codecs))) {
      payloadReaderFactoryFlags |= DefaultTsPayloadReaderFactory.FLAG_IGNORE_AAC_STREAM;
    }
    if (!MimeTypes.VIDEO_H264.equals(MimeTypes.getVideoMediaMimeType(codecs))) {
      payloadReaderFactoryFlags |= DefaultTsPayloadReaderFactory.FLAG_IGNORE_H264_STREAM;
    }
  }

  return new TsExtractor(
      TsExtractor.MODE_HLS,
      timestampAdjuster,
      new DefaultTsPayloadReaderFactory(payloadReaderFactoryFlags, muxedCaptionFormats));
}
 
Example #11
Source File: DefaultHlsExtractorFactory.java    From Telegram-FOSS with GNU General Public License v2.0 4 votes vote down vote up
@Override
public Result createExtractor(
    Extractor previousExtractor,
    Uri uri,
    Format format,
    List<Format> muxedCaptionFormats,
    DrmInitData drmInitData,
    TimestampAdjuster timestampAdjuster,
    Map<String, List<String>> responseHeaders,
    ExtractorInput extractorInput)
    throws InterruptedException, IOException {

  if (previousExtractor != null) {
    // A extractor has already been successfully used. Return one of the same type.
    if (isReusable(previousExtractor)) {
      return buildResult(previousExtractor);
    } else {
      Result result =
          buildResultForSameExtractorType(previousExtractor, format, timestampAdjuster);
      if (result == null) {
        throw new IllegalArgumentException(
            "Unexpected previousExtractor type: " + previousExtractor.getClass().getSimpleName());
      }
    }
  }

  // Try selecting the extractor by the file extension.
  Extractor extractorByFileExtension =
      createExtractorByFileExtension(
          uri, format, muxedCaptionFormats, drmInitData, timestampAdjuster);
  extractorInput.resetPeekPosition();
  if (sniffQuietly(extractorByFileExtension, extractorInput)) {
    return buildResult(extractorByFileExtension);
  }

  // We need to manually sniff each known type, without retrying the one selected by file
  // extension.

  if (!(extractorByFileExtension instanceof WebvttExtractor)) {
    WebvttExtractor webvttExtractor = new WebvttExtractor(format.language, timestampAdjuster);
    if (sniffQuietly(webvttExtractor, extractorInput)) {
      return buildResult(webvttExtractor);
    }
  }

  if (!(extractorByFileExtension instanceof AdtsExtractor)) {
    AdtsExtractor adtsExtractor = new AdtsExtractor();
    if (sniffQuietly(adtsExtractor, extractorInput)) {
      return buildResult(adtsExtractor);
    }
  }

  if (!(extractorByFileExtension instanceof Ac3Extractor)) {
    Ac3Extractor ac3Extractor = new Ac3Extractor();
    if (sniffQuietly(ac3Extractor, extractorInput)) {
      return buildResult(ac3Extractor);
    }
  }

  if (!(extractorByFileExtension instanceof Ac4Extractor)) {
    Ac4Extractor ac4Extractor = new Ac4Extractor();
    if (sniffQuietly(ac4Extractor, extractorInput)) {
      return buildResult(ac4Extractor);
    }
  }

  if (!(extractorByFileExtension instanceof Mp3Extractor)) {
    Mp3Extractor mp3Extractor =
        new Mp3Extractor(/* flags= */ 0, /* forcedFirstSampleTimestampUs= */ 0);
    if (sniffQuietly(mp3Extractor, extractorInput)) {
      return buildResult(mp3Extractor);
    }
  }

  if (!(extractorByFileExtension instanceof FragmentedMp4Extractor)) {
    FragmentedMp4Extractor fragmentedMp4Extractor =
        createFragmentedMp4Extractor(timestampAdjuster, format, drmInitData, muxedCaptionFormats);
    if (sniffQuietly(fragmentedMp4Extractor, extractorInput)) {
      return buildResult(fragmentedMp4Extractor);
    }
  }

  if (!(extractorByFileExtension instanceof TsExtractor)) {
    TsExtractor tsExtractor =
        createTsExtractor(
            payloadReaderFactoryFlags,
            exposeCea608WhenMissingDeclarations,
            format,
            muxedCaptionFormats,
            timestampAdjuster);
    if (sniffQuietly(tsExtractor, extractorInput)) {
      return buildResult(tsExtractor);
    }
  }

  // Fall back on the extractor created by file extension.
  return buildResult(extractorByFileExtension);
}
 
Example #12
Source File: DefaultExtractorsFactory.java    From Telegram-FOSS with GNU General Public License v2.0 4 votes vote down vote up
@Override
public synchronized Extractor[] createExtractors() {
  Extractor[] extractors = new Extractor[FLAC_EXTRACTOR_CONSTRUCTOR == null ? 13 : 14];
  extractors[0] = new MatroskaExtractor(matroskaFlags);
  extractors[1] = new FragmentedMp4Extractor(fragmentedMp4Flags);
  extractors[2] = new Mp4Extractor(mp4Flags);
  extractors[3] = new OggExtractor();
  extractors[4] =
      new Mp3Extractor(
          mp3Flags
              | (constantBitrateSeekingEnabled
                  ? Mp3Extractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
                  : 0));
  extractors[5] =
      new AdtsExtractor(
          /* firstStreamSampleTimestampUs= */ 0,
          adtsFlags
              | (constantBitrateSeekingEnabled
                  ? AdtsExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
                  : 0));
  extractors[6] = new Ac3Extractor();
  extractors[7] = new TsExtractor(tsMode, tsFlags);
  extractors[8] = new FlvExtractor();
  extractors[9] = new PsExtractor();
  extractors[10] = new WavExtractor();
  extractors[11] =
      new AmrExtractor(
          amrFlags
              | (constantBitrateSeekingEnabled
                  ? AmrExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
                  : 0));
  extractors[12] = new Ac4Extractor();
  if (FLAC_EXTRACTOR_CONSTRUCTOR != null) {
    try {
      extractors[13] = FLAC_EXTRACTOR_CONSTRUCTOR.newInstance();
    } catch (Exception e) {
      // Should never happen.
      throw new IllegalStateException("Unexpected error creating FLAC extractor", e);
    }
  }
  return extractors;
}
 
Example #13
Source File: DefaultExtractorsFactory.java    From MediaSDK with Apache License 2.0 4 votes vote down vote up
public DefaultExtractorsFactory() {
  tsMode = TsExtractor.MODE_SINGLE_PMT;
}
 
Example #14
Source File: DefaultExtractorsFactory.java    From TelePlus-Android with GNU General Public License v2.0 4 votes vote down vote up
public DefaultExtractorsFactory() {
  tsMode = TsExtractor.MODE_SINGLE_PMT;
}
 
Example #15
Source File: DefaultExtractorsFactory.java    From TelePlus-Android with GNU General Public License v2.0 4 votes vote down vote up
public DefaultExtractorsFactory() {
  tsMode = TsExtractor.MODE_SINGLE_PMT;
}
 
Example #16
Source File: DefaultHlsExtractorFactory.java    From MediaSDK with Apache License 2.0 4 votes vote down vote up
private static boolean isReusable(Extractor previousExtractor) {
  return previousExtractor instanceof TsExtractor
      || previousExtractor instanceof FragmentedMp4Extractor;
}
 
Example #17
Source File: DefaultHlsExtractorFactory.java    From MediaSDK with Apache License 2.0 4 votes vote down vote up
private static TsExtractor createTsExtractor(
    @DefaultTsPayloadReaderFactory.Flags int userProvidedPayloadReaderFactoryFlags,
    boolean exposeCea608WhenMissingDeclarations,
    Format format,
    @Nullable List<Format> muxedCaptionFormats,
    TimestampAdjuster timestampAdjuster) {
  @DefaultTsPayloadReaderFactory.Flags
  int payloadReaderFactoryFlags =
      DefaultTsPayloadReaderFactory.FLAG_IGNORE_SPLICE_INFO_STREAM
          | userProvidedPayloadReaderFactoryFlags;
  if (muxedCaptionFormats != null) {
    // The playlist declares closed caption renditions, we should ignore descriptors.
    payloadReaderFactoryFlags |= DefaultTsPayloadReaderFactory.FLAG_OVERRIDE_CAPTION_DESCRIPTORS;
  } else if (exposeCea608WhenMissingDeclarations) {
    // The playlist does not provide any closed caption information. We preemptively declare a
    // closed caption track on channel 0.
    muxedCaptionFormats =
        Collections.singletonList(
            Format.createTextSampleFormat(
                /* id= */ null,
                MimeTypes.APPLICATION_CEA608,
                /* selectionFlags= */ 0,
                /* language= */ null));
  } else {
    muxedCaptionFormats = Collections.emptyList();
  }
  String codecs = format.codecs;
  if (!TextUtils.isEmpty(codecs)) {
    // Sometimes AAC and H264 streams are declared in TS chunks even though they don't really
    // exist. If we know from the codec attribute that they don't exist, then we can
    // explicitly ignore them even if they're declared.
    if (!MimeTypes.AUDIO_AAC.equals(MimeTypes.getAudioMediaMimeType(codecs))) {
      payloadReaderFactoryFlags |= DefaultTsPayloadReaderFactory.FLAG_IGNORE_AAC_STREAM;
    }
    if (!MimeTypes.VIDEO_H264.equals(MimeTypes.getVideoMediaMimeType(codecs))) {
      payloadReaderFactoryFlags |= DefaultTsPayloadReaderFactory.FLAG_IGNORE_H264_STREAM;
    }
  }

  return new TsExtractor(
      TsExtractor.MODE_HLS,
      timestampAdjuster,
      new DefaultTsPayloadReaderFactory(payloadReaderFactoryFlags, muxedCaptionFormats));
}
 
Example #18
Source File: DefaultHlsExtractorFactory.java    From MediaSDK with Apache License 2.0 4 votes vote down vote up
@Override
public Result createExtractor(
    @Nullable Extractor previousExtractor,
    Uri uri,
    Format format,
    @Nullable List<Format> muxedCaptionFormats,
    @Nullable DrmInitData drmInitData,
    TimestampAdjuster timestampAdjuster,
    Map<String, List<String>> responseHeaders,
    ExtractorInput extractorInput)
    throws InterruptedException, IOException {

  if (previousExtractor != null) {
    // A extractor has already been successfully used. Return one of the same type.
    if (isReusable(previousExtractor)) {
      return buildResult(previousExtractor);
    } else {
      Result result =
          buildResultForSameExtractorType(previousExtractor, format, timestampAdjuster);
      if (result == null) {
        throw new IllegalArgumentException(
            "Unexpected previousExtractor type: " + previousExtractor.getClass().getSimpleName());
      }
    }
  }

  // Try selecting the extractor by the file extension.
  Extractor extractorByFileExtension =
      createExtractorByFileExtension(
          uri, format, muxedCaptionFormats, drmInitData, timestampAdjuster);
  extractorInput.resetPeekPosition();
  if (sniffQuietly(extractorByFileExtension, extractorInput)) {
    return buildResult(extractorByFileExtension);
  }

  // We need to manually sniff each known type, without retrying the one selected by file
  // extension.

  if (!(extractorByFileExtension instanceof WebvttExtractor)) {
    WebvttExtractor webvttExtractor = new WebvttExtractor(format.language, timestampAdjuster);
    if (sniffQuietly(webvttExtractor, extractorInput)) {
      return buildResult(webvttExtractor);
    }
  }

  if (!(extractorByFileExtension instanceof AdtsExtractor)) {
    AdtsExtractor adtsExtractor = new AdtsExtractor();
    if (sniffQuietly(adtsExtractor, extractorInput)) {
      return buildResult(adtsExtractor);
    }
  }

  if (!(extractorByFileExtension instanceof Ac3Extractor)) {
    Ac3Extractor ac3Extractor = new Ac3Extractor();
    if (sniffQuietly(ac3Extractor, extractorInput)) {
      return buildResult(ac3Extractor);
    }
  }

  if (!(extractorByFileExtension instanceof Ac4Extractor)) {
    Ac4Extractor ac4Extractor = new Ac4Extractor();
    if (sniffQuietly(ac4Extractor, extractorInput)) {
      return buildResult(ac4Extractor);
    }
  }

  if (!(extractorByFileExtension instanceof Mp3Extractor)) {
    Mp3Extractor mp3Extractor =
        new Mp3Extractor(/* flags= */ 0, /* forcedFirstSampleTimestampUs= */ 0);
    if (sniffQuietly(mp3Extractor, extractorInput)) {
      return buildResult(mp3Extractor);
    }
  }

  if (!(extractorByFileExtension instanceof FragmentedMp4Extractor)) {
    FragmentedMp4Extractor fragmentedMp4Extractor =
        createFragmentedMp4Extractor(timestampAdjuster, format, drmInitData, muxedCaptionFormats);
    if (sniffQuietly(fragmentedMp4Extractor, extractorInput)) {
      return buildResult(fragmentedMp4Extractor);
    }
  }

  if (!(extractorByFileExtension instanceof TsExtractor)) {
    TsExtractor tsExtractor =
        createTsExtractor(
            payloadReaderFactoryFlags,
            exposeCea608WhenMissingDeclarations,
            format,
            muxedCaptionFormats,
            timestampAdjuster);
    if (sniffQuietly(tsExtractor, extractorInput)) {
      return buildResult(tsExtractor);
    }
  }

  // Fall back on the extractor created by file extension.
  return buildResult(extractorByFileExtension);
}
 
Example #19
Source File: DefaultExtractorsFactory.java    From MediaSDK with Apache License 2.0 4 votes vote down vote up
@Override
public synchronized Extractor[] createExtractors() {
  Extractor[] extractors = new Extractor[FLAC_EXTRACTOR_CONSTRUCTOR == null ? 13 : 14];
  extractors[0] = new MatroskaExtractor(matroskaFlags);
  extractors[1] = new FragmentedMp4Extractor(fragmentedMp4Flags);
  extractors[2] = new Mp4Extractor(mp4Flags);
  extractors[3] =
      new Mp3Extractor(
          mp3Flags
              | (constantBitrateSeekingEnabled
                  ? Mp3Extractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
                  : 0));
  extractors[4] =
      new AdtsExtractor(
          adtsFlags
              | (constantBitrateSeekingEnabled
                  ? AdtsExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
                  : 0));
  extractors[5] = new Ac3Extractor();
  extractors[6] = new TsExtractor(tsMode, tsFlags);
  extractors[7] = new FlvExtractor();
  extractors[8] = new OggExtractor();
  extractors[9] = new PsExtractor();
  extractors[10] = new WavExtractor();
  extractors[11] =
      new AmrExtractor(
          amrFlags
              | (constantBitrateSeekingEnabled
                  ? AmrExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
                  : 0));
  extractors[12] = new Ac4Extractor();
  if (FLAC_EXTRACTOR_CONSTRUCTOR != null) {
    try {
      extractors[13] = FLAC_EXTRACTOR_CONSTRUCTOR.newInstance();
    } catch (Exception e) {
      // Should never happen.
      throw new IllegalStateException("Unexpected error creating FLAC extractor", e);
    }
  }
  return extractors;
}
 
Example #20
Source File: DefaultExtractorsFactory.java    From Telegram-FOSS with GNU General Public License v2.0 2 votes vote down vote up
/**
 * Sets the mode for {@link TsExtractor} instances created by the factory.
 *
 * @see TsExtractor#TsExtractor(int, TimestampAdjuster, TsPayloadReader.Factory)
 * @param mode The mode to use.
 * @return The factory, for convenience.
 */
public synchronized DefaultExtractorsFactory setTsExtractorMode(@TsExtractor.Mode int mode) {
  tsMode = mode;
  return this;
}
 
Example #21
Source File: DefaultExtractorsFactory.java    From TelePlus-Android with GNU General Public License v2.0 2 votes vote down vote up
/**
 * Sets the mode for {@link TsExtractor} instances created by the factory.
 *
 * @see TsExtractor#TsExtractor(int, TimestampAdjuster, TsPayloadReader.Factory)
 * @param mode The mode to use.
 * @return The factory, for convenience.
 */
public synchronized DefaultExtractorsFactory setTsExtractorMode(@TsExtractor.Mode int mode) {
  tsMode = mode;
  return this;
}
 
Example #22
Source File: DefaultExtractorsFactory.java    From TelePlus-Android with GNU General Public License v2.0 2 votes vote down vote up
/**
 * Sets the mode for {@link TsExtractor} instances created by the factory.
 *
 * @see TsExtractor#TsExtractor(int, TimestampAdjuster, TsPayloadReader.Factory)
 * @param mode The mode to use.
 * @return The factory, for convenience.
 */
public synchronized DefaultExtractorsFactory setTsExtractorMode(@TsExtractor.Mode int mode) {
  tsMode = mode;
  return this;
}
 
Example #23
Source File: DefaultExtractorsFactory.java    From Telegram with GNU General Public License v2.0 2 votes vote down vote up
/**
 * Sets the mode for {@link TsExtractor} instances created by the factory.
 *
 * @see TsExtractor#TsExtractor(int, TimestampAdjuster, TsPayloadReader.Factory)
 * @param mode The mode to use.
 * @return The factory, for convenience.
 */
public synchronized DefaultExtractorsFactory setTsExtractorMode(@TsExtractor.Mode int mode) {
  tsMode = mode;
  return this;
}
 
Example #24
Source File: DefaultExtractorsFactory.java    From MediaSDK with Apache License 2.0 2 votes vote down vote up
/**
 * Sets the mode for {@link TsExtractor} instances created by the factory.
 *
 * @see TsExtractor#TsExtractor(int, TimestampAdjuster, TsPayloadReader.Factory)
 * @param mode The mode to use.
 * @return The factory, for convenience.
 */
public synchronized DefaultExtractorsFactory setTsExtractorMode(@TsExtractor.Mode int mode) {
  tsMode = mode;
  return this;
}