diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ads/ServerSideAdInsertionMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ads/ServerSideAdInsertionMediaSource.java index cc9118c71f..436b57dce0 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ads/ServerSideAdInsertionMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ads/ServerSideAdInsertionMediaSource.java @@ -261,10 +261,12 @@ public final class ServerSideAdInsertionMediaSource extends BaseMediaSource public MediaPeriod createPeriod(MediaPeriodId id, Allocator allocator, long startPositionUs) { @Nullable SharedMediaPeriod sharedPeriod = null; Pair sharedMediaPeriodKey = new Pair<>(id.windowSequenceNumber, id.periodUid); + boolean reusedSharedPeriod = false; if (lastUsedMediaPeriod != null) { if (lastUsedMediaPeriod.periodUid.equals(id.periodUid)) { sharedPeriod = lastUsedMediaPeriod; mediaPeriods.put(sharedMediaPeriodKey, sharedPeriod); + reusedSharedPeriod = true; } else { lastUsedMediaPeriod.release(mediaSource); } @@ -295,6 +297,9 @@ public final class ServerSideAdInsertionMediaSource extends BaseMediaSource new MediaPeriodImpl( sharedPeriod, id, createEventDispatcher(id), createDrmEventDispatcher(id)); sharedPeriod.add(mediaPeriod); + if (reusedSharedPeriod && sharedPeriod.trackSelections.length > 0) { + mediaPeriod.seekToUs(startPositionUs); + } return mediaPeriod; }