From 506e9e951f0f1df89aad6ce5a6c4e12ae53ab5b2 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 19fcc321cb..ec37ff064c 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 @@ -1535,7 +1535,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; }