From 907d10705aee3cbb7dd1dd1a3275e88d04a40aa4 Mon Sep 17 00:00:00 2001 From: ibaker Date: Mon, 12 Oct 2020 16:32:46 +0100 Subject: [PATCH] Use MP4VTT MIME type in DashManifestParser (again) We stopped using using this MIME type in https://github.com/google/ExoPlayer/commit/74a9d8f680995f2096c59fde6cd1ef6e85bb4d55 This broke subtitle decoding in some cases (Issue: #7985), which I fixed in https://github.com/google/ExoPlayer/commit/7b8895d655c9b48e042f66045bc9c7ab27e93346. After some discussion we've decided SubtitleDecoderFactory shouldn't depend on Format.containerMimeType (since the samples have already been extracted by this point, so the container shouldn't matter). So this change fixes DashManifestParser to use MimeTypes.APPLICATION_MP4VTT (and reverts the no-longer-needed SubtitleDecoderFactory change). PiperOrigin-RevId: 336668450 --- .../exoplayer2/text/SubtitleDecoderFactory.java | 16 ++++++---------- .../source/dash/manifest/DashManifestParser.java | 3 ++- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/SubtitleDecoderFactory.java b/library/core/src/main/java/com/google/android/exoplayer2/text/SubtitleDecoderFactory.java index e59a7489bb..bd652c6586 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/SubtitleDecoderFactory.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/SubtitleDecoderFactory.java @@ -91,15 +91,11 @@ public interface SubtitleDecoderFactory { @Override public SubtitleDecoder createDecoder(Format format) { - @Nullable String sampleMimeType = format.sampleMimeType; - if (sampleMimeType != null) { - switch (sampleMimeType) { + @Nullable String mimeType = format.sampleMimeType; + if (mimeType != null) { + switch (mimeType) { case MimeTypes.TEXT_VTT: - if (MimeTypes.APPLICATION_MP4.equals(format.containerMimeType)) { - return new Mp4WebvttDecoder(); - } else { - return new WebvttDecoder(); - } + return new WebvttDecoder(); case MimeTypes.TEXT_SSA: return new SsaDecoder(format.initializationData); case MimeTypes.APPLICATION_MP4VTT: @@ -113,7 +109,7 @@ public interface SubtitleDecoderFactory { case MimeTypes.APPLICATION_CEA608: case MimeTypes.APPLICATION_MP4CEA608: return new Cea608Decoder( - sampleMimeType, + mimeType, format.accessibilityChannel, Cea608Decoder.MIN_DATA_CHANNEL_TIMEOUT_MS); case MimeTypes.APPLICATION_CEA708: @@ -127,7 +123,7 @@ public interface SubtitleDecoderFactory { } } throw new IllegalArgumentException( - "Attempted to create decoder for unsupported MIME type: " + sampleMimeType); + "Attempted to create decoder for unsupported MIME type: " + mimeType); } }; } diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java index 8015c139b4..83e6556fe1 100644 --- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java +++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java @@ -1363,7 +1363,8 @@ public class DashManifestParser extends DefaultHandler // All other text types are raw formats. return containerMimeType; } else if (MimeTypes.APPLICATION_MP4.equals(containerMimeType)) { - return MimeTypes.getMediaMimeType(codecs); + @Nullable String mimeType = MimeTypes.getMediaMimeType(codecs); + return MimeTypes.TEXT_VTT.equals(mimeType) ? MimeTypes.APPLICATION_MP4VTT : mimeType; } return null; }