mirror of
https://github.com/samsonjs/media.git
synced 2026-03-26 09:35:47 +00:00
Correctly transition to ended state
This fixes transitioning into the ended state if we see endOfStream from the chunk source whilst in the pending reset state. Prior to this fix we'd still be pending a reset, and so readData would never allow EOS to be read by the consuming renderer. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=157101755
This commit is contained in:
parent
eb3a31c881
commit
c4f7a2d62d
3 changed files with 30 additions and 24 deletions
|
|
@ -336,6 +336,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
|
|||
nextChunkHolder.clear();
|
||||
|
||||
if (endOfStream) {
|
||||
pendingResetPositionUs = C.TIME_UNSET;
|
||||
loadingFinished = true;
|
||||
return true;
|
||||
}
|
||||
|
|
@ -389,18 +390,20 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
|
|||
}
|
||||
|
||||
private void discardDownstreamMediaChunks(int primaryStreamReadIndex) {
|
||||
while (mediaChunks.size() > 1
|
||||
&& mediaChunks.get(1).getFirstSampleIndex(0) <= primaryStreamReadIndex) {
|
||||
mediaChunks.removeFirst();
|
||||
if (!mediaChunks.isEmpty()) {
|
||||
while (mediaChunks.size() > 1
|
||||
&& mediaChunks.get(1).getFirstSampleIndex(0) <= primaryStreamReadIndex) {
|
||||
mediaChunks.removeFirst();
|
||||
}
|
||||
BaseMediaChunk currentChunk = mediaChunks.getFirst();
|
||||
Format trackFormat = currentChunk.trackFormat;
|
||||
if (!trackFormat.equals(primaryDownstreamTrackFormat)) {
|
||||
eventDispatcher.downstreamFormatChanged(primaryTrackType, trackFormat,
|
||||
currentChunk.trackSelectionReason, currentChunk.trackSelectionData,
|
||||
currentChunk.startTimeUs);
|
||||
}
|
||||
primaryDownstreamTrackFormat = trackFormat;
|
||||
}
|
||||
BaseMediaChunk currentChunk = mediaChunks.getFirst();
|
||||
Format trackFormat = currentChunk.trackFormat;
|
||||
if (!trackFormat.equals(primaryDownstreamTrackFormat)) {
|
||||
eventDispatcher.downstreamFormatChanged(primaryTrackType, trackFormat,
|
||||
currentChunk.trackSelectionReason, currentChunk.trackSelectionData,
|
||||
currentChunk.startTimeUs);
|
||||
}
|
||||
primaryDownstreamTrackFormat = trackFormat;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -625,9 +625,9 @@ public final class DashMediaSource implements MediaSource {
|
|||
private final long windowDefaultStartPositionUs;
|
||||
private final DashManifest manifest;
|
||||
|
||||
public DashTimeline(long presentationStartTimeMs, long windowStartTimeMs,
|
||||
int firstPeriodId, long offsetInFirstPeriodUs, long windowDurationUs,
|
||||
long windowDefaultStartPositionUs, DashManifest manifest) {
|
||||
public DashTimeline(long presentationStartTimeMs, long windowStartTimeMs, int firstPeriodId,
|
||||
long offsetInFirstPeriodUs, long windowDurationUs, long windowDefaultStartPositionUs,
|
||||
DashManifest manifest) {
|
||||
this.presentationStartTimeMs = presentationStartTimeMs;
|
||||
this.windowStartTimeMs = windowStartTimeMs;
|
||||
this.firstPeriodId = firstPeriodId;
|
||||
|
|
|
|||
|
|
@ -296,17 +296,19 @@ import java.util.LinkedList;
|
|||
return C.RESULT_NOTHING_READ;
|
||||
}
|
||||
|
||||
while (mediaChunks.size() > 1 && finishedReadingChunk(mediaChunks.getFirst())) {
|
||||
mediaChunks.removeFirst();
|
||||
if (!mediaChunks.isEmpty()) {
|
||||
while (mediaChunks.size() > 1 && finishedReadingChunk(mediaChunks.getFirst())) {
|
||||
mediaChunks.removeFirst();
|
||||
}
|
||||
HlsMediaChunk currentChunk = mediaChunks.getFirst();
|
||||
Format trackFormat = currentChunk.trackFormat;
|
||||
if (!trackFormat.equals(downstreamTrackFormat)) {
|
||||
eventDispatcher.downstreamFormatChanged(trackType, trackFormat,
|
||||
currentChunk.trackSelectionReason, currentChunk.trackSelectionData,
|
||||
currentChunk.startTimeUs);
|
||||
}
|
||||
downstreamTrackFormat = trackFormat;
|
||||
}
|
||||
HlsMediaChunk currentChunk = mediaChunks.getFirst();
|
||||
Format trackFormat = currentChunk.trackFormat;
|
||||
if (!trackFormat.equals(downstreamTrackFormat)) {
|
||||
eventDispatcher.downstreamFormatChanged(trackType, trackFormat,
|
||||
currentChunk.trackSelectionReason, currentChunk.trackSelectionData,
|
||||
currentChunk.startTimeUs);
|
||||
}
|
||||
downstreamTrackFormat = trackFormat;
|
||||
|
||||
return sampleQueues.valueAt(group).readData(formatHolder, buffer, requireFormat,
|
||||
loadingFinished, lastSeekPositionUs);
|
||||
|
|
@ -348,6 +350,7 @@ import java.util.LinkedList;
|
|||
nextChunkHolder.clear();
|
||||
|
||||
if (endOfStream) {
|
||||
pendingResetPositionUs = C.TIME_UNSET;
|
||||
loadingFinished = true;
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue