From cbd6527926eac8028263c3858a511a61141d141b Mon Sep 17 00:00:00 2001 From: apodob Date: Thu, 19 Aug 2021 14:00:09 +0100 Subject: [PATCH] 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 --- .../com/google/android/exoplayer2/util/MimeTypes.java | 2 ++ .../exoplayer2/extractor/subtitle/SubtitleExtractor.java | 8 +++++++- .../extractor/subtitle/SubtitleExtractorTest.java | 7 ++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/library/common/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java b/library/common/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java index 044dbf13a9..7922e93447 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java @@ -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"; diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/subtitle/SubtitleExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/subtitle/SubtitleExtractor.java index d7ee336f4f..eee12e4810 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/subtitle/SubtitleExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/subtitle/SubtitleExtractor.java @@ -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; } diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/subtitle/SubtitleExtractorTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/subtitle/SubtitleExtractorTest.java index 9d516d2e2a..9366d3db43 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/subtitle/SubtitleExtractorTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/subtitle/SubtitleExtractorTest.java @@ -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);