mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
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
This commit is contained in:
parent
6048ca2faa
commit
28b8ae7076
@ -264,10 +264,12 @@ public final class ServerSideAdInsertionMediaSource extends BaseMediaSource
|
||||
public MediaPeriod createPeriod(MediaPeriodId id, Allocator allocator, long startPositionUs) {
|
||||
@Nullable SharedMediaPeriod sharedPeriod = null;
|
||||
Pair<Long, Object> 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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user