diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 9c3f5b4793d..427d969451a 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -87,6 +87,9 @@ * Cronet Extension: * RTMP Extension: * DASH Extension: + * Fix a bug where re-preparing a multi-period live Dash media source + produced a `IndexOutOfBoundsException` + ([#10838](https://github.com/google/ExoPlayer/issues/10838)). * HLS Extension: * Smooth Streaming Extension: * RTSP Extension: diff --git a/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashMediaSource.java b/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashMediaSource.java index aa476b7db92..fede790776e 100644 --- a/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashMediaSource.java +++ b/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashMediaSource.java @@ -525,7 +525,7 @@ public MediaPeriod createPeriod(MediaPeriodId id, Allocator allocator, long star DrmSessionEventListener.EventDispatcher drmEventDispatcher = createDrmEventDispatcher(id); DashMediaPeriod mediaPeriod = new DashMediaPeriod( - firstPeriodId + periodIndex, + /* id= */ firstPeriodId + periodIndex, manifest, baseUrlExclusionList, periodIndex, @@ -573,7 +573,6 @@ protected void releaseSourceInternal() { elapsedRealtimeOffsetMs = C.TIME_UNSET; staleManifestReloadAttempt = 0; expiredManifestPublishTimeUs = C.TIME_UNSET; - firstPeriodId = 0; periodsById.clear(); baseUrlExclusionList.reset(); drmSessionManager.release();