Search in sources :

Example 11 with TrackOutput

use of com.google.android.exoplayer2.extractor.TrackOutput in project ExoPlayer by google.

the class HlsSampleStreamWrapper method track.

// ExtractorOutput implementation. Called by the loading thread.
@Override
public DefaultTrackOutput track(int id, int type) {
    if (sampleQueues.indexOfKey(id) >= 0) {
        return sampleQueues.get(id);
    }
    DefaultTrackOutput trackOutput = new DefaultTrackOutput(allocator);
    trackOutput.setUpstreamFormatChangeListener(this);
    trackOutput.sourceId(upstreamChunkUid);
    sampleQueues.put(id, trackOutput);
    return trackOutput;
}
Also used : DefaultTrackOutput(com.google.android.exoplayer2.extractor.DefaultTrackOutput)

Example 12 with TrackOutput

use of com.google.android.exoplayer2.extractor.TrackOutput in project ExoPlayer by google.

the class WebvttExtractor method processSample.

private void processSample() throws ParserException {
    ParsableByteArray webvttData = new ParsableByteArray(sampleData);
    // Validate the first line of the header.
    try {
        WebvttParserUtil.validateWebvttHeaderLine(webvttData);
    } catch (SubtitleDecoderException e) {
        throw new ParserException(e);
    }
    // Defaults to use if the header doesn't contain an X-TIMESTAMP-MAP header.
    long vttTimestampUs = 0;
    long tsTimestampUs = 0;
    // Parse the remainder of the header looking for X-TIMESTAMP-MAP.
    String line;
    while (!TextUtils.isEmpty(line = webvttData.readLine())) {
        if (line.startsWith("X-TIMESTAMP-MAP")) {
            Matcher localTimestampMatcher = LOCAL_TIMESTAMP.matcher(line);
            if (!localTimestampMatcher.find()) {
                throw new ParserException("X-TIMESTAMP-MAP doesn't contain local timestamp: " + line);
            }
            Matcher mediaTimestampMatcher = MEDIA_TIMESTAMP.matcher(line);
            if (!mediaTimestampMatcher.find()) {
                throw new ParserException("X-TIMESTAMP-MAP doesn't contain media timestamp: " + line);
            }
            vttTimestampUs = WebvttParserUtil.parseTimestampUs(localTimestampMatcher.group(1));
            tsTimestampUs = TimestampAdjuster.ptsToUs(Long.parseLong(mediaTimestampMatcher.group(1)));
        }
    }
    // Find the first cue header and parse the start time.
    Matcher cueHeaderMatcher = WebvttParserUtil.findNextCueHeader(webvttData);
    if (cueHeaderMatcher == null) {
        // No cues found. Don't output a sample, but still output a corresponding track.
        buildTrackOutput(0);
        return;
    }
    long firstCueTimeUs = WebvttParserUtil.parseTimestampUs(cueHeaderMatcher.group(1));
    long sampleTimeUs = timestampAdjuster.adjustSampleTimestamp(firstCueTimeUs + tsTimestampUs - vttTimestampUs);
    long subsampleOffsetUs = sampleTimeUs - firstCueTimeUs;
    // Output the track.
    TrackOutput trackOutput = buildTrackOutput(subsampleOffsetUs);
    // Output the sample.
    sampleDataWrapper.reset(sampleData, sampleSize);
    trackOutput.sampleData(sampleDataWrapper, sampleSize);
    trackOutput.sampleMetadata(sampleTimeUs, C.BUFFER_FLAG_KEY_FRAME, sampleSize, 0, null);
}
Also used : ParsableByteArray(com.google.android.exoplayer2.util.ParsableByteArray) ParserException(com.google.android.exoplayer2.ParserException) Matcher(java.util.regex.Matcher) TrackOutput(com.google.android.exoplayer2.extractor.TrackOutput) SubtitleDecoderException(com.google.android.exoplayer2.text.SubtitleDecoderException)

Example 13 with TrackOutput

use of com.google.android.exoplayer2.extractor.TrackOutput in project ExoPlayer by google.

the class ExtractorMediaPeriod method track.

// ExtractorOutput implementation. Called by the loading thread.
@Override
public TrackOutput track(int id, int type) {
    DefaultTrackOutput trackOutput = sampleQueues.get(id);
    if (trackOutput == null) {
        trackOutput = new DefaultTrackOutput(allocator);
        trackOutput.setUpstreamFormatChangeListener(this);
        sampleQueues.put(id, trackOutput);
    }
    return trackOutput;
}
Also used : DefaultTrackOutput(com.google.android.exoplayer2.extractor.DefaultTrackOutput)

Aggregations

TrackOutput (com.google.android.exoplayer2.extractor.TrackOutput)11 ParserException (com.google.android.exoplayer2.ParserException)3 DefaultTrackOutput (com.google.android.exoplayer2.extractor.DefaultTrackOutput)2 ParsableByteArray (com.google.android.exoplayer2.util.ParsableByteArray)2 Format (com.google.android.exoplayer2.Format)1 DefaultExtractorInput (com.google.android.exoplayer2.extractor.DefaultExtractorInput)1 ExtractorInput (com.google.android.exoplayer2.extractor.ExtractorInput)1 PositionHolder (com.google.android.exoplayer2.extractor.PositionHolder)1 FakeExtractorInput (com.google.android.exoplayer2.testutil.FakeExtractorInput)1 FakeExtractorOutput (com.google.android.exoplayer2.testutil.FakeExtractorOutput)1 FakeTrackOutput (com.google.android.exoplayer2.testutil.FakeTrackOutput)1 SubtitleDecoderException (com.google.android.exoplayer2.text.SubtitleDecoderException)1 DataSpec (com.google.android.exoplayer2.upstream.DataSpec)1 TimestampAdjuster (com.google.android.exoplayer2.util.TimestampAdjuster)1 Matcher (java.util.regex.Matcher)1