diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java index e8d20c1c61..9ff704e75a 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java @@ -133,7 +133,6 @@ public final class ClippingMediaSource extends CompositeMediaSource { @Override public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) { super.prepareSource(player, isTopLevelSource, listener); - Assertions.checkState(sourceListener == null, MEDIA_SOURCE_REUSED_ERROR_MESSAGE); sourceListener = listener; prepareChildSource(/* id= */ null, mediaSource); } @@ -161,6 +160,13 @@ public final class ClippingMediaSource extends CompositeMediaSource { mediaSource.releasePeriod(((ClippingMediaPeriod) mediaPeriod).mediaPeriod); } + @Override + public void releaseSource() { + super.releaseSource(); + clippingError = null; + sourceListener = null; + } + @Override protected void onChildSourceInfoRefreshed( Void id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java index 4cf0156aad..48de7de364 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java @@ -88,7 +88,6 @@ public final class ConcatenatingMediaSource extends CompositeMediaSource { @Override public void prepareSource(ExoPlayer player, boolean isTopLevelSource, final Listener listener) { super.prepareSource(player, isTopLevelSource, listener); - Assertions.checkState(this.listener == null, MEDIA_SOURCE_REUSED_ERROR_MESSAGE); this.listener = listener; prepareChildSource(/* id= */ null, childSource); } @@ -81,6 +80,13 @@ public final class LoopingMediaSource extends CompositeMediaSource { childSource.releasePeriod(mediaPeriod); } + @Override + public void releaseSource() { + super.releaseSource(); + listener = null; + childPeriodCount = 0; + } + @Override protected void onChildSourceInfoRefreshed( Void id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java index 64fe35eb22..a738cb1893 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java @@ -20,12 +20,12 @@ import android.support.annotation.Nullable; import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.upstream.Allocator; -import com.google.android.exoplayer2.util.Assertions; import java.io.IOException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; /** * Merges multiple {@link MediaSource}s. @@ -100,7 +100,6 @@ public final class MergingMediaSource extends CompositeMediaSource { @Override public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) { super.prepareSource(player, isTopLevelSource, listener); - Assertions.checkState(this.listener == null, MEDIA_SOURCE_REUSED_ERROR_MESSAGE); this.listener = listener; for (int i = 0; i < mediaSources.length; i++) { prepareChildSource(i, mediaSources[i]); @@ -132,6 +131,18 @@ public final class MergingMediaSource extends CompositeMediaSource { } } + @Override + public void releaseSource() { + super.releaseSource(); + listener = null; + primaryTimeline = null; + primaryManifest = null; + periodCount = PERIOD_COUNT_UNSET; + mergeError = null; + pendingTimelineSources.clear(); + Collections.addAll(pendingTimelineSources, mediaSources); + } + @Override protected void onChildSourceInfoRefreshed( Integer id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) {