diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSource.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSource.java index a0821d571e..e5e29d4c97 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSource.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSource.java @@ -264,10 +264,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); } @@ -298,6 +300,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; }