diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaPeriod.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaPeriod.java index 98402b9b45..8b57cb7aa6 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaPeriod.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaPeriod.java @@ -635,8 +635,10 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper /* isPrimaryTrackInVariant= */ false))); } List ccFormats = masterPlaylist.muxedCaptionFormats; - for (int i = 0; i < ccFormats.size(); i++) { - muxedTrackGroups.add(new TrackGroup(ccFormats.get(i))); + if (ccFormats != null) { + for (int i = 0; i < ccFormats.size(); i++) { + muxedTrackGroups.add(new TrackGroup(ccFormats.get(i))); + } } } else if (variantsContainAudioCodecs) { // Variants only contain audio. diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java index 1ac2acad94..1660324a34 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java @@ -177,7 +177,8 @@ public final class HlsMasterPlaylist extends HlsPlaylist { @Nullable public final Format muxedAudioFormat; /** * The format of the closed captions declared by the playlist. May be empty if the playlist - * doesn't declare any caption information or explicitly declares no captions are available. + * explicitly declares no captions are available, or null if the playlist does not declare any + * captions information. */ public final List muxedCaptionFormats; /** Contains variable definitions, as defined by the #EXT-X-DEFINE tag. */ @@ -222,7 +223,8 @@ public final class HlsMasterPlaylist extends HlsPlaylist { this.subtitles = Collections.unmodifiableList(subtitles); this.closedCaptions = Collections.unmodifiableList(closedCaptions); this.muxedAudioFormat = muxedAudioFormat; - this.muxedCaptionFormats = Collections.unmodifiableList(muxedCaptionFormats); + this.muxedCaptionFormats = muxedCaptionFormats != null + ? Collections.unmodifiableList(muxedCaptionFormats) : null; this.variableDefinitions = Collections.unmodifiableMap(variableDefinitions); this.sessionKeyDrmInitData = Collections.unmodifiableList(sessionKeyDrmInitData); } @@ -264,7 +266,7 @@ public final class HlsMasterPlaylist extends HlsPlaylist { /* subtitles= */ Collections.emptyList(), /* closedCaptions= */ Collections.emptyList(), /* muxedAudioFormat= */ null, - /* muxedCaptionFormats= */ Collections.emptyList(), + /* muxedCaptionFormats= */ null, /* hasIndependentSegments= */ false, /* variableDefinitions= */ Collections.emptyMap(), /* sessionKeyDrmInitData= */ Collections.emptyList()); 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 e6b57c64dd..21c29c6d87 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 @@ -267,7 +267,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser sessionKeyDrmInitData = new ArrayList<>(); ArrayList tags = new ArrayList<>(); Format muxedAudioFormat = null; - List muxedCaptionFormats = new ArrayList<>(); + List muxedCaptionFormats = null; boolean noClosedCaptions = false; boolean hasIndependentSegmentsTag = false; @@ -494,6 +494,9 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser(); + } muxedCaptionFormats.add( Format.createTextContainerFormat( /* id= */ formatId, @@ -515,7 +518,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser variants = masterPlaylist.variants; assertThat(variants).hasSize(5); - assertThat(masterPlaylist.muxedCaptionFormats).isEmpty(); + assertThat(masterPlaylist.muxedCaptionFormats).isNull(); assertThat(variants.get(0).format.bitrate).isEqualTo(1280000); assertThat(variants.get(0).format.codecs).isEqualTo("mp4a.40.2,avc1.66.30"); diff --git a/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylistParserTest.java b/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylistParserTest.java index ba25d6954a..3fd67b294a 100644 --- a/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylistParserTest.java +++ b/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylistParserTest.java @@ -456,7 +456,7 @@ public class HlsMediaPlaylistParserTest { /* subtitles= */ Collections.emptyList(), /* closedCaptions= */ Collections.emptyList(), /* muxedAudioFormat= */ null, - /* muxedCaptionFormats= */ Collections.emptyList(), + /* muxedCaptionFormats= */ null, /* hasIndependentSegments= */ true, /* variableDefinitions= */ Collections.emptyMap(), /* sessionKeyDrmInitData= */ Collections.emptyList());