Add loadTaskId to Loader.Callback
PiperOrigin-RevId: 303447837
This commit is contained in:
parent
1c11febf3f
commit
ca799716b8
@ -20,10 +20,19 @@ import android.os.SystemClock;
|
|||||||
import com.google.android.exoplayer2.upstream.DataSpec;
|
import com.google.android.exoplayer2.upstream.DataSpec;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
/** {@link MediaSource} load event information. */
|
/** {@link MediaSource} load event information. */
|
||||||
public final class LoadEventInfo {
|
public final class LoadEventInfo {
|
||||||
|
|
||||||
|
/** Used for the generation of unique ids. */
|
||||||
|
private static final AtomicLong idSource = new AtomicLong();
|
||||||
|
|
||||||
|
/** Returns an non-negative identifier which is unique to the JVM instance. */
|
||||||
|
public static long getNewId() {
|
||||||
|
return idSource.getAndIncrement();
|
||||||
|
}
|
||||||
|
|
||||||
/** Defines the requested data. */
|
/** Defines the requested data. */
|
||||||
public final DataSpec dataSpec;
|
public final DataSpec dataSpec;
|
||||||
/**
|
/**
|
||||||
|
@ -543,8 +543,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
// Loader.Callback implementation.
|
// Loader.Callback implementation.
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(ExtractingLoadable loadable, long elapsedRealtimeMs,
|
public void onLoadCompleted(
|
||||||
long loadDurationMs) {
|
ExtractingLoadable loadable, long loadTaskId, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
if (durationUs == C.TIME_UNSET && seekMap != null) {
|
if (durationUs == C.TIME_UNSET && seekMap != null) {
|
||||||
boolean isSeekable = seekMap.isSeekable();
|
boolean isSeekable = seekMap.isSeekable();
|
||||||
long largestQueuedTimestampUs = getLargestQueuedTimestampUs();
|
long largestQueuedTimestampUs = getLargestQueuedTimestampUs();
|
||||||
@ -572,8 +572,12 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCanceled(ExtractingLoadable loadable, long elapsedRealtimeMs,
|
public void onLoadCanceled(
|
||||||
long loadDurationMs, boolean released) {
|
ExtractingLoadable loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
|
boolean released) {
|
||||||
eventDispatcher.loadCanceled(
|
eventDispatcher.loadCanceled(
|
||||||
loadable.dataSpec,
|
loadable.dataSpec,
|
||||||
loadable.dataSource.getLastOpenedUri(),
|
loadable.dataSource.getLastOpenedUri(),
|
||||||
@ -602,6 +606,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
@Override
|
@Override
|
||||||
public LoadErrorAction onLoadError(
|
public LoadErrorAction onLoadError(
|
||||||
ExtractingLoadable loadable,
|
ExtractingLoadable loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
IOException error,
|
IOException error,
|
||||||
|
@ -212,8 +212,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
// Loader.Callback implementation.
|
// Loader.Callback implementation.
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(SourceLoadable loadable, long elapsedRealtimeMs,
|
public void onLoadCompleted(
|
||||||
long loadDurationMs) {
|
SourceLoadable loadable, long loadTaskId, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
sampleSize = (int) loadable.dataSource.getBytesRead();
|
sampleSize = (int) loadable.dataSource.getBytesRead();
|
||||||
sampleData = Assertions.checkNotNull(loadable.sampleData);
|
sampleData = Assertions.checkNotNull(loadable.sampleData);
|
||||||
loadingFinished = true;
|
loadingFinished = true;
|
||||||
@ -234,7 +234,11 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCanceled(SourceLoadable loadable, long elapsedRealtimeMs, long loadDurationMs,
|
public void onLoadCanceled(
|
||||||
|
SourceLoadable loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
boolean released) {
|
boolean released) {
|
||||||
eventDispatcher.loadCanceled(
|
eventDispatcher.loadCanceled(
|
||||||
loadable.dataSpec,
|
loadable.dataSpec,
|
||||||
@ -255,6 +259,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
@Override
|
@Override
|
||||||
public LoadErrorAction onLoadError(
|
public LoadErrorAction onLoadError(
|
||||||
SourceLoadable loadable,
|
SourceLoadable loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
IOException error,
|
IOException error,
|
||||||
|
@ -393,7 +393,8 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
|
|||||||
// Loader.Callback implementation.
|
// Loader.Callback implementation.
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(Chunk loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
public void onLoadCompleted(
|
||||||
|
Chunk loadable, long loadTaskId, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
chunkSource.onChunkLoadCompleted(loadable);
|
chunkSource.onChunkLoadCompleted(loadable);
|
||||||
eventDispatcher.loadCompleted(
|
eventDispatcher.loadCompleted(
|
||||||
loadable.dataSpec,
|
loadable.dataSpec,
|
||||||
@ -413,7 +414,11 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCanceled(Chunk loadable, long elapsedRealtimeMs, long loadDurationMs,
|
public void onLoadCanceled(
|
||||||
|
Chunk loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
boolean released) {
|
boolean released) {
|
||||||
eventDispatcher.loadCanceled(
|
eventDispatcher.loadCanceled(
|
||||||
loadable.dataSpec,
|
loadable.dataSpec,
|
||||||
@ -441,6 +446,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
|
|||||||
@Override
|
@Override
|
||||||
public LoadErrorAction onLoadError(
|
public LoadErrorAction onLoadError(
|
||||||
Chunk loadable,
|
Chunk loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
IOException error,
|
IOException error,
|
||||||
|
@ -23,6 +23,7 @@ import android.os.SystemClock;
|
|||||||
import androidx.annotation.IntDef;
|
import androidx.annotation.IntDef;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
|
import com.google.android.exoplayer2.source.LoadEventInfo;
|
||||||
import com.google.android.exoplayer2.util.Assertions;
|
import com.google.android.exoplayer2.util.Assertions;
|
||||||
import com.google.android.exoplayer2.util.Log;
|
import com.google.android.exoplayer2.util.Log;
|
||||||
import com.google.android.exoplayer2.util.TraceUtil;
|
import com.google.android.exoplayer2.util.TraceUtil;
|
||||||
@ -79,11 +80,12 @@ public final class Loader implements LoaderErrorThrower {
|
|||||||
* and this callback being called.
|
* and this callback being called.
|
||||||
*
|
*
|
||||||
* @param loadable The loadable whose load has completed.
|
* @param loadable The loadable whose load has completed.
|
||||||
|
* @param loadTaskId A non-negative identifier for the load task. Remains associated to the load
|
||||||
|
* task after retries until completion or cancellation.
|
||||||
* @param elapsedRealtimeMs {@link SystemClock#elapsedRealtime} when the load ended.
|
* @param elapsedRealtimeMs {@link SystemClock#elapsedRealtime} when the load ended.
|
||||||
* @param loadDurationMs The duration in milliseconds of the load since {@link #startLoading}
|
* @param loadDurationMs The duration in milliseconds of the load since {@link #startLoading}
|
||||||
* was called.
|
|
||||||
*/
|
*/
|
||||||
void onLoadCompleted(T loadable, long elapsedRealtimeMs, long loadDurationMs);
|
void onLoadCompleted(T loadable, long loadTaskId, long elapsedRealtimeMs, long loadDurationMs);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a load has been canceled.
|
* Called when a load has been canceled.
|
||||||
@ -94,13 +96,15 @@ public final class Loader implements LoaderErrorThrower {
|
|||||||
* exits.
|
* exits.
|
||||||
*
|
*
|
||||||
* @param loadable The loadable whose load has been canceled.
|
* @param loadable The loadable whose load has been canceled.
|
||||||
|
* @param loadTaskId A non-negative identifier for the load task. Remains associated to the load
|
||||||
|
* task after retries until completion or cancellation.
|
||||||
* @param elapsedRealtimeMs {@link SystemClock#elapsedRealtime} when the load was canceled.
|
* @param elapsedRealtimeMs {@link SystemClock#elapsedRealtime} when the load was canceled.
|
||||||
* @param loadDurationMs The duration in milliseconds of the load since {@link #startLoading}
|
* @param loadDurationMs The duration in milliseconds of the load since {@link #startLoading}
|
||||||
* was called up to the point at which it was canceled.
|
* was called up to the point at which it was canceled.
|
||||||
* @param released True if the load was canceled because the {@link Loader} was released. False
|
* @param released True if the load was canceled because the {@link Loader} was released. False
|
||||||
* otherwise.
|
|
||||||
*/
|
*/
|
||||||
void onLoadCanceled(T loadable, long elapsedRealtimeMs, long loadDurationMs, boolean released);
|
void onLoadCanceled(
|
||||||
|
T loadable, long loadTaskId, long elapsedRealtimeMs, long loadDurationMs, boolean released);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a load encounters an error.
|
* Called when a load encounters an error.
|
||||||
@ -109,6 +113,8 @@ public final class Loader implements LoaderErrorThrower {
|
|||||||
* and this callback being called.
|
* and this callback being called.
|
||||||
*
|
*
|
||||||
* @param loadable The loadable whose load has encountered an error.
|
* @param loadable The loadable whose load has encountered an error.
|
||||||
|
* @param loadTaskId A non-negative identifier for the load task. Remains associated to the load
|
||||||
|
* task after retries until completion or cancellation.
|
||||||
* @param elapsedRealtimeMs {@link SystemClock#elapsedRealtime} when the error occurred.
|
* @param elapsedRealtimeMs {@link SystemClock#elapsedRealtime} when the error occurred.
|
||||||
* @param loadDurationMs The duration in milliseconds of the load since {@link #startLoading}
|
* @param loadDurationMs The duration in milliseconds of the load since {@link #startLoading}
|
||||||
* was called up to the point at which the error occurred.
|
* was called up to the point at which the error occurred.
|
||||||
@ -119,7 +125,12 @@ public final class Loader implements LoaderErrorThrower {
|
|||||||
* Loader#DONT_RETRY_FATAL} or a retry action created by {@link #createRetryAction}.
|
* Loader#DONT_RETRY_FATAL} or a retry action created by {@link #createRetryAction}.
|
||||||
*/
|
*/
|
||||||
LoadErrorAction onLoadError(
|
LoadErrorAction onLoadError(
|
||||||
T loadable, long elapsedRealtimeMs, long loadDurationMs, IOException error, int errorCount);
|
T loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
|
IOException error,
|
||||||
|
int errorCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -166,10 +177,7 @@ public final class Loader implements LoaderErrorThrower {
|
|||||||
public static final LoadErrorAction DONT_RETRY_FATAL =
|
public static final LoadErrorAction DONT_RETRY_FATAL =
|
||||||
new LoadErrorAction(ACTION_TYPE_DONT_RETRY_FATAL, C.TIME_UNSET);
|
new LoadErrorAction(ACTION_TYPE_DONT_RETRY_FATAL, C.TIME_UNSET);
|
||||||
|
|
||||||
/**
|
/** Action that can be taken in response to {@link Callback#onLoadError}. */
|
||||||
* Action that can be taken in response to {@link Callback#onLoadError(Loadable, long, long,
|
|
||||||
* IOException, int)}.
|
|
||||||
*/
|
|
||||||
public static final class LoadErrorAction {
|
public static final class LoadErrorAction {
|
||||||
|
|
||||||
private final @RetryActionType int type;
|
private final @RetryActionType int type;
|
||||||
@ -315,6 +323,7 @@ public final class Loader implements LoaderErrorThrower {
|
|||||||
public final int defaultMinRetryCount;
|
public final int defaultMinRetryCount;
|
||||||
|
|
||||||
private final T loadable;
|
private final T loadable;
|
||||||
|
private final long id;
|
||||||
private final long startTimeMs;
|
private final long startTimeMs;
|
||||||
|
|
||||||
@Nullable private Loader.Callback<T> callback;
|
@Nullable private Loader.Callback<T> callback;
|
||||||
@ -328,6 +337,7 @@ public final class Loader implements LoaderErrorThrower {
|
|||||||
public LoadTask(Looper looper, T loadable, Loader.Callback<T> callback,
|
public LoadTask(Looper looper, T loadable, Loader.Callback<T> callback,
|
||||||
int defaultMinRetryCount, long startTimeMs) {
|
int defaultMinRetryCount, long startTimeMs) {
|
||||||
super(looper);
|
super(looper);
|
||||||
|
id = LoadEventInfo.getNewId();
|
||||||
this.loadable = loadable;
|
this.loadable = loadable;
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
this.defaultMinRetryCount = defaultMinRetryCount;
|
this.defaultMinRetryCount = defaultMinRetryCount;
|
||||||
@ -370,7 +380,7 @@ public final class Loader implements LoaderErrorThrower {
|
|||||||
finish();
|
finish();
|
||||||
long nowMs = SystemClock.elapsedRealtime();
|
long nowMs = SystemClock.elapsedRealtime();
|
||||||
Assertions.checkNotNull(callback)
|
Assertions.checkNotNull(callback)
|
||||||
.onLoadCanceled(loadable, nowMs, nowMs - startTimeMs, true);
|
.onLoadCanceled(loadable, id, nowMs, nowMs - startTimeMs, true);
|
||||||
// If loading, this task will be referenced from a GC root (the loading thread) until
|
// If loading, this task will be referenced from a GC root (the loading thread) until
|
||||||
// cancellation completes. The time taken for cancellation to complete depends on the
|
// cancellation completes. The time taken for cancellation to complete depends on the
|
||||||
// implementation of the Loadable that the task is loading. We null the callback reference
|
// implementation of the Loadable that the task is loading. We null the callback reference
|
||||||
@ -441,16 +451,16 @@ public final class Loader implements LoaderErrorThrower {
|
|||||||
long durationMs = nowMs - startTimeMs;
|
long durationMs = nowMs - startTimeMs;
|
||||||
Loader.Callback<T> callback = Assertions.checkNotNull(this.callback);
|
Loader.Callback<T> callback = Assertions.checkNotNull(this.callback);
|
||||||
if (canceled) {
|
if (canceled) {
|
||||||
callback.onLoadCanceled(loadable, nowMs, durationMs, false);
|
callback.onLoadCanceled(loadable, id, nowMs, durationMs, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (msg.what) {
|
switch (msg.what) {
|
||||||
case MSG_CANCEL:
|
case MSG_CANCEL:
|
||||||
callback.onLoadCanceled(loadable, nowMs, durationMs, false);
|
callback.onLoadCanceled(loadable, id, nowMs, durationMs, false);
|
||||||
break;
|
break;
|
||||||
case MSG_END_OF_SOURCE:
|
case MSG_END_OF_SOURCE:
|
||||||
try {
|
try {
|
||||||
callback.onLoadCompleted(loadable, nowMs, durationMs);
|
callback.onLoadCompleted(loadable, id, nowMs, durationMs);
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
// This should never happen, but handle it anyway.
|
// This should never happen, but handle it anyway.
|
||||||
Log.e(TAG, "Unexpected exception handling load completed", e);
|
Log.e(TAG, "Unexpected exception handling load completed", e);
|
||||||
@ -461,7 +471,7 @@ public final class Loader implements LoaderErrorThrower {
|
|||||||
currentError = (IOException) msg.obj;
|
currentError = (IOException) msg.obj;
|
||||||
errorCount++;
|
errorCount++;
|
||||||
LoadErrorAction action =
|
LoadErrorAction action =
|
||||||
callback.onLoadError(loadable, nowMs, durationMs, currentError, errorCount);
|
callback.onLoadError(loadable, id, nowMs, durationMs, currentError, errorCount);
|
||||||
if (action.type == ACTION_TYPE_DONT_RETRY_FATAL) {
|
if (action.type == ACTION_TYPE_DONT_RETRY_FATAL) {
|
||||||
fatalError = currentError;
|
fatalError = currentError;
|
||||||
} else if (action.type != ACTION_TYPE_DONT_RETRY) {
|
} else if (action.type != ACTION_TYPE_DONT_RETRY) {
|
||||||
|
@ -281,7 +281,8 @@ public final class SntpClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(Loadable loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
public void onLoadCompleted(
|
||||||
|
Loadable loadable, long loadTaskId, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
Assertions.checkState(SntpClient.isInitialized());
|
Assertions.checkState(SntpClient.isInitialized());
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
callback.onInitialized();
|
callback.onInitialized();
|
||||||
@ -290,13 +291,18 @@ public final class SntpClient {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCanceled(
|
public void onLoadCanceled(
|
||||||
Loadable loadable, long elapsedRealtimeMs, long loadDurationMs, boolean released) {
|
Loadable loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
|
boolean released) {
|
||||||
// Ignore.
|
// Ignore.
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LoadErrorAction onLoadError(
|
public LoadErrorAction onLoadError(
|
||||||
Loadable loadable,
|
Loadable loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
IOException error,
|
IOException error,
|
||||||
|
@ -73,6 +73,7 @@ import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
|
|||||||
import com.google.android.exoplayer2.upstream.Allocation;
|
import com.google.android.exoplayer2.upstream.Allocation;
|
||||||
import com.google.android.exoplayer2.upstream.Allocator;
|
import com.google.android.exoplayer2.upstream.Allocator;
|
||||||
import com.google.android.exoplayer2.upstream.Loader;
|
import com.google.android.exoplayer2.upstream.Loader;
|
||||||
|
import com.google.android.exoplayer2.upstream.Loader.Loadable;
|
||||||
import com.google.android.exoplayer2.upstream.TransferListener;
|
import com.google.android.exoplayer2.upstream.TransferListener;
|
||||||
import com.google.android.exoplayer2.util.Assertions;
|
import com.google.android.exoplayer2.util.Assertions;
|
||||||
import com.google.android.exoplayer2.util.Clock;
|
import com.google.android.exoplayer2.util.Clock;
|
||||||
@ -6363,15 +6364,20 @@ public final class ExoPlayerTest {
|
|||||||
private static final class DummyLoaderCallback implements Loader.Callback<Loader.Loadable> {
|
private static final class DummyLoaderCallback implements Loader.Callback<Loader.Loadable> {
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(
|
public void onLoadCompleted(
|
||||||
Loader.Loadable loadable, long elapsedRealtimeMs, long loadDurationMs) {}
|
Loadable loadable, long loadTaskId, long elapsedRealtimeMs, long loadDurationMs) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCanceled(
|
public void onLoadCanceled(
|
||||||
Loader.Loadable loadable, long elapsedRealtimeMs, long loadDurationMs, boolean released) {}
|
Loadable loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
|
boolean released) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Loader.LoadErrorAction onLoadError(
|
public Loader.LoadErrorAction onLoadError(
|
||||||
Loader.Loadable loadable,
|
Loadable loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
IOException error,
|
IOException error,
|
||||||
|
@ -1347,20 +1347,28 @@ public final class DashMediaSource extends BaseMediaSource {
|
|||||||
private final class ManifestCallback implements Loader.Callback<ParsingLoadable<DashManifest>> {
|
private final class ManifestCallback implements Loader.Callback<ParsingLoadable<DashManifest>> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(ParsingLoadable<DashManifest> loadable,
|
public void onLoadCompleted(
|
||||||
long elapsedRealtimeMs, long loadDurationMs) {
|
ParsingLoadable<DashManifest> loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs) {
|
||||||
onManifestLoadCompleted(loadable, elapsedRealtimeMs, loadDurationMs);
|
onManifestLoadCompleted(loadable, elapsedRealtimeMs, loadDurationMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCanceled(ParsingLoadable<DashManifest> loadable,
|
public void onLoadCanceled(
|
||||||
long elapsedRealtimeMs, long loadDurationMs, boolean released) {
|
ParsingLoadable<DashManifest> loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
|
boolean released) {
|
||||||
DashMediaSource.this.onLoadCanceled(loadable, elapsedRealtimeMs, loadDurationMs);
|
DashMediaSource.this.onLoadCanceled(loadable, elapsedRealtimeMs, loadDurationMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LoadErrorAction onLoadError(
|
public LoadErrorAction onLoadError(
|
||||||
ParsingLoadable<DashManifest> loadable,
|
ParsingLoadable<DashManifest> loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
IOException error,
|
IOException error,
|
||||||
@ -1373,20 +1381,28 @@ public final class DashMediaSource extends BaseMediaSource {
|
|||||||
private final class UtcTimestampCallback implements Loader.Callback<ParsingLoadable<Long>> {
|
private final class UtcTimestampCallback implements Loader.Callback<ParsingLoadable<Long>> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(ParsingLoadable<Long> loadable, long elapsedRealtimeMs,
|
public void onLoadCompleted(
|
||||||
|
ParsingLoadable<Long> loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs) {
|
long loadDurationMs) {
|
||||||
onUtcTimestampLoadCompleted(loadable, elapsedRealtimeMs, loadDurationMs);
|
onUtcTimestampLoadCompleted(loadable, elapsedRealtimeMs, loadDurationMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCanceled(ParsingLoadable<Long> loadable, long elapsedRealtimeMs,
|
public void onLoadCanceled(
|
||||||
long loadDurationMs, boolean released) {
|
ParsingLoadable<Long> loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
|
boolean released) {
|
||||||
DashMediaSource.this.onLoadCanceled(loadable, elapsedRealtimeMs, loadDurationMs);
|
DashMediaSource.this.onLoadCanceled(loadable, elapsedRealtimeMs, loadDurationMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LoadErrorAction onLoadError(
|
public LoadErrorAction onLoadError(
|
||||||
ParsingLoadable<Long> loadable,
|
ParsingLoadable<Long> loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
IOException error,
|
IOException error,
|
||||||
|
@ -703,7 +703,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||||||
// Loader.Callback implementation.
|
// Loader.Callback implementation.
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(Chunk loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
public void onLoadCompleted(
|
||||||
|
Chunk loadable, long loadTaskId, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
chunkSource.onChunkLoadCompleted(loadable);
|
chunkSource.onChunkLoadCompleted(loadable);
|
||||||
eventDispatcher.loadCompleted(
|
eventDispatcher.loadCompleted(
|
||||||
loadable.dataSpec,
|
loadable.dataSpec,
|
||||||
@ -727,7 +728,11 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCanceled(Chunk loadable, long elapsedRealtimeMs, long loadDurationMs,
|
public void onLoadCanceled(
|
||||||
|
Chunk loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
boolean released) {
|
boolean released) {
|
||||||
eventDispatcher.loadCanceled(
|
eventDispatcher.loadCanceled(
|
||||||
loadable.dataSpec,
|
loadable.dataSpec,
|
||||||
@ -754,6 +759,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||||||
@Override
|
@Override
|
||||||
public LoadErrorAction onLoadError(
|
public LoadErrorAction onLoadError(
|
||||||
Chunk loadable,
|
Chunk loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
IOException error,
|
IOException error,
|
||||||
|
@ -221,7 +221,10 @@ public final class DefaultHlsPlaylistTracker
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(
|
public void onLoadCompleted(
|
||||||
ParsingLoadable<HlsPlaylist> loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
ParsingLoadable<HlsPlaylist> loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs) {
|
||||||
HlsPlaylist result = loadable.getResult();
|
HlsPlaylist result = loadable.getResult();
|
||||||
HlsMasterPlaylist masterPlaylist;
|
HlsMasterPlaylist masterPlaylist;
|
||||||
boolean isMediaPlaylist = result instanceof HlsMediaPlaylist;
|
boolean isMediaPlaylist = result instanceof HlsMediaPlaylist;
|
||||||
@ -254,6 +257,7 @@ public final class DefaultHlsPlaylistTracker
|
|||||||
@Override
|
@Override
|
||||||
public void onLoadCanceled(
|
public void onLoadCanceled(
|
||||||
ParsingLoadable<HlsPlaylist> loadable,
|
ParsingLoadable<HlsPlaylist> loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
boolean released) {
|
boolean released) {
|
||||||
@ -270,6 +274,7 @@ public final class DefaultHlsPlaylistTracker
|
|||||||
@Override
|
@Override
|
||||||
public LoadErrorAction onLoadError(
|
public LoadErrorAction onLoadError(
|
||||||
ParsingLoadable<HlsPlaylist> loadable,
|
ParsingLoadable<HlsPlaylist> loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
IOException error,
|
IOException error,
|
||||||
@ -516,7 +521,10 @@ public final class DefaultHlsPlaylistTracker
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(
|
public void onLoadCompleted(
|
||||||
ParsingLoadable<HlsPlaylist> loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
ParsingLoadable<HlsPlaylist> loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs) {
|
||||||
HlsPlaylist result = loadable.getResult();
|
HlsPlaylist result = loadable.getResult();
|
||||||
if (result instanceof HlsMediaPlaylist) {
|
if (result instanceof HlsMediaPlaylist) {
|
||||||
processLoadedPlaylist((HlsMediaPlaylist) result, loadDurationMs);
|
processLoadedPlaylist((HlsMediaPlaylist) result, loadDurationMs);
|
||||||
@ -536,6 +544,7 @@ public final class DefaultHlsPlaylistTracker
|
|||||||
@Override
|
@Override
|
||||||
public void onLoadCanceled(
|
public void onLoadCanceled(
|
||||||
ParsingLoadable<HlsPlaylist> loadable,
|
ParsingLoadable<HlsPlaylist> loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
boolean released) {
|
boolean released) {
|
||||||
@ -552,6 +561,7 @@ public final class DefaultHlsPlaylistTracker
|
|||||||
@Override
|
@Override
|
||||||
public LoadErrorAction onLoadError(
|
public LoadErrorAction onLoadError(
|
||||||
ParsingLoadable<HlsPlaylist> loadable,
|
ParsingLoadable<HlsPlaylist> loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
IOException error,
|
IOException error,
|
||||||
|
@ -618,7 +618,10 @@ public final class SsMediaSource extends BaseMediaSource
|
|||||||
// Loader.Callback implementation
|
// Loader.Callback implementation
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(ParsingLoadable<SsManifest> loadable, long elapsedRealtimeMs,
|
public void onLoadCompleted(
|
||||||
|
ParsingLoadable<SsManifest> loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs) {
|
long loadDurationMs) {
|
||||||
manifestEventDispatcher.loadCompleted(
|
manifestEventDispatcher.loadCompleted(
|
||||||
loadable.dataSpec,
|
loadable.dataSpec,
|
||||||
@ -635,8 +638,12 @@ public final class SsMediaSource extends BaseMediaSource
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCanceled(ParsingLoadable<SsManifest> loadable, long elapsedRealtimeMs,
|
public void onLoadCanceled(
|
||||||
long loadDurationMs, boolean released) {
|
ParsingLoadable<SsManifest> loadable,
|
||||||
|
long loadTaskId,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
|
boolean released) {
|
||||||
manifestEventDispatcher.loadCanceled(
|
manifestEventDispatcher.loadCanceled(
|
||||||
loadable.dataSpec,
|
loadable.dataSpec,
|
||||||
loadable.getUri(),
|
loadable.getUri(),
|
||||||
@ -650,6 +657,7 @@ public final class SsMediaSource extends BaseMediaSource
|
|||||||
@Override
|
@Override
|
||||||
public LoadErrorAction onLoadError(
|
public LoadErrorAction onLoadError(
|
||||||
ParsingLoadable<SsManifest> loadable,
|
ParsingLoadable<SsManifest> loadable,
|
||||||
|
long loadTaskId,
|
||||||
long elapsedRealtimeMs,
|
long elapsedRealtimeMs,
|
||||||
long loadDurationMs,
|
long loadDurationMs,
|
||||||
IOException error,
|
IOException error,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user