diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 7dd85a2979..95c8f33560 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -19,6 +19,11 @@ is set incorrectly ([#4083](https://github.com/google/ExoPlayer/issues/4083)). Such content is malformed and should be re-encoded. +* HLS: + * Fix issue where a new initialization segment, as specified by an + `EXT-X-MAP` tag in a media playlist, would not be loaded when + encountered during playback + ([#9004](https://github.com/google/ExoPlayer/issues/9004)). * UI: * Add `PendingIntent.FLAG_IMMUTABLE` flag when creating a broadcast intent in `PlayerNotificationManager`. This is required to avoid an error on diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaChunk.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaChunk.java index 49a93ed806..e6295cf82b 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaChunk.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaChunk.java @@ -139,12 +139,19 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ParsableByteArray scratchId3Data; if (previousChunk != null) { + boolean isSameInitData = + initDataSpec == previousChunk.initDataSpec + || (initDataSpec != null + && previousChunk.initDataSpec != null + && initDataSpec.uri.equals(previousChunk.initDataSpec.uri) + && initDataSpec.position == previousChunk.initDataSpec.position); boolean isFollowingChunk = playlistUrl.equals(previousChunk.playlistUrl) && previousChunk.loadCompleted; id3Decoder = previousChunk.id3Decoder; scratchId3Data = previousChunk.scratchId3Data; previousExtractor = - isFollowingChunk + isSameInitData + && isFollowingChunk && !previousChunk.extractorInvalidated && previousChunk.discontinuitySequenceNumber == discontinuitySequenceNumber ? previousChunk.extractor