diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java index 77637f1ef0..c1c6a62920 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java @@ -733,11 +733,13 @@ import java.util.concurrent.atomic.AtomicBoolean; private void setPauseAtEndOfWindowInternal(boolean pauseAtEndOfWindow) throws ExoPlaybackException { this.pauseAtEndOfWindow = pauseAtEndOfWindow; - if (queue.getReadingPeriod() != queue.getPlayingPeriod()) { - seekToCurrentPosition(/* sendDiscontinuity= */ true); - } resetPendingPauseAtEndOfPeriod(); - handleLoadingMediaPeriodChanged(/* loadingTrackSelectionChanged= */ false); + if (pendingPauseAtEndOfPeriod && queue.getReadingPeriod() != queue.getPlayingPeriod()) { + // When pausing is required, we need to set the streams of the playing period final. If we + // already started reading the next period, we need to flush the renderers. + seekToCurrentPosition(/* sendDiscontinuity= */ true); + handleLoadingMediaPeriodChanged(/* loadingTrackSelectionChanged= */ false); + } } private void setOffloadSchedulingEnabledInternal(boolean offloadSchedulingEnabled) {