com.google.android.exoplayer2.extractor.mp3.Mp3Extractor Java Examples

The following examples show how to use com.google.android.exoplayer2.extractor.mp3.Mp3Extractor. 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: DefaultHlsExtractorFactory.java    From Telegram with GNU General Public License v2.0 6 votes vote down vote up
private static Result buildResultForSameExtractorType(
    Extractor previousExtractor, Format format, TimestampAdjuster timestampAdjuster) {
  if (previousExtractor instanceof WebvttExtractor) {
    return buildResult(new WebvttExtractor(format.language, timestampAdjuster));
  } else if (previousExtractor instanceof AdtsExtractor) {
    return buildResult(new AdtsExtractor());
  } else if (previousExtractor instanceof Ac3Extractor) {
    return buildResult(new Ac3Extractor());
  } else if (previousExtractor instanceof Ac4Extractor) {
    return buildResult(new Ac4Extractor());
  } else if (previousExtractor instanceof Mp3Extractor) {
    return buildResult(new Mp3Extractor());
  } else {
    return null;
  }
}
 
Example #2
Source File: DefaultHlsExtractorFactory.java    From MediaSDK with Apache License 2.0 6 votes vote down vote up
@Nullable
private static Result buildResultForSameExtractorType(
    Extractor previousExtractor, Format format, TimestampAdjuster timestampAdjuster) {
  if (previousExtractor instanceof WebvttExtractor) {
    return buildResult(new WebvttExtractor(format.language, timestampAdjuster));
  } else if (previousExtractor instanceof AdtsExtractor) {
    return buildResult(new AdtsExtractor());
  } else if (previousExtractor instanceof Ac3Extractor) {
    return buildResult(new Ac3Extractor());
  } else if (previousExtractor instanceof Ac4Extractor) {
    return buildResult(new Ac4Extractor());
  } else if (previousExtractor instanceof Mp3Extractor) {
    return buildResult(new Mp3Extractor());
  } else {
    return null;
  }
}
 
Example #3
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 #4
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 #5
Source File: DefaultHlsExtractorFactory.java    From Telegram-FOSS with GNU General Public License v2.0 6 votes vote down vote up
private static Result buildResultForSameExtractorType(
    Extractor previousExtractor, Format format, TimestampAdjuster timestampAdjuster) {
  if (previousExtractor instanceof WebvttExtractor) {
    return buildResult(new WebvttExtractor(format.language, timestampAdjuster));
  } else if (previousExtractor instanceof AdtsExtractor) {
    return buildResult(new AdtsExtractor());
  } else if (previousExtractor instanceof Ac3Extractor) {
    return buildResult(new Ac3Extractor());
  } else if (previousExtractor instanceof Ac4Extractor) {
    return buildResult(new Ac4Extractor());
  } else if (previousExtractor instanceof Mp3Extractor) {
    return buildResult(new Mp3Extractor());
  } else {
    return null;
  }
}
 
Example #6
Source File: DefaultHlsExtractorFactory.java    From Telegram with GNU General Public License v2.0 5 votes vote down vote up
private static Result buildResult(Extractor extractor) {
  return new Result(
      extractor,
      extractor instanceof AdtsExtractor
          || extractor instanceof Ac3Extractor
          || extractor instanceof Ac4Extractor
          || extractor instanceof Mp3Extractor,
      isReusable(extractor));
}
 
Example #7
Source File: DefaultHlsExtractorFactory.java    From MediaSDK with Apache License 2.0 5 votes vote down vote up
private Extractor createExtractorByFileExtension(
    Uri uri,
    Format format,
    @Nullable List<Format> muxedCaptionFormats,
    @Nullable DrmInitData drmInitData,
    TimestampAdjuster timestampAdjuster) {
  String lastPathSegment = uri.getLastPathSegment();
  if (lastPathSegment == null) {
    lastPathSegment = "";
  }
  if (MimeTypes.TEXT_VTT.equals(format.sampleMimeType)
      || lastPathSegment.endsWith(WEBVTT_FILE_EXTENSION)
      || lastPathSegment.endsWith(VTT_FILE_EXTENSION)) {
    return new WebvttExtractor(format.language, timestampAdjuster);
  } else if (lastPathSegment.endsWith(AAC_FILE_EXTENSION)) {
    return new AdtsExtractor();
  } else if (lastPathSegment.endsWith(AC3_FILE_EXTENSION)
      || lastPathSegment.endsWith(EC3_FILE_EXTENSION)) {
    return new Ac3Extractor();
  } else if (lastPathSegment.endsWith(AC4_FILE_EXTENSION)) {
    return new Ac4Extractor();
  } else if (lastPathSegment.endsWith(MP3_FILE_EXTENSION)) {
    return new Mp3Extractor(/* flags= */ 0, /* forcedFirstSampleTimestampUs= */ 0);
  } else if (lastPathSegment.endsWith(MP4_FILE_EXTENSION)
      || lastPathSegment.startsWith(M4_FILE_EXTENSION_PREFIX, lastPathSegment.length() - 4)
      || lastPathSegment.startsWith(MP4_FILE_EXTENSION_PREFIX, lastPathSegment.length() - 5)
      || lastPathSegment.startsWith(CMF_FILE_EXTENSION_PREFIX, lastPathSegment.length() - 5)) {
    return createFragmentedMp4Extractor(
        timestampAdjuster, format, drmInitData, muxedCaptionFormats);
  } else {
    // For any other file extension, we assume TS format.
    return createTsExtractor(
        payloadReaderFactoryFlags,
        exposeCea608WhenMissingDeclarations,
        format,
        muxedCaptionFormats,
        timestampAdjuster);
  }
}
 
Example #8
Source File: DefaultHlsExtractorFactory.java    From MediaSDK with Apache License 2.0 5 votes vote down vote up
private static Result buildResult(Extractor extractor) {
  return new Result(
      extractor,
      extractor instanceof AdtsExtractor
          || extractor instanceof Ac3Extractor
          || extractor instanceof Ac4Extractor
          || extractor instanceof Mp3Extractor,
      isReusable(extractor));
}
 
Example #9
Source File: DefaultHlsExtractorFactory.java    From Telegram with GNU General Public License v2.0 5 votes vote down vote up
private Extractor createExtractorByFileExtension(
    Uri uri,
    Format format,
    List<Format> muxedCaptionFormats,
    DrmInitData drmInitData,
    TimestampAdjuster timestampAdjuster) {
  String lastPathSegment = uri.getLastPathSegment();
  if (lastPathSegment == null) {
    lastPathSegment = "";
  }
  if (MimeTypes.TEXT_VTT.equals(format.sampleMimeType)
      || lastPathSegment.endsWith(WEBVTT_FILE_EXTENSION)
      || lastPathSegment.endsWith(VTT_FILE_EXTENSION)) {
    return new WebvttExtractor(format.language, timestampAdjuster);
  } else if (lastPathSegment.endsWith(AAC_FILE_EXTENSION)) {
    return new AdtsExtractor();
  } else if (lastPathSegment.endsWith(AC3_FILE_EXTENSION)
      || lastPathSegment.endsWith(EC3_FILE_EXTENSION)) {
    return new Ac3Extractor();
  } else if (lastPathSegment.endsWith(AC4_FILE_EXTENSION)) {
    return new Ac4Extractor();
  } else if (lastPathSegment.endsWith(MP3_FILE_EXTENSION)) {
    return new Mp3Extractor(/* flags= */ 0, /* forcedFirstSampleTimestampUs= */ 0);
  } else if (lastPathSegment.endsWith(MP4_FILE_EXTENSION)
      || lastPathSegment.startsWith(M4_FILE_EXTENSION_PREFIX, lastPathSegment.length() - 4)
      || lastPathSegment.startsWith(MP4_FILE_EXTENSION_PREFIX, lastPathSegment.length() - 5)
      || lastPathSegment.startsWith(CMF_FILE_EXTENSION_PREFIX, lastPathSegment.length() - 5)) {
    return createFragmentedMp4Extractor(
        timestampAdjuster, format, drmInitData, muxedCaptionFormats);
  } else {
    // For any other file extension, we assume TS format.
    return createTsExtractor(
        payloadReaderFactoryFlags,
        exposeCea608WhenMissingDeclarations,
        format,
        muxedCaptionFormats,
        timestampAdjuster);
  }
}
 
Example #10
Source File: DefaultHlsExtractorFactory.java    From Telegram-FOSS with GNU General Public License v2.0 5 votes vote down vote up
private static Result buildResult(Extractor extractor) {
  return new Result(
      extractor,
      extractor instanceof AdtsExtractor
          || extractor instanceof Ac3Extractor
          || extractor instanceof Ac4Extractor
          || extractor instanceof Mp3Extractor,
      isReusable(extractor));
}
 
Example #11
Source File: DefaultHlsExtractorFactory.java    From Telegram-FOSS with GNU General Public License v2.0 5 votes vote down vote up
private Extractor createExtractorByFileExtension(
    Uri uri,
    Format format,
    List<Format> muxedCaptionFormats,
    DrmInitData drmInitData,
    TimestampAdjuster timestampAdjuster) {
  String lastPathSegment = uri.getLastPathSegment();
  if (lastPathSegment == null) {
    lastPathSegment = "";
  }
  if (MimeTypes.TEXT_VTT.equals(format.sampleMimeType)
      || lastPathSegment.endsWith(WEBVTT_FILE_EXTENSION)
      || lastPathSegment.endsWith(VTT_FILE_EXTENSION)) {
    return new WebvttExtractor(format.language, timestampAdjuster);
  } else if (lastPathSegment.endsWith(AAC_FILE_EXTENSION)) {
    return new AdtsExtractor();
  } else if (lastPathSegment.endsWith(AC3_FILE_EXTENSION)
      || lastPathSegment.endsWith(EC3_FILE_EXTENSION)) {
    return new Ac3Extractor();
  } else if (lastPathSegment.endsWith(AC4_FILE_EXTENSION)) {
    return new Ac4Extractor();
  } else if (lastPathSegment.endsWith(MP3_FILE_EXTENSION)) {
    return new Mp3Extractor(/* flags= */ 0, /* forcedFirstSampleTimestampUs= */ 0);
  } else if (lastPathSegment.endsWith(MP4_FILE_EXTENSION)
      || lastPathSegment.startsWith(M4_FILE_EXTENSION_PREFIX, lastPathSegment.length() - 4)
      || lastPathSegment.startsWith(MP4_FILE_EXTENSION_PREFIX, lastPathSegment.length() - 5)
      || lastPathSegment.startsWith(CMF_FILE_EXTENSION_PREFIX, lastPathSegment.length() - 5)) {
    return createFragmentedMp4Extractor(
        timestampAdjuster, format, drmInitData, muxedCaptionFormats);
  } else {
    // For any other file extension, we assume TS format.
    return createTsExtractor(
        payloadReaderFactoryFlags,
        exposeCea608WhenMissingDeclarations,
        format,
        muxedCaptionFormats,
        timestampAdjuster);
  }
}
 
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: 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 #14
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 #15
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 #16
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 #17
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 #18
Source File: DefaultExtractorsFactory.java    From MediaSDK with Apache License 2.0 2 votes vote down vote up
/**
 * Sets flags for {@link Mp3Extractor} instances created by the factory.
 *
 * @see Mp3Extractor#Mp3Extractor(int)
 * @param flags The flags to use.
 * @return The factory, for convenience.
 */
public synchronized DefaultExtractorsFactory setMp3ExtractorFlags(@Mp3Extractor.Flags int flags) {
  mp3Flags = flags;
  return this;
}
 
Example #19
Source File: DefaultExtractorsFactory.java    From Telegram with GNU General Public License v2.0 2 votes vote down vote up
/**
 * Sets flags for {@link Mp3Extractor} instances created by the factory.
 *
 * @see Mp3Extractor#Mp3Extractor(int)
 * @param flags The flags to use.
 * @return The factory, for convenience.
 */
public synchronized DefaultExtractorsFactory setMp3ExtractorFlags(@Mp3Extractor.Flags int flags) {
  mp3Flags = flags;
  return this;
}
 
Example #20
Source File: DefaultExtractorsFactory.java    From Telegram-FOSS with GNU General Public License v2.0 2 votes vote down vote up
/**
 * Sets flags for {@link Mp3Extractor} instances created by the factory.
 *
 * @see Mp3Extractor#Mp3Extractor(int)
 * @param flags The flags to use.
 * @return The factory, for convenience.
 */
public synchronized DefaultExtractorsFactory setMp3ExtractorFlags(@Mp3Extractor.Flags int flags) {
  mp3Flags = flags;
  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 flags for {@link Mp3Extractor} instances created by the factory.
 *
 * @see Mp3Extractor#Mp3Extractor(int)
 * @param flags The flags to use.
 * @return The factory, for convenience.
 */
public synchronized DefaultExtractorsFactory setMp3ExtractorFlags(@Mp3Extractor.Flags int flags) {
  mp3Flags = flags;
  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 flags for {@link Mp3Extractor} instances created by the factory.
 *
 * @see Mp3Extractor#Mp3Extractor(int)
 * @param flags The flags to use.
 * @return The factory, for convenience.
 */
public synchronized DefaultExtractorsFactory setMp3ExtractorFlags(@Mp3Extractor.Flags int flags) {
  mp3Flags = flags;
  return this;
}