From 14c5114049569177d6ff0f1377e9b80d9bfd1844 Mon Sep 17 00:00:00 2001 From: cdrolle Date: Fri, 18 Mar 2016 10:27:52 -0700 Subject: [PATCH] Fixed issue in which unknown sample mime types would cause MediaPresentationDescription to throw an NPE. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=117560114 --- .../dash/sample_mpd_2_unknown_mime_type | 118 ++++++++++++++++++ ...ediaPresentationDescriptionParserTest.java | 11 ++ .../MediaPresentationDescriptionParser.java | 22 ++-- 3 files changed, 142 insertions(+), 9 deletions(-) create mode 100644 library/src/androidTest/assets/dash/sample_mpd_2_unknown_mime_type diff --git a/library/src/androidTest/assets/dash/sample_mpd_2_unknown_mime_type b/library/src/androidTest/assets/dash/sample_mpd_2_unknown_mime_type new file mode 100644 index 0000000000..c6f00965e3 --- /dev/null +++ b/library/src/androidTest/assets/dash/sample_mpd_2_unknown_mime_type @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + +http://www.test.com/141 + + + + + + + + + + + + + +http://www.test.com/135 + + + + + + + + + + + + + +http://www.test.com/vtt + + + + + + + + + + + + + http://www.test.com/608 + + + + + + + + + + + diff --git a/library/src/androidTest/java/com/google/android/exoplayer/dash/mpd/MediaPresentationDescriptionParserTest.java b/library/src/androidTest/java/com/google/android/exoplayer/dash/mpd/MediaPresentationDescriptionParserTest.java index 7aa65564a0..d24a51208c 100644 --- a/library/src/androidTest/java/com/google/android/exoplayer/dash/mpd/MediaPresentationDescriptionParserTest.java +++ b/library/src/androidTest/java/com/google/android/exoplayer/dash/mpd/MediaPresentationDescriptionParserTest.java @@ -26,6 +26,8 @@ import java.io.InputStream; public class MediaPresentationDescriptionParserTest extends InstrumentationTestCase { private static final String SAMPLE_MPD_1 = "dash/sample_mpd_1"; + private static final String SAMPLE_MPD_2_UNKNOWN_MIME_TYPE = + "dash/sample_mpd_2_unknown_mime_type"; public void testParseMediaPresentationDescription() throws IOException { MediaPresentationDescriptionParser parser = new MediaPresentationDescriptionParser(); @@ -35,4 +37,13 @@ public class MediaPresentationDescriptionParserTest extends InstrumentationTestC parser.parse("https://example.com/test.mpd", inputStream); } + public void testParseMediaPresentationDescriptionWithUnknownMimeType() throws IOException { + MediaPresentationDescriptionParser parser = new MediaPresentationDescriptionParser(); + InputStream inputStream = getInstrumentation().getContext().getResources().getAssets() + .open(SAMPLE_MPD_2_UNKNOWN_MIME_TYPE); + // Simple test to ensure that the sample manifest with an unknown mime type parses without + // throwing any exceptions. + parser.parse("https://example.com/test.mpd", inputStream); + } + } diff --git a/library/src/main/java/com/google/android/exoplayer/dash/mpd/MediaPresentationDescriptionParser.java b/library/src/main/java/com/google/android/exoplayer/dash/mpd/MediaPresentationDescriptionParser.java index 6e5f5fab34..7a398311de 100644 --- a/library/src/main/java/com/google/android/exoplayer/dash/mpd/MediaPresentationDescriptionParser.java +++ b/library/src/main/java/com/google/android/exoplayer/dash/mpd/MediaPresentationDescriptionParser.java @@ -406,15 +406,19 @@ public class MediaPresentationDescriptionParser extends DefaultHandler float frameRate, int audioChannels, int audioSamplingRate, int bitrate, String language, String codecs) { String sampleMimeType = getSampleMimeType(containerMimeType, codecs); - if (MimeTypes.isVideo(sampleMimeType)) { - return Format.createVideoContainerFormat(id, containerMimeType, sampleMimeType, bitrate, - width, height, frameRate, null); - } else if (MimeTypes.isAudio(sampleMimeType)) { - return Format.createAudioContainerFormat(id, containerMimeType, sampleMimeType, bitrate, - audioChannels, audioSamplingRate, null, language); - } else if (mimeTypeIsRawText(sampleMimeType)) { - return Format.createTextContainerFormat(id, containerMimeType, sampleMimeType, bitrate, - language); + if (sampleMimeType != null) { + if (MimeTypes.isVideo(sampleMimeType)) { + return Format.createVideoContainerFormat(id, containerMimeType, sampleMimeType, bitrate, + width, height, frameRate, null); + } else if (MimeTypes.isAudio(sampleMimeType)) { + return Format.createAudioContainerFormat(id, containerMimeType, sampleMimeType, bitrate, + audioChannels, audioSamplingRate, null, language); + } else if (mimeTypeIsRawText(sampleMimeType)) { + return Format.createTextContainerFormat(id, containerMimeType, sampleMimeType, bitrate, + language); + } else { + return Format.createContainerFormat(id, containerMimeType, sampleMimeType, bitrate); + } } else { return Format.createContainerFormat(id, containerMimeType, sampleMimeType, bitrate); }