Commit 3a7f73f1 by bachinger Committed by Ian Baker

Seek to start position when reusing the last used shared period

The last used shared media period is reused after all media periods have been
released. In case the sample streams are already filled up, they need to be
reset or they download samples from the current position up to the seek
position. This causes long buffering states or load stuck exceptions.

A seek when reusing the shared period takes care for reseting the period or
internally seeks to the current position in the already available samples.

#minor-release

PiperOrigin-RevId: 428484187
parent 7907f4e0
...@@ -261,10 +261,12 @@ public final class ServerSideAdInsertionMediaSource extends BaseMediaSource ...@@ -261,10 +261,12 @@ public final class ServerSideAdInsertionMediaSource extends BaseMediaSource
public MediaPeriod createPeriod(MediaPeriodId id, Allocator allocator, long startPositionUs) { public MediaPeriod createPeriod(MediaPeriodId id, Allocator allocator, long startPositionUs) {
@Nullable SharedMediaPeriod sharedPeriod = null; @Nullable SharedMediaPeriod sharedPeriod = null;
Pair<Long, Object> sharedMediaPeriodKey = new Pair<>(id.windowSequenceNumber, id.periodUid); Pair<Long, Object> sharedMediaPeriodKey = new Pair<>(id.windowSequenceNumber, id.periodUid);
boolean reusedSharedPeriod = false;
if (lastUsedMediaPeriod != null) { if (lastUsedMediaPeriod != null) {
if (lastUsedMediaPeriod.periodUid.equals(id.periodUid)) { if (lastUsedMediaPeriod.periodUid.equals(id.periodUid)) {
sharedPeriod = lastUsedMediaPeriod; sharedPeriod = lastUsedMediaPeriod;
mediaPeriods.put(sharedMediaPeriodKey, sharedPeriod); mediaPeriods.put(sharedMediaPeriodKey, sharedPeriod);
reusedSharedPeriod = true;
} else { } else {
lastUsedMediaPeriod.release(mediaSource); lastUsedMediaPeriod.release(mediaSource);
} }
...@@ -295,6 +297,9 @@ public final class ServerSideAdInsertionMediaSource extends BaseMediaSource ...@@ -295,6 +297,9 @@ public final class ServerSideAdInsertionMediaSource extends BaseMediaSource
new MediaPeriodImpl( new MediaPeriodImpl(
sharedPeriod, id, createEventDispatcher(id), createDrmEventDispatcher(id)); sharedPeriod, id, createEventDispatcher(id), createDrmEventDispatcher(id));
sharedPeriod.add(mediaPeriod); sharedPeriod.add(mediaPeriod);
if (reusedSharedPeriod && sharedPeriod.trackSelections.length > 0) {
mediaPeriod.seekToUs(startPositionUs);
}
return mediaPeriod; return mediaPeriod;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment