Commit 25f17acd by aquilescanta Committed by Ian Baker

Move LoadEventInfo creation to the caller

LoadEventInfo needs to also be sent to the LoadErrorHandlingPolicy.

PiperOrigin-RevId: 308066998
parent a0423461
......@@ -18,6 +18,7 @@ package com.google.android.exoplayer2.source;
import android.net.Uri;
import android.os.SystemClock;
import com.google.android.exoplayer2.upstream.DataSpec;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
......@@ -51,6 +52,20 @@ public final class LoadEventInfo {
public final long bytesLoaded;
/**
* Equivalent to {@link #LoadEventInfo(DataSpec, Uri, Map, long, long, long)
* LoadEventInfo(dataSpec, dataSpec.uri, Collections.emptyMap(), elapsedRealtimeMs, 0, 0)}.
*/
public LoadEventInfo(DataSpec dataSpec, long elapsedRealtimeMs) {
this(
dataSpec,
dataSpec.uri,
Collections.emptyMap(),
elapsedRealtimeMs,
/* loadDurationMs= */ 0,
/* bytesLoaded= */ 0);
}
/**
* Creates load event info.
*
* @param dataSpec Defines the requested data.
......
......@@ -15,20 +15,15 @@
*/
package com.google.android.exoplayer2.source;
import android.net.Uri;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
import com.google.android.exoplayer2.upstream.DataSpec;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.CopyOnWriteMultiset;
import com.google.android.exoplayer2.util.MediaSourceEventDispatcher;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/** Interface for callbacks to be notified of {@link MediaSource} events. */
public interface MediaSourceEventListener {
......@@ -201,37 +196,29 @@ public interface MediaSourceEventListener {
MediaSourceEventListener.class);
}
public void loadStarted(DataSpec dataSpec, int dataType, long elapsedRealtimeMs) {
public void loadStarted(LoadEventInfo loadEventInfo, int dataType) {
loadStarted(
dataSpec,
loadEventInfo,
dataType,
C.TRACK_TYPE_UNKNOWN,
null,
C.SELECTION_REASON_UNKNOWN,
null,
C.TIME_UNSET,
C.TIME_UNSET,
elapsedRealtimeMs);
/* trackType= */ C.TRACK_TYPE_UNKNOWN,
/* trackFormat= */ null,
/* trackSelectionReason= */ C.SELECTION_REASON_UNKNOWN,
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ C.TIME_UNSET,
/* mediaEndTimeUs= */ C.TIME_UNSET);
}
public void loadStarted(
DataSpec dataSpec,
LoadEventInfo loadEventInfo,
int dataType,
int trackType,
@Nullable Format trackFormat,
int trackSelectionReason,
@Nullable Object trackSelectionData,
long mediaStartTimeUs,
long mediaEndTimeUs,
long elapsedRealtimeMs) {
long mediaEndTimeUs) {
loadStarted(
new LoadEventInfo(
dataSpec,
dataSpec.uri,
/* responseHeaders= */ Collections.emptyMap(),
elapsedRealtimeMs,
/* loadDurationMs= */ 0,
/* bytesLoaded= */ 0),
loadEventInfo,
new MediaLoadData(
dataType,
trackType,
......@@ -249,47 +236,29 @@ public interface MediaSourceEventListener {
MediaSourceEventListener.class);
}
public void loadCompleted(
DataSpec dataSpec,
Uri uri,
Map<String, List<String>> responseHeaders,
int dataType,
long elapsedRealtimeMs,
long loadDurationMs,
long bytesLoaded) {
public void loadCompleted(LoadEventInfo loadEventInfo, int dataType) {
loadCompleted(
dataSpec,
uri,
responseHeaders,
loadEventInfo,
dataType,
C.TRACK_TYPE_UNKNOWN,
null,
C.SELECTION_REASON_UNKNOWN,
null,
C.TIME_UNSET,
C.TIME_UNSET,
elapsedRealtimeMs,
loadDurationMs,
bytesLoaded);
/* trackType= */ C.TRACK_TYPE_UNKNOWN,
/* trackFormat= */ null,
/* trackSelectionReason= */ C.SELECTION_REASON_UNKNOWN,
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ C.TIME_UNSET,
/* mediaEndTimeUs= */ C.TIME_UNSET);
}
public void loadCompleted(
DataSpec dataSpec,
Uri uri,
Map<String, List<String>> responseHeaders,
LoadEventInfo loadEventInfo,
int dataType,
int trackType,
@Nullable Format trackFormat,
int trackSelectionReason,
@Nullable Object trackSelectionData,
long mediaStartTimeUs,
long mediaEndTimeUs,
long elapsedRealtimeMs,
long loadDurationMs,
long bytesLoaded) {
long mediaEndTimeUs) {
loadCompleted(
new LoadEventInfo(
dataSpec, uri, responseHeaders, elapsedRealtimeMs, loadDurationMs, bytesLoaded),
loadEventInfo,
new MediaLoadData(
dataType,
trackType,
......@@ -307,47 +276,29 @@ public interface MediaSourceEventListener {
MediaSourceEventListener.class);
}
public void loadCanceled(
DataSpec dataSpec,
Uri uri,
Map<String, List<String>> responseHeaders,
int dataType,
long elapsedRealtimeMs,
long loadDurationMs,
long bytesLoaded) {
public void loadCanceled(LoadEventInfo loadEventInfo, int dataType) {
loadCanceled(
dataSpec,
uri,
responseHeaders,
loadEventInfo,
dataType,
C.TRACK_TYPE_UNKNOWN,
null,
C.SELECTION_REASON_UNKNOWN,
null,
C.TIME_UNSET,
C.TIME_UNSET,
elapsedRealtimeMs,
loadDurationMs,
bytesLoaded);
/* trackType= */ C.TRACK_TYPE_UNKNOWN,
/* trackFormat= */ null,
/* trackSelectionReason= */ C.SELECTION_REASON_UNKNOWN,
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ C.TIME_UNSET,
/* mediaEndTimeUs= */ C.TIME_UNSET);
}
public void loadCanceled(
DataSpec dataSpec,
Uri uri,
Map<String, List<String>> responseHeaders,
LoadEventInfo loadEventInfo,
int dataType,
int trackType,
@Nullable Format trackFormat,
int trackSelectionReason,
@Nullable Object trackSelectionData,
long mediaStartTimeUs,
long mediaEndTimeUs,
long elapsedRealtimeMs,
long loadDurationMs,
long bytesLoaded) {
long mediaEndTimeUs) {
loadCanceled(
new LoadEventInfo(
dataSpec, uri, responseHeaders, elapsedRealtimeMs, loadDurationMs, bytesLoaded),
loadEventInfo,
new MediaLoadData(
dataType,
trackType,
......@@ -366,37 +317,22 @@ public interface MediaSourceEventListener {
}
public void loadError(
DataSpec dataSpec,
Uri uri,
Map<String, List<String>> responseHeaders,
int dataType,
long elapsedRealtimeMs,
long loadDurationMs,
long bytesLoaded,
IOException error,
boolean wasCanceled) {
LoadEventInfo loadEventInfo, int dataType, IOException error, boolean wasCanceled) {
loadError(
dataSpec,
uri,
responseHeaders,
loadEventInfo,
dataType,
C.TRACK_TYPE_UNKNOWN,
null,
C.SELECTION_REASON_UNKNOWN,
null,
C.TIME_UNSET,
C.TIME_UNSET,
elapsedRealtimeMs,
loadDurationMs,
bytesLoaded,
/* trackType= */ C.TRACK_TYPE_UNKNOWN,
/* trackFormat= */ null,
/* trackSelectionReason= */ C.SELECTION_REASON_UNKNOWN,
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ C.TIME_UNSET,
/* mediaEndTimeUs= */ C.TIME_UNSET,
error,
wasCanceled);
}
public void loadError(
DataSpec dataSpec,
Uri uri,
Map<String, List<String>> responseHeaders,
LoadEventInfo loadEventInfo,
int dataType,
int trackType,
@Nullable Format trackFormat,
......@@ -404,14 +340,10 @@ public interface MediaSourceEventListener {
@Nullable Object trackSelectionData,
long mediaStartTimeUs,
long mediaEndTimeUs,
long elapsedRealtimeMs,
long loadDurationMs,
long bytesLoaded,
IOException error,
boolean wasCanceled) {
loadError(
new LoadEventInfo(
dataSpec, uri, responseHeaders, elapsedRealtimeMs, loadDurationMs, bytesLoaded),
loadEventInfo,
new MediaLoadData(
dataType,
trackType,
......
......@@ -552,20 +552,22 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
: largestQueuedTimestampUs + DEFAULT_LAST_SAMPLE_DURATION_US;
listener.onSourceInfoRefreshed(durationUs, isSeekable, isLive);
}
StatsDataSource dataSource = loadable.dataSource;
eventDispatcher.loadCompleted(
loadable.dataSpec,
loadable.dataSource.getLastOpenedUri(),
loadable.dataSource.getLastResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
dataSource.getLastOpenedUri(),
dataSource.getLastResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
dataSource.getBytesRead()),
C.DATA_TYPE_MEDIA,
C.TRACK_TYPE_UNKNOWN,
/* trackFormat= */ null,
C.SELECTION_REASON_UNKNOWN,
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ loadable.seekTimeUs,
durationUs,
elapsedRealtimeMs,
loadDurationMs,
loadable.dataSource.getBytesRead());
durationUs);
copyLengthFromLoader(loadable);
loadingFinished = true;
Assertions.checkNotNull(callback).onContinueLoadingRequested(this);
......@@ -574,20 +576,22 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@Override
public void onLoadCanceled(
ExtractingLoadable loadable, long elapsedRealtimeMs, long loadDurationMs, boolean released) {
StatsDataSource dataSource = loadable.dataSource;
eventDispatcher.loadCanceled(
loadable.dataSpec,
loadable.dataSource.getLastOpenedUri(),
loadable.dataSource.getLastResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
dataSource.getLastOpenedUri(),
dataSource.getLastResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
dataSource.getBytesRead()),
C.DATA_TYPE_MEDIA,
C.TRACK_TYPE_UNKNOWN,
/* trackFormat= */ null,
C.SELECTION_REASON_UNKNOWN,
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ loadable.seekTimeUs,
durationUs,
elapsedRealtimeMs,
loadDurationMs,
loadable.dataSource.getBytesRead());
durationUs);
if (!released) {
copyLengthFromLoader(loadable);
for (SampleQueue sampleQueue : sampleQueues) {
......@@ -621,10 +625,15 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
: Loader.DONT_RETRY;
}
StatsDataSource dataSource = loadable.dataSource;
eventDispatcher.loadError(
loadable.dataSpec,
loadable.dataSource.getLastOpenedUri(),
loadable.dataSource.getLastResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
dataSource.getLastOpenedUri(),
dataSource.getLastResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
dataSource.getBytesRead()),
C.DATA_TYPE_MEDIA,
C.TRACK_TYPE_UNKNOWN,
/* trackFormat= */ null,
......@@ -632,9 +641,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ loadable.seekTimeUs,
durationUs,
elapsedRealtimeMs,
loadDurationMs,
loadable.dataSource.getBytesRead(),
error,
!loadErrorAction.isRetry());
return loadErrorAction;
......@@ -776,16 +782,16 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
long elapsedRealtimeMs =
loader.startLoading(
loadable, this, loadErrorHandlingPolicy.getMinimumLoadableRetryCount(dataType));
DataSpec dataSpec = loadable.dataSpec;
eventDispatcher.loadStarted(
loadable.dataSpec,
new LoadEventInfo(dataSpec, elapsedRealtimeMs),
C.DATA_TYPE_MEDIA,
C.TRACK_TYPE_UNKNOWN,
/* trackFormat= */ null,
C.SELECTION_REASON_UNKNOWN,
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ loadable.seekTimeUs,
durationUs,
elapsedRealtimeMs);
durationUs);
}
/**
......
......@@ -160,15 +160,14 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* callback= */ this,
loadErrorHandlingPolicy.getMinimumLoadableRetryCount(C.DATA_TYPE_MEDIA));
eventDispatcher.loadStarted(
dataSpec,
new LoadEventInfo(dataSpec, elapsedRealtimeMs),
C.DATA_TYPE_MEDIA,
C.TRACK_TYPE_UNKNOWN,
format,
C.SELECTION_REASON_UNKNOWN,
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ 0,
durationUs,
elapsedRealtimeMs);
durationUs);
return true;
}
......@@ -217,39 +216,43 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
sampleSize = (int) loadable.dataSource.getBytesRead();
sampleData = Assertions.checkNotNull(loadable.sampleData);
loadingFinished = true;
StatsDataSource dataSource = loadable.dataSource;
eventDispatcher.loadCompleted(
loadable.dataSpec,
loadable.dataSource.getLastOpenedUri(),
loadable.dataSource.getLastResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
dataSource.getLastOpenedUri(),
dataSource.getLastResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
sampleSize),
C.DATA_TYPE_MEDIA,
C.TRACK_TYPE_UNKNOWN,
format,
C.SELECTION_REASON_UNKNOWN,
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ 0,
durationUs,
elapsedRealtimeMs,
loadDurationMs,
sampleSize);
durationUs);
}
@Override
public void onLoadCanceled(
SourceLoadable loadable, long elapsedRealtimeMs, long loadDurationMs, boolean released) {
StatsDataSource dataSource = loadable.dataSource;
eventDispatcher.loadCanceled(
loadable.dataSpec,
loadable.dataSource.getLastOpenedUri(),
loadable.dataSource.getLastResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
dataSource.getLastOpenedUri(),
dataSource.getLastResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
dataSource.getBytesRead()),
C.DATA_TYPE_MEDIA,
C.TRACK_TYPE_UNKNOWN,
/* trackFormat= */ null,
C.SELECTION_REASON_UNKNOWN,
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ 0,
durationUs,
elapsedRealtimeMs,
loadDurationMs,
loadable.dataSource.getBytesRead());
durationUs);
}
@Override
......@@ -277,10 +280,15 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
? Loader.createRetryAction(/* resetErrorCount= */ false, retryDelay)
: Loader.DONT_RETRY_FATAL;
}
StatsDataSource dataSource = loadable.dataSource;
eventDispatcher.loadError(
loadable.dataSpec,
loadable.dataSource.getLastOpenedUri(),
loadable.dataSource.getLastResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
dataSource.getLastOpenedUri(),
dataSource.getLastResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
dataSource.getBytesRead()),
C.DATA_TYPE_MEDIA,
C.TRACK_TYPE_UNKNOWN,
format,
......@@ -288,9 +296,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ 0,
durationUs,
elapsedRealtimeMs,
loadDurationMs,
loadable.dataSource.getBytesRead(),
error,
/* wasCanceled= */ !action.isRetry());
return action;
......
......@@ -45,7 +45,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.checkerframework.checker.nullness.compatqual.NullableType;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
......@@ -356,13 +355,8 @@ public final class AdsMediaSource extends CompositeMediaSource<MediaPeriodId> {
}
createEventDispatcher(/* mediaPeriodId= */ null)
.loadError(
dataSpec,
dataSpec.uri,
/* responseHeaders= */ Collections.emptyMap(),
new LoadEventInfo(dataSpec, /* elapsedRealtimeMs= */ SystemClock.elapsedRealtime()),
C.DATA_TYPE_AD,
/* elapsedRealtimeMs= */ SystemClock.elapsedRealtime(),
/* loadDurationMs= */ 0,
/* bytesLoaded= */ 0,
error,
/* wasCanceled= */ true);
}
......@@ -384,13 +378,9 @@ public final class AdsMediaSource extends CompositeMediaSource<MediaPeriodId> {
public void onPrepareError(MediaPeriodId mediaPeriodId, final IOException exception) {
createEventDispatcher(mediaPeriodId)
.loadError(
new DataSpec(adUri),
adUri,
/* responseHeaders= */ Collections.emptyMap(),
new LoadEventInfo(
new DataSpec(adUri), /* elapsedRealtimeMs= */ SystemClock.elapsedRealtime()),
C.DATA_TYPE_AD,
C.TRACK_TYPE_UNKNOWN,
/* loadDurationMs= */ 0,
/* bytesLoaded= */ 0,
AdLoadException.createForAd(exception),
/* wasCanceled= */ true);
mainHandler.post(
......
......@@ -23,6 +23,7 @@ import com.google.android.exoplayer2.SeekParameters;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
import com.google.android.exoplayer2.drm.DrmSession;
import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.source.LoadEventInfo;
import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher;
import com.google.android.exoplayer2.source.SampleQueue;
import com.google.android.exoplayer2.source.SampleStream;
......@@ -396,19 +397,20 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
public void onLoadCompleted(Chunk loadable, long elapsedRealtimeMs, long loadDurationMs) {
chunkSource.onChunkLoadCompleted(loadable);
eventDispatcher.loadCompleted(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
loadable.type,
primaryTrackType,
loadable.trackFormat,
loadable.trackSelectionReason,
loadable.trackSelectionData,
loadable.startTimeUs,
loadable.endTimeUs,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadable.endTimeUs);
callback.onContinueLoadingRequested(this);
}
......@@ -416,19 +418,20 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
public void onLoadCanceled(
Chunk loadable, long elapsedRealtimeMs, long loadDurationMs, boolean released) {
eventDispatcher.loadCanceled(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
loadable.type,
primaryTrackType,
loadable.trackFormat,
loadable.trackSelectionReason,
loadable.trackSelectionData,
loadable.startTimeUs,
loadable.endTimeUs,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadable.endTimeUs);
if (!released) {
primarySampleQueue.reset();
for (SampleQueue embeddedSampleQueue : embeddedSampleQueues) {
......@@ -484,9 +487,13 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
boolean canceled = !loadErrorAction.isRetry();
eventDispatcher.loadError(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
bytesLoaded),
loadable.type,
primaryTrackType,
loadable.trackFormat,
......@@ -494,9 +501,6 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
loadable.trackSelectionData,
loadable.startTimeUs,
loadable.endTimeUs,
elapsedRealtimeMs,
loadDurationMs,
bytesLoaded,
error,
canceled);
if (canceled) {
......@@ -555,15 +559,14 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
loader.startLoading(
loadable, this, loadErrorHandlingPolicy.getMinimumLoadableRetryCount(loadable.type));
eventDispatcher.loadStarted(
loadable.dataSpec,
new LoadEventInfo(loadable.dataSpec, elapsedRealtimeMs),
loadable.type,
primaryTrackType,
loadable.trackFormat,
loadable.trackSelectionReason,
loadable.trackSelectionData,
loadable.startTimeUs,
loadable.endTimeUs,
elapsedRealtimeMs);
loadable.endTimeUs);
return true;
}
......
......@@ -33,6 +33,7 @@ import com.google.android.exoplayer2.offline.StreamKey;
import com.google.android.exoplayer2.source.BaseMediaSource;
import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.DefaultCompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.LoadEventInfo;
import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.MediaSourceEventListener;
......@@ -754,13 +755,14 @@ public final class DashMediaSource extends BaseMediaSource {
/* package */ void onManifestLoadCompleted(ParsingLoadable<DashManifest> loadable,
long elapsedRealtimeMs, long loadDurationMs) {
manifestEventDispatcher.loadCompleted(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
loadable.type,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
loadable.type);
DashManifest newManifest = loadable.getResult();
int oldPeriodCount = manifest == null ? 0 : manifest.getPeriodCount();
......@@ -856,13 +858,14 @@ public final class DashMediaSource extends BaseMediaSource {
? Loader.DONT_RETRY_FATAL
: Loader.createRetryAction(/* resetErrorCount= */ false, retryDelayMs);
manifestEventDispatcher.loadError(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
loadable.type,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded(),
error,
!loadErrorAction.isRetry());
return loadErrorAction;
......@@ -871,13 +874,14 @@ public final class DashMediaSource extends BaseMediaSource {
/* package */ void onUtcTimestampLoadCompleted(ParsingLoadable<Long> loadable,
long elapsedRealtimeMs, long loadDurationMs) {
manifestEventDispatcher.loadCompleted(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
loadable.type,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
loadable.type);
onUtcTimestampResolved(loadable.getResult() - elapsedRealtimeMs);
}
......@@ -887,15 +891,16 @@ public final class DashMediaSource extends BaseMediaSource {
long loadDurationMs,
IOException error) {
manifestEventDispatcher.loadError(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
loadable.type,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded(),
error,
true);
/* wasCanceled= */ true);
onUtcTimestampResolutionError(error);
return Loader.DONT_RETRY;
}
......@@ -903,13 +908,14 @@ public final class DashMediaSource extends BaseMediaSource {
/* package */ void onLoadCanceled(ParsingLoadable<?> loadable, long elapsedRealtimeMs,
long loadDurationMs) {
manifestEventDispatcher.loadCanceled(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
loadable.type,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
loadable.type);
}
// Internal methods.
......@@ -1122,7 +1128,8 @@ public final class DashMediaSource extends BaseMediaSource {
private <T> void startLoading(ParsingLoadable<T> loadable,
Loader.Callback<ParsingLoadable<T>> callback, int minRetryCount) {
long elapsedRealtimeMs = loader.startLoading(loadable, callback, minRetryCount);
manifestEventDispatcher.loadStarted(loadable.dataSpec, loadable.type, elapsedRealtimeMs);
manifestEventDispatcher.loadStarted(
new LoadEventInfo(loadable.dataSpec, elapsedRealtimeMs), loadable.type);
}
private static final class PeriodSeekInfo {
......
......@@ -36,6 +36,7 @@ import com.google.android.exoplayer2.metadata.Metadata;
import com.google.android.exoplayer2.metadata.emsg.EventMessage;
import com.google.android.exoplayer2.metadata.emsg.EventMessageDecoder;
import com.google.android.exoplayer2.metadata.id3.PrivFrame;
import com.google.android.exoplayer2.source.LoadEventInfo;
import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher;
import com.google.android.exoplayer2.source.SampleQueue;
import com.google.android.exoplayer2.source.SampleQueue.UpstreamFormatChangedListener;
......@@ -674,15 +675,14 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
loader.startLoading(
loadable, this, loadErrorHandlingPolicy.getMinimumLoadableRetryCount(loadable.type));
eventDispatcher.loadStarted(
loadable.dataSpec,
new LoadEventInfo(loadable.dataSpec, elapsedRealtimeMs),
loadable.type,
trackType,
loadable.trackFormat,
loadable.trackSelectionReason,
loadable.trackSelectionData,
loadable.startTimeUs,
loadable.endTimeUs,
elapsedRealtimeMs);
loadable.endTimeUs);
return true;
}
......@@ -702,19 +702,20 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
public void onLoadCompleted(Chunk loadable, long elapsedRealtimeMs, long loadDurationMs) {
chunkSource.onChunkLoadCompleted(loadable);
eventDispatcher.loadCompleted(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
loadable.type,
trackType,
loadable.trackFormat,
loadable.trackSelectionReason,
loadable.trackSelectionData,
loadable.startTimeUs,
loadable.endTimeUs,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadable.endTimeUs);
if (!prepared) {
continueLoading(lastSeekPositionUs);
} else {
......@@ -726,19 +727,20 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
public void onLoadCanceled(
Chunk loadable, long elapsedRealtimeMs, long loadDurationMs, boolean released) {
eventDispatcher.loadCanceled(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
loadable.type,
trackType,
loadable.trackFormat,
loadable.trackSelectionReason,
loadable.trackSelectionData,
loadable.startTimeUs,
loadable.endTimeUs,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
loadable.endTimeUs);
if (!released) {
resetSampleQueues();
if (enabledTrackGroupCount > 0) {
......@@ -786,9 +788,13 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
}
eventDispatcher.loadError(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
bytesLoaded),
loadable.type,
trackType,
loadable.trackFormat,
......@@ -796,9 +802,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
loadable.trackSelectionData,
loadable.startTimeUs,
loadable.endTimeUs,
elapsedRealtimeMs,
loadDurationMs,
bytesLoaded,
error,
/* wasCanceled= */ !loadErrorAction.isRetry());
......
......@@ -21,6 +21,7 @@ import android.os.SystemClock;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ParserException;
import com.google.android.exoplayer2.source.LoadEventInfo;
import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher;
import com.google.android.exoplayer2.source.hls.HlsDataSourceFactory;
import com.google.android.exoplayer2.source.hls.playlist.HlsMasterPlaylist.Variant;
......@@ -135,9 +136,8 @@ public final class DefaultHlsPlaylistTracker
this,
loadErrorHandlingPolicy.getMinimumLoadableRetryCount(masterPlaylistLoadable.type));
eventDispatcher.loadStarted(
masterPlaylistLoadable.dataSpec,
masterPlaylistLoadable.type,
elapsedRealtime);
new LoadEventInfo(masterPlaylistLoadable.dataSpec, elapsedRealtime),
masterPlaylistLoadable.type);
}
@Override
......@@ -242,13 +242,14 @@ public final class DefaultHlsPlaylistTracker
primaryBundle.loadPlaylist();
}
eventDispatcher.loadCompleted(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
C.DATA_TYPE_MANIFEST,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
C.DATA_TYPE_MANIFEST);
}
@Override
......@@ -258,13 +259,14 @@ public final class DefaultHlsPlaylistTracker
long loadDurationMs,
boolean released) {
eventDispatcher.loadCanceled(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
C.DATA_TYPE_MANIFEST,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
C.DATA_TYPE_MANIFEST);
}
@Override
......@@ -279,13 +281,14 @@ public final class DefaultHlsPlaylistTracker
loadable.type, loadDurationMs, error, errorCount);
boolean isFatal = retryDelayMs == C.TIME_UNSET;
eventDispatcher.loadError(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
C.DATA_TYPE_MANIFEST,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded(),
error,
isFatal);
return isFatal
......@@ -521,13 +524,14 @@ public final class DefaultHlsPlaylistTracker
if (result instanceof HlsMediaPlaylist) {
processLoadedPlaylist((HlsMediaPlaylist) result, loadDurationMs);
eventDispatcher.loadCompleted(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
C.DATA_TYPE_MANIFEST,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
C.DATA_TYPE_MANIFEST);
} else {
playlistError = new ParserException("Loaded playlist has unexpected type.");
}
......@@ -540,13 +544,14 @@ public final class DefaultHlsPlaylistTracker
long loadDurationMs,
boolean released) {
eventDispatcher.loadCanceled(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
C.DATA_TYPE_MANIFEST,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
C.DATA_TYPE_MANIFEST);
}
@Override
......@@ -582,13 +587,14 @@ public final class DefaultHlsPlaylistTracker
}
eventDispatcher.loadError(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
C.DATA_TYPE_MANIFEST,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded(),
error,
/* wasCanceled= */ !loadErrorAction.isRetry());
......@@ -612,9 +618,8 @@ public final class DefaultHlsPlaylistTracker
this,
loadErrorHandlingPolicy.getMinimumLoadableRetryCount(mediaPlaylistLoadable.type));
eventDispatcher.loadStarted(
mediaPlaylistLoadable.dataSpec,
mediaPlaylistLoadable.type,
elapsedRealtime);
new LoadEventInfo(mediaPlaylistLoadable.dataSpec, elapsedRealtime),
mediaPlaylistLoadable.type);
}
private void processLoadedPlaylist(HlsMediaPlaylist loadedPlaylist, long loadDurationMs) {
......
......@@ -30,6 +30,7 @@ import com.google.android.exoplayer2.offline.StreamKey;
import com.google.android.exoplayer2.source.BaseMediaSource;
import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.DefaultCompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.LoadEventInfo;
import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.MediaSourceEventListener;
......@@ -621,13 +622,14 @@ public final class SsMediaSource extends BaseMediaSource
public void onLoadCompleted(
ParsingLoadable<SsManifest> loadable, long elapsedRealtimeMs, long loadDurationMs) {
manifestEventDispatcher.loadCompleted(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
loadable.type,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
loadable.type);
manifest = loadable.getResult();
manifestLoadStartTimestamp = elapsedRealtimeMs - loadDurationMs;
processManifest();
......@@ -641,13 +643,14 @@ public final class SsMediaSource extends BaseMediaSource
long loadDurationMs,
boolean released) {
manifestEventDispatcher.loadCanceled(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
loadable.type,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
loadable.type);
}
@Override
......@@ -665,13 +668,14 @@ public final class SsMediaSource extends BaseMediaSource
? Loader.DONT_RETRY_FATAL
: Loader.createRetryAction(/* resetErrorCount= */ false, retryDelayMs);
manifestEventDispatcher.loadError(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
new LoadEventInfo(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded()),
loadable.type,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded(),
error,
!loadErrorAction.isRetry());
return loadErrorAction;
......@@ -767,7 +771,8 @@ public final class SsMediaSource extends BaseMediaSource
long elapsedRealtimeMs =
manifestLoader.startLoading(
loadable, this, loadErrorHandlingPolicy.getMinimumLoadableRetryCount(loadable.type));
manifestEventDispatcher.loadStarted(loadable.dataSpec, loadable.type, elapsedRealtimeMs);
manifestEventDispatcher.loadStarted(
new LoadEventInfo(loadable.dataSpec, elapsedRealtimeMs), loadable.type);
}
}
......@@ -23,6 +23,7 @@ import android.os.SystemClock;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.SeekParameters;
import com.google.android.exoplayer2.source.LoadEventInfo;
import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher;
import com.google.android.exoplayer2.source.SampleStream;
......@@ -121,15 +122,14 @@ public class FakeMediaPeriod implements MediaPeriod {
@Override
public synchronized void prepare(Callback callback, long positionUs) {
eventDispatcher.loadStarted(
FAKE_DATA_SPEC,
new LoadEventInfo(FAKE_DATA_SPEC, SystemClock.elapsedRealtime()),
C.DATA_TYPE_MEDIA,
C.TRACK_TYPE_UNKNOWN,
/* trackFormat= */ null,
C.SELECTION_REASON_UNKNOWN,
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ 0,
/* mediaEndTimeUs = */ C.TIME_UNSET,
SystemClock.elapsedRealtime());
/* mediaEndTimeUs = */ C.TIME_UNSET);
prepareCallback = callback;
if (deferOnPrepared) {
playerHandler = Util.createHandler();
......@@ -273,18 +273,19 @@ public class FakeMediaPeriod implements MediaPeriod {
prepared = true;
Util.castNonNull(prepareCallback).onPrepared(this);
eventDispatcher.loadCompleted(
FAKE_DATA_SPEC,
FAKE_DATA_SPEC.uri,
/* responseHeaders= */ Collections.emptyMap(),
new LoadEventInfo(
FAKE_DATA_SPEC,
FAKE_DATA_SPEC.uri,
/* responseHeaders= */ Collections.emptyMap(),
SystemClock.elapsedRealtime(),
/* loadDurationMs= */ 0,
/* bytesLoaded= */ 100),
C.DATA_TYPE_MEDIA,
C.TRACK_TYPE_UNKNOWN,
/* trackFormat= */ null,
C.SELECTION_REASON_UNKNOWN,
/* trackSelectionData= */ null,
/* mediaStartTimeUs= */ 0,
/* mediaEndTimeUs = */ C.TIME_UNSET,
SystemClock.elapsedRealtime(),
/* loadDurationMs= */ 0,
/* bytesLoaded= */ 100);
/* mediaEndTimeUs = */ C.TIME_UNSET);
}
}
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