Java源码示例:com.google.android.exoplayer2.extractor.ExtractorOutput

示例1
private void maybeOutputSeekMap(
    long inputLength, boolean canUseConstantBitrateSeeking, boolean readEndOfStream) {
  if (hasOutputSeekMap) {
    return;
  }
  boolean useConstantBitrateSeeking = canUseConstantBitrateSeeking && averageFrameSize > 0;
  if (useConstantBitrateSeeking
      && reader.getSampleDurationUs() == C.TIME_UNSET
      && !readEndOfStream) {
    // Wait for the sampleDurationUs to be available, or for the end of the stream to be reached,
    // before creating seek map.
    return;
  }

  ExtractorOutput extractorOutput = Assertions.checkNotNull(this.extractorOutput);
  if (useConstantBitrateSeeking && reader.getSampleDurationUs() != C.TIME_UNSET) {
    extractorOutput.seekMap(getConstantBitrateSeekMap(inputLength));
  } else {
    extractorOutput.seekMap(new SeekMap.Unseekable(C.TIME_UNSET));
  }
  hasOutputSeekMap = true;
}
 
示例2
/**
 * Outputs a {@link SeekMap} and returns a {@link FlacBinarySearchSeeker} if one is required to
 * handle seeks.
 */
@Nullable
private static FlacBinarySearchSeeker outputSeekMap(
    FlacDecoderJni decoderJni,
    FlacStreamMetadata streamMetadata,
    long streamLength,
    ExtractorOutput output) {
  boolean haveSeekTable = decoderJni.getSeekPoints(/* timeUs= */ 0) != null;
  FlacBinarySearchSeeker binarySearchSeeker = null;
  SeekMap seekMap;
  if (haveSeekTable) {
    seekMap = new FlacSeekMap(streamMetadata.durationUs(), decoderJni);
  } else if (streamLength != C.LENGTH_UNSET) {
    long firstFramePosition = decoderJni.getDecodePosition();
    binarySearchSeeker =
        new FlacBinarySearchSeeker(streamMetadata, firstFramePosition, streamLength, decoderJni);
    seekMap = binarySearchSeeker.getSeekMap();
  } else {
    seekMap = new SeekMap.Unseekable(streamMetadata.durationUs());
  }
  output.seekMap(seekMap);
  return binarySearchSeeker;
}
 
示例3
private void maybeOutputSeekMap(
    long inputLength, boolean canUseConstantBitrateSeeking, boolean readEndOfStream) {
  if (hasOutputSeekMap) {
    return;
  }
  boolean useConstantBitrateSeeking = canUseConstantBitrateSeeking && averageFrameSize > 0;
  if (useConstantBitrateSeeking
      && reader.getSampleDurationUs() == C.TIME_UNSET
      && !readEndOfStream) {
    // Wait for the sampleDurationUs to be available, or for the end of the stream to be reached,
    // before creating seek map.
    return;
  }

  ExtractorOutput extractorOutput = Assertions.checkNotNull(this.extractorOutput);
  if (useConstantBitrateSeeking && reader.getSampleDurationUs() != C.TIME_UNSET) {
    extractorOutput.seekMap(getConstantBitrateSeekMap(inputLength));
  } else {
    extractorOutput.seekMap(new SeekMap.Unseekable(C.TIME_UNSET));
  }
  hasOutputSeekMap = true;
}
 
示例4
public void createTracks(
    ExtractorOutput extractorOutput, TsPayloadReader.TrackIdGenerator idGenerator) {
  for (int i = 0; i < outputs.length; i++) {
    idGenerator.generateNewId();
    TrackOutput output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_TEXT);
    Format channelFormat = closedCaptionFormats.get(i);
    String channelMimeType = channelFormat.sampleMimeType;
    Assertions.checkArgument(
        MimeTypes.APPLICATION_CEA608.equals(channelMimeType)
            || MimeTypes.APPLICATION_CEA708.equals(channelMimeType),
        "Invalid closed caption mime type provided: " + channelMimeType);
    output.format(
        Format.createTextSampleFormat(
            idGenerator.getFormatId(),
            channelMimeType,
            /* codecs= */ null,
            /* bitrate= */ Format.NO_VALUE,
            channelFormat.selectionFlags,
            channelFormat.language,
            channelFormat.accessibilityChannel,
            /* drmInitData= */ null,
            Format.OFFSET_SAMPLE_RELATIVE,
            channelFormat.initializationData));
    outputs[i] = output;
  }
}
 
示例5
public void createTracks(
    ExtractorOutput extractorOutput, TsPayloadReader.TrackIdGenerator idGenerator) {
  for (int i = 0; i < outputs.length; i++) {
    idGenerator.generateNewId();
    TrackOutput output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_TEXT);
    Format channelFormat = closedCaptionFormats.get(i);
    String channelMimeType = channelFormat.sampleMimeType;
    Assertions.checkArgument(
        MimeTypes.APPLICATION_CEA608.equals(channelMimeType)
            || MimeTypes.APPLICATION_CEA708.equals(channelMimeType),
        "Invalid closed caption mime type provided: " + channelMimeType);
    output.format(
        Format.createTextSampleFormat(
            idGenerator.getFormatId(),
            channelMimeType,
            /* codecs= */ null,
            /* bitrate= */ Format.NO_VALUE,
            channelFormat.selectionFlags,
            channelFormat.language,
            channelFormat.accessibilityChannel,
            /* drmInitData= */ null,
            Format.OFFSET_SAMPLE_RELATIVE,
            channelFormat.initializationData));
    outputs[i] = output;
  }
}
 
示例6
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  for (int i = 0; i < outputs.length; i++) {
    idGenerator.generateNewId();
    TrackOutput output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_TEXT);
    Format channelFormat = closedCaptionFormats.get(i);
    String channelMimeType = channelFormat.sampleMimeType;
    Assertions.checkArgument(MimeTypes.APPLICATION_CEA608.equals(channelMimeType)
        || MimeTypes.APPLICATION_CEA708.equals(channelMimeType),
        "Invalid closed caption mime type provided: " + channelMimeType);
    String formatId = channelFormat.id != null ? channelFormat.id : idGenerator.getFormatId();
    output.format(
        Format.createTextSampleFormat(
            formatId,
            channelMimeType,
            /* codecs= */ null,
            /* bitrate= */ Format.NO_VALUE,
            channelFormat.selectionFlags,
            channelFormat.language,
            channelFormat.accessibilityChannel,
            /* drmInitData= */ null,
            Format.OFFSET_SAMPLE_RELATIVE,
            channelFormat.initializationData));
    outputs[i] = output;
  }
}
 
示例7
@Override
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  for (int i = 0; i < outputs.length; i++) {
    DvbSubtitleInfo subtitleInfo = subtitleInfos.get(i);
    idGenerator.generateNewId();
    TrackOutput output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_TEXT);
    output.format(
        Format.createImageSampleFormat(
            idGenerator.getFormatId(),
            MimeTypes.APPLICATION_DVBSUBS,
            null,
            Format.NO_VALUE,
            0,
            Collections.singletonList(subtitleInfo.initializationData),
            subtitleInfo.language,
            null));
    outputs[i] = output;
  }
}
 
示例8
@Override
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  idGenerator.generateNewId();
  formatId = idGenerator.getFormatId();
  output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_VIDEO);
  if (userDataReader != null) {
    userDataReader.createTracks(extractorOutput, idGenerator);
  }
}
 
示例9
@Override
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  idGenerator.generateNewId();
  formatId = idGenerator.getFormatId();
  output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_VIDEO);
  sampleReader = new SampleReader(output, allowNonIdrKeyframes, detectAccessUnits);
  seiReader.createTracks(extractorOutput, idGenerator);
}
 
示例10
@Override
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  idGenerator.generateNewId();
  output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_METADATA);
  output.format(Format.createSampleFormat(idGenerator.getFormatId(), MimeTypes.APPLICATION_ID3,
      null, Format.NO_VALUE, null));
}
 
示例11
@Override
public void init(ExtractorOutput output) {
  extractorOutput = output;
  trackOutput = extractorOutput.track(0, C.TRACK_TYPE_AUDIO);
  extractorOutput.endTracks();
  try {
    decoderJni = new FlacDecoderJni();
  } catch (FlacDecoderException e) {
    throw new RuntimeException(e);
  }
}
 
示例12
@Override
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  idGenerator.generateNewId();
  formatId = idGenerator.getFormatId();
  output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_VIDEO);
  sampleReader = new SampleReader(output);
  seiReader.createTracks(extractorOutput, idGenerator);
}
 
示例13
@Override
public void init(TimestampAdjuster timestampAdjuster, ExtractorOutput extractorOutput,
    TsPayloadReader.TrackIdGenerator idGenerator) {
  this.timestampAdjuster = timestampAdjuster;
  idGenerator.generateNewId();
  output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_METADATA);
  output.format(Format.createSampleFormat(idGenerator.getFormatId(), MimeTypes.APPLICATION_SCTE35,
      null, Format.NO_VALUE, null));
}
 
示例14
@Override
public void init(ExtractorOutput output) {
  extractorOutput = output;
  trackOutput = extractorOutput.track(0, C.TRACK_TYPE_AUDIO);
  extractorOutput.endTracks();
  try {
    decoderJni = new FlacDecoderJni();
  } catch (FlacDecoderException e) {
    throw new RuntimeException(e);
  }
}
 
示例15
@Override
public void init(ExtractorOutput output) {
  extractorOutput = output;
  if (sideloadedTrack != null) {
    TrackBundle bundle = new TrackBundle(output.track(0, sideloadedTrack.type));
    bundle.init(sideloadedTrack, new DefaultSampleValues(0, 0, 0, 0));
    trackBundles.put(0, bundle);
    maybeInitExtraTracks();
    extractorOutput.endTracks();
  }
}
 
示例16
@Override
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  idGenerator.generateNewId();
  formatId = idGenerator.getFormatId();
  output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_VIDEO);
  if (userDataReader != null) {
    userDataReader.createTracks(extractorOutput, idGenerator);
  }
}
 
示例17
@Override
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  idGenerator.generateNewId();
  formatId = idGenerator.getFormatId();
  output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_VIDEO);
  sampleReader = new SampleReader(output, allowNonIdrKeyframes, detectAccessUnits);
  seiReader.createTracks(extractorOutput, idGenerator);
}
 
示例18
@Override
public void init(ExtractorOutput output) {
  extractorOutput = output;
  if (sideloadedTrack != null) {
    TrackBundle bundle = new TrackBundle(output.track(0, sideloadedTrack.type));
    bundle.init(sideloadedTrack, new DefaultSampleValues(0, 0, 0, 0));
    trackBundles.put(0, bundle);
    maybeInitExtraTracks();
    extractorOutput.endTracks();
  }
}
 
示例19
@Override
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  idGenerator.generateNewId();
  formatId = idGenerator.getFormatId();
  output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_VIDEO);
  sampleReader = new SampleReader(output);
  seiReader.createTracks(extractorOutput, idGenerator);
}
 
示例20
@Override
public void init(ExtractorOutput output) {
  extractorOutput = output;
  trackOutput = extractorOutput.track(0, C.TRACK_TYPE_AUDIO);
  extractorOutput.endTracks();
  try {
    decoderJni = new FlacDecoderJni();
  } catch (FlacDecoderException e) {
    throw new RuntimeException(e);
  }
}
 
示例21
void init(ExtractorOutput output, TrackOutput trackOutput) {
  this.extractorOutput = output;
  this.trackOutput = trackOutput;
  this.oggPacket = new OggPacket();

  reset(true);
}
 
示例22
@Override
public void init(ExtractorOutput output) {
  extractorOutput = output;
  trackOutput = output.track(0, C.TRACK_TYPE_AUDIO);
  wavHeader = null;
  output.endTracks();
}
 
示例23
@Override
public void init(ExtractorOutput output) {
  extractorOutput = output;
  trackOutput = output.track(0, C.TRACK_TYPE_AUDIO);
  wavHeader = null;
  output.endTracks();
}
 
示例24
@Override
public void init(TimestampAdjuster timestampAdjuster, ExtractorOutput extractorOutput,
    TsPayloadReader.TrackIdGenerator idGenerator) {
  this.timestampAdjuster = timestampAdjuster;
  idGenerator.generateNewId();
  output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_METADATA);
  output.format(Format.createSampleFormat(idGenerator.getFormatId(), MimeTypes.APPLICATION_SCTE35,
      null, Format.NO_VALUE, null));
}
 
示例25
@Override
public void init(ExtractorOutput output) {
  output.seekMap(new SeekMap.Unseekable(C.TIME_UNSET));
  trackOutput = output.track(0, C.TRACK_TYPE_TEXT);
  output.endTracks();
  trackOutput.format(format);
}
 
示例26
@Override
public void init(ExtractorOutput output) {
  reader = new AdtsReader(true);
  reader.createTracks(output, new TrackIdGenerator(0, 1));
  output.endTracks();
  output.seekMap(new SeekMap.Unseekable(C.TIME_UNSET));
}
 
示例27
@Override
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  idGenerator.generateNewId();
  output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_METADATA);
  output.format(Format.createSampleFormat(idGenerator.getFormatId(), MimeTypes.APPLICATION_ID3,
      null, Format.NO_VALUE, null));
}
 
示例28
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  for (int i = 0; i < outputs.length; i++) {
    idGenerator.generateNewId();
    TrackOutput output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_TEXT);
    Format channelFormat = closedCaptionFormats.get(i);
    String channelMimeType = channelFormat.sampleMimeType;
    Assertions.checkArgument(MimeTypes.APPLICATION_CEA608.equals(channelMimeType)
        || MimeTypes.APPLICATION_CEA708.equals(channelMimeType),
        "Invalid closed caption mime type provided: " + channelMimeType);
    output.format(Format.createTextSampleFormat(idGenerator.getFormatId(), channelMimeType, null,
        Format.NO_VALUE, channelFormat.selectionFlags, channelFormat.language,
        channelFormat.accessibilityChannel, null));
    outputs[i] = output;
  }
}
 
示例29
@Override
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  idGenerator.generateNewId();
  formatId = idGenerator.getFormatId();
  output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_VIDEO);
  if (userDataReader != null) {
    userDataReader.createTracks(extractorOutput, idGenerator);
  }
}
 
示例30
@Override
public void createTracks(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
  idGenerator.generateNewId();
  formatId = idGenerator.getFormatId();
  output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_VIDEO);
  sampleReader = new SampleReader(output, allowNonIdrKeyframes, detectAccessUnits);
  seiReader.createTracks(extractorOutput, idGenerator);
}