Skip to content

Commit

Permalink
Inform ProgressiveMediaPeriod of known length earlier
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 456753343
(cherry picked from commit 1d2ad39)
  • Loading branch information
ojw28 authored and rohitjoins committed Jun 23, 2022
1 parent 59fbb45 commit 2f1260e
Showing 1 changed file with 9 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ interface Listener {
private boolean seenFirstTrackSelection;
private boolean notifyDiscontinuity;
private int enabledTrackCount;
private long length;
private boolean isLengthKnown;

private long lastSeekPositionUs;
private long pendingResetPositionUs;
Expand Down Expand Up @@ -201,7 +201,6 @@ public ProgressiveMediaPeriod(
sampleQueueTrackIds = new TrackId[0];
sampleQueues = new SampleQueue[0];
pendingResetPositionUs = C.TIME_UNSET;
length = C.LENGTH_UNSET;
durationUs = C.TIME_UNSET;
dataType = C.DATA_TYPE_MEDIA;
}
Expand Down Expand Up @@ -578,7 +577,6 @@ public void onLoadCompleted(
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ loadable.seekTimeUs,
durationUs);
copyLengthFromLoader(loadable);
loadingFinished = true;
Assertions.checkNotNull(callback).onContinueLoadingRequested(this);
}
Expand Down Expand Up @@ -607,7 +605,6 @@ public void onLoadCanceled(
/* mediaStartTimeUs= */ loadable.seekTimeUs,
durationUs);
if (!released) {
copyLengthFromLoader(loadable);
for (SampleQueue sampleQueue : sampleQueues) {
sampleQueue.reset();
}
Expand All @@ -624,7 +621,6 @@ public LoadErrorAction onLoadError(
long loadDurationMs,
IOException error,
int errorCount) {
copyLengthFromLoader(loadable);
StatsDataSource dataSource = loadable.dataSource;
LoadEventInfo loadEventInfo =
new LoadEventInfo(
Expand Down Expand Up @@ -710,6 +706,10 @@ public void onUpstreamFormatChanged(Format format) {

// Internal methods.

private void onLengthKnown() {
handler.post(() -> isLengthKnown = true);
}

private TrackOutput prepareTrackOutput(TrackId id) {
int trackCount = sampleQueues.length;
for (int i = 0; i < trackCount; i++) {
Expand All @@ -733,7 +733,7 @@ private TrackOutput prepareTrackOutput(TrackId id) {
private void setSeekMap(SeekMap seekMap) {
this.seekMap = icyHeaders == null ? seekMap : new Unseekable(/* durationUs= */ C.TIME_UNSET);
durationUs = seekMap.getDurationUs();
isLive = length == C.LENGTH_UNSET && seekMap.getDurationUs() == C.TIME_UNSET;
isLive = !isLengthKnown && seekMap.getDurationUs() == C.TIME_UNSET;
dataType = isLive ? C.DATA_TYPE_MEDIA_PROGRESSIVE_LIVE : C.DATA_TYPE_MEDIA;
listener.onSourceInfoRefreshed(durationUs, seekMap.isSeekable(), isLive);
if (!prepared) {
Expand Down Expand Up @@ -789,12 +789,6 @@ private void maybeFinishPrepare() {
Assertions.checkNotNull(callback).onPrepared(this);
}

private void copyLengthFromLoader(ExtractingLoadable loadable) {
if (length == C.LENGTH_UNSET) {
length = loadable.length;
}
}

private void startLoading() {
ExtractingLoadable loadable =
new ExtractingLoadable(
Expand Down Expand Up @@ -840,7 +834,7 @@ private void startLoading() {
* retry.
*/
private boolean configureRetry(ExtractingLoadable loadable, int currentExtractedSampleCount) {
if (length != C.LENGTH_UNSET || (seekMap != null && seekMap.getDurationUs() != C.TIME_UNSET)) {
if (isLengthKnown || (seekMap != null && seekMap.getDurationUs() != C.TIME_UNSET)) {
// We're playing an on-demand stream. Resume the current loadable, which will
// request data starting from the point it left off.
extractedSamplesCountAtStartOfLoad = currentExtractedSampleCount;
Expand Down Expand Up @@ -970,7 +964,6 @@ public int skipData(long positionUs) {
private boolean pendingExtractorSeek;
private long seekTimeUs;
private DataSpec dataSpec;
private long length;
@Nullable private TrackOutput icyTrackOutput;
private boolean seenIcyMetadata;

Expand All @@ -988,7 +981,6 @@ public ExtractingLoadable(
this.loadCondition = loadCondition;
this.positionHolder = new PositionHolder();
this.pendingExtractorSeek = true;
this.length = C.LENGTH_UNSET;
loadTaskId = LoadEventInfo.getNewId();
dataSpec = buildDataSpec(/* position= */ 0);
}
Expand All @@ -1007,9 +999,10 @@ public void load() throws IOException {
try {
long position = positionHolder.position;
dataSpec = buildDataSpec(position);
length = dataSource.open(dataSpec);
long length = dataSource.open(dataSpec);
if (length != C.LENGTH_UNSET) {
length += position;
onLengthKnown();
}
icyHeaders = IcyHeaders.parse(dataSource.getResponseHeaders());
DataSource extractorDataSource = dataSource;
Expand Down

0 comments on commit 2f1260e

Please sign in to comment.