diff --git a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java index 129037143b..cfd82968f3 100644 --- a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java +++ b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java @@ -906,7 +906,9 @@ import java.io.IOException; mediaSource.maybeThrowSourceInfoRefreshError(); } else { Window window = timeline.getPeriodWindow(newLoadingPeriodIndex); - long startPositionUs = loadingPeriod == null ? playbackInfo.positionUs : C.UNSET_TIME_US; + long startPositionUs = loadingPeriod == null ? playbackInfo.positionUs + : newLoadingPeriodIndex == window.startPeriodIndex ? C.UNSET_TIME_US + : 0; if (startPositionUs == C.UNSET_TIME_US) { // This is the first period of a new window or we don't have a start position, so seek to // the default position for the window. diff --git a/library/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java index 4cff6360e5..edf64051e0 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java @@ -184,10 +184,7 @@ public final class DashMediaSource implements MediaSource { @Override public void releasePeriod(MediaPeriod mediaPeriod) { - int id = ((DashMediaPeriod) mediaPeriod).id; - if (id >= firstPeriodId) { - periodsById.remove(id); - } + periodsById.remove(((DashMediaPeriod) mediaPeriod).id); } @Override @@ -348,7 +345,12 @@ public final class DashMediaSource implements MediaSource { private void processManifest() { // Update any periods. for (int i = 0; i < periodsById.size(); i++) { - periodsById.valueAt(i).updateManifest(manifest, periodsById.keyAt(i) - firstPeriodId); + int id = periodsById.keyAt(i); + if (id >= firstPeriodId) { + periodsById.valueAt(i).updateManifest(manifest, id - firstPeriodId); + } else { + // This period has been removed from the manifest so it doesn't need to be updated. + } } // Remove any pending simulated updates. handler.removeCallbacks(simulateManifestRefreshRunnable);