From be69d5b747ca1f12129ac061cbb259ec45470ef8 Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Mon, 7 Jan 2019 14:34:31 +0000 Subject: [PATCH] Expand check for muxed audio media tags to include uris that match variants Issue:#5313 PiperOrigin-RevId: 228155222 --- .../hls/playlist/HlsPlaylistParser.java | 16 +++++++++++++++- .../playlist/HlsMasterPlaylistParserTest.java | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java index 65f4796187..242711431c 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java @@ -360,7 +360,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser variants, String mediaTagUri) { + if (mediaTagUri == null) { + return true; + } + // The URI attribute is defined, but it may match the uri of a variant. + for (int i = 0; i < variants.size(); i++) { + if (mediaTagUri.equals(variants.get(i).url)) { + return true; + } + } + return false; + } + private static class LineIterator { private final BufferedReader reader; diff --git a/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylistParserTest.java b/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylistParserTest.java index d03049efb3..9701171ce9 100644 --- a/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylistParserTest.java +++ b/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylistParserTest.java @@ -134,6 +134,17 @@ public class HlsMasterPlaylistParserTest { + "#EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS=\"{$codecs}\"\n" + "http://example.com/{$tricky}\n"; + private static final String PLAYLIST_WITH_MULTIPLE_MUXED_MEDIA_TAGS = + "#EXTM3U\n" + + "#EXT-X-VERSION:3\n" + + "#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=\"a\",NAME=\"audio_0\",DEFAULT=YES,URI=\"0/0.m3u8\"\n" + + "#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=\"b\",NAME=\"audio_0\",DEFAULT=YES,URI=\"1/1.m3u8\"\n" + + "#EXT-X-STREAM-INF:BANDWIDTH=140800,CODECS=\"mp4a.40.2\",AUDIO=\"a\"\n" + + "0/0.m3u8\n" + + "\n" + + "#EXT-X-STREAM-INF:BANDWIDTH=281600,CODECS=\"mp4a.40.2\",AUDIO=\"b\"\n" + + "1/1.m3u8\n"; + @Test public void testParseMasterPlaylist() throws IOException { HlsMasterPlaylist masterPlaylist = parseMasterPlaylist(PLAYLIST_URI, PLAYLIST_SIMPLE); @@ -271,6 +282,14 @@ public class HlsMasterPlaylistParserTest { assertThat(variant.url).isEqualTo("http://example.com/This/{$nested}/reference/shouldnt/work"); } + @Test + public void testMultipleMuxedMediaTags() throws IOException { + HlsMasterPlaylist playlistWithMultipleMuxedMediaTags = + parseMasterPlaylist(PLAYLIST_URI, PLAYLIST_WITH_MULTIPLE_MUXED_MEDIA_TAGS); + assertThat(playlistWithMultipleMuxedMediaTags.variants).hasSize(2); + assertThat(playlistWithMultipleMuxedMediaTags.audios).isEmpty(); + } + private static HlsMasterPlaylist parseMasterPlaylist(String uri, String playlistString) throws IOException { Uri playlistUri = Uri.parse(uri);