Set format.sampleMimeType to TEXT_EXOPLAYER_CUES in SubtitleExtractor.

Samples are serialized using our custom CueEncoder. Information in
which format samples are encoded is needed by Renderer to decide which
decoder to use. Extractor receives Format object in the constructor and
prepares new Format object with sampleMimeType moved to codecs field
and new sampleMimeType set to "custom serialized exoplayer Cue".

PiperOrigin-RevId: 391739866
This commit is contained in:
apodob 2021-08-19 14:00:09 +01:00 committed by bachinger
parent afc549fba4
commit cbd6527926
3 changed files with 15 additions and 2 deletions

View file

@ -96,6 +96,8 @@ public final class MimeTypes {
public static final String TEXT_VTT = BASE_TYPE_TEXT + "/vtt";
public static final String TEXT_SSA = BASE_TYPE_TEXT + "/x-ssa";
public static final String TEXT_EXOPLAYER_CUES = BASE_TYPE_TEXT + "/x-exoplayer-cues";
// application/ MIME types
public static final String APPLICATION_MP4 = BASE_TYPE_APPLICATION + "/mp4";

View file

@ -34,6 +34,7 @@ import com.google.android.exoplayer2.text.SubtitleDecoder;
import com.google.android.exoplayer2.text.SubtitleDecoderException;
import com.google.android.exoplayer2.text.SubtitleInputBuffer;
import com.google.android.exoplayer2.text.SubtitleOutputBuffer;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.ParsableByteArray;
import com.google.common.primitives.Ints;
import java.io.IOException;
@ -94,7 +95,12 @@ public class SubtitleExtractor implements Extractor {
this.subtitleDecoder = subtitleDecoder;
cueEncoder = new CueEncoder();
subtitleData = new ParsableByteArray();
this.format = format;
this.format =
format
.buildUpon()
.setSampleMimeType(MimeTypes.TEXT_EXOPLAYER_CUES)
.setCodecs(format.sampleMimeType)
.build();
state = STATE_CREATED;
}

View file

@ -27,6 +27,7 @@ import com.google.android.exoplayer2.testutil.FakeTrackOutput;
import com.google.android.exoplayer2.text.Cue;
import com.google.android.exoplayer2.text.CueDecoder;
import com.google.android.exoplayer2.text.webvtt.WebvttDecoder;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.Util;
import java.util.List;
import org.junit.Test;
@ -56,12 +57,16 @@ public class SubtitleExtractorTest {
.setSimulatePartialReads(true)
.build();
SubtitleExtractor extractor =
new SubtitleExtractor(new WebvttDecoder(), new Format.Builder().build());
new SubtitleExtractor(
new WebvttDecoder(),
new Format.Builder().setSampleMimeType(MimeTypes.TEXT_VTT).build());
extractor.init(output);
while (extractor.read(input, null) != Extractor.RESULT_END_OF_INPUT) {}
FakeTrackOutput trackOutput = output.trackOutputs.get(0);
assertThat(trackOutput.lastFormat.sampleMimeType).isEqualTo(MimeTypes.TEXT_EXOPLAYER_CUES);
assertThat(trackOutput.lastFormat.codecs).isEqualTo(MimeTypes.TEXT_VTT);
assertThat(trackOutput.getSampleCount()).isEqualTo(6);
// Check sample timestamps.
assertThat(trackOutput.getSampleTimeUs(0)).isEqualTo(0L);