mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Merge pull request #1768 from colinkho:onloadstarted-retry
PiperOrigin-RevId: 689728139
This commit is contained in:
commit
d051b4b993
@ -11,6 +11,8 @@
|
|||||||
`TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)`.
|
`TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)`.
|
||||||
* Add `selectedAudioLanguage` parameter to
|
* Add `selectedAudioLanguage` parameter to
|
||||||
`DefaultTrackSelector.selectVideoTrack()` method.
|
`DefaultTrackSelector.selectVideoTrack()` method.
|
||||||
|
* Add `retryCount` parameter to `MediaSourceEventListener.onLoadStarted`
|
||||||
|
and corresponding `MediaSourceEventListener.EventDispatcher` methods.
|
||||||
* Transformer:
|
* Transformer:
|
||||||
* Update parameters of `VideoFrameProcessor.registerInputStream` and
|
* Update parameters of `VideoFrameProcessor.registerInputStream` and
|
||||||
`VideoFrameProcessor.Listener.onInputStreamRegistered` to use `Format`.
|
`VideoFrameProcessor.Listener.onInputStreamRegistered` to use `Format`.
|
||||||
|
@ -564,7 +564,8 @@ import java.util.Set;
|
|||||||
int windowIndex,
|
int windowIndex,
|
||||||
@Nullable MediaSource.MediaPeriodId mediaPeriodId,
|
@Nullable MediaSource.MediaPeriodId mediaPeriodId,
|
||||||
LoadEventInfo loadEventData,
|
LoadEventInfo loadEventData,
|
||||||
MediaLoadData mediaLoadData) {
|
MediaLoadData mediaLoadData,
|
||||||
|
int retryCount) {
|
||||||
@Nullable
|
@Nullable
|
||||||
Pair<Integer, MediaSource.@NullableType MediaPeriodId> eventParameters =
|
Pair<Integer, MediaSource.@NullableType MediaPeriodId> eventParameters =
|
||||||
getEventParameters(windowIndex, mediaPeriodId);
|
getEventParameters(windowIndex, mediaPeriodId);
|
||||||
@ -572,7 +573,11 @@ import java.util.Set;
|
|||||||
eventHandler.post(
|
eventHandler.post(
|
||||||
() ->
|
() ->
|
||||||
eventListener.onLoadStarted(
|
eventListener.onLoadStarted(
|
||||||
eventParameters.first, eventParameters.second, loadEventData, mediaLoadData));
|
eventParameters.first,
|
||||||
|
eventParameters.second,
|
||||||
|
loadEventData,
|
||||||
|
mediaLoadData,
|
||||||
|
retryCount));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -843,16 +843,30 @@ public interface AnalyticsListener {
|
|||||||
@UnstableApi
|
@UnstableApi
|
||||||
default void onPlaylistMetadataChanged(EventTime eventTime, MediaMetadata playlistMetadata) {}
|
default void onPlaylistMetadataChanged(EventTime eventTime, MediaMetadata playlistMetadata) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Implement {@link #onLoadStarted(EventTime, LoadEventInfo, MediaLoadData, int)}
|
||||||
|
* instead, and check for {@code retryCount == 0} for equivalent behavior.
|
||||||
|
*/
|
||||||
|
@UnstableApi
|
||||||
|
@Deprecated
|
||||||
|
default void onLoadStarted(
|
||||||
|
EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a media source started loading data.
|
* Called when a media source started loading data.
|
||||||
*
|
*
|
||||||
* @param eventTime The event time.
|
* @param eventTime The event time.
|
||||||
* @param loadEventInfo The {@link LoadEventInfo} defining the load event.
|
* @param loadEventInfo The {@link LoadEventInfo} defining the load event.
|
||||||
* @param mediaLoadData The {@link MediaLoadData} defining the data being loaded.
|
* @param mediaLoadData The {@link MediaLoadData} defining the data being loaded.
|
||||||
|
* @param retryCount The number of failed attempts since {@link #onLoadStarted} was called (this
|
||||||
|
* is zero for the first load attempt).
|
||||||
*/
|
*/
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
default void onLoadStarted(
|
default void onLoadStarted(
|
||||||
EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {}
|
EventTime eventTime,
|
||||||
|
LoadEventInfo loadEventInfo,
|
||||||
|
MediaLoadData mediaLoadData,
|
||||||
|
int retryCount) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a media source completed loading data.
|
* Called when a media source completed loading data.
|
||||||
|
@ -397,17 +397,23 @@ public class DefaultAnalyticsCollector implements AnalyticsCollector {
|
|||||||
|
|
||||||
// MediaSourceEventListener implementation.
|
// MediaSourceEventListener implementation.
|
||||||
|
|
||||||
|
// Deliberately calling deprecated listener method for backwards compatibility.
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
public final void onLoadStarted(
|
public final void onLoadStarted(
|
||||||
int windowIndex,
|
int windowIndex,
|
||||||
@Nullable MediaPeriodId mediaPeriodId,
|
@Nullable MediaPeriodId mediaPeriodId,
|
||||||
LoadEventInfo loadEventInfo,
|
LoadEventInfo loadEventInfo,
|
||||||
MediaLoadData mediaLoadData) {
|
MediaLoadData mediaLoadData,
|
||||||
|
int retryCount) {
|
||||||
EventTime eventTime = generateMediaPeriodEventTime(windowIndex, mediaPeriodId);
|
EventTime eventTime = generateMediaPeriodEventTime(windowIndex, mediaPeriodId);
|
||||||
sendEvent(
|
sendEvent(
|
||||||
eventTime,
|
eventTime,
|
||||||
AnalyticsListener.EVENT_LOAD_STARTED,
|
AnalyticsListener.EVENT_LOAD_STARTED,
|
||||||
listener -> listener.onLoadStarted(eventTime, loadEventInfo, mediaLoadData));
|
listener -> {
|
||||||
|
listener.onLoadStarted(eventTime, loadEventInfo, mediaLoadData);
|
||||||
|
listener.onLoadStarted(eventTime, loadEventInfo, mediaLoadData, retryCount);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -239,10 +239,11 @@ public abstract class CompositeMediaSource<T> extends BaseMediaSource {
|
|||||||
int windowIndex,
|
int windowIndex,
|
||||||
@Nullable MediaPeriodId mediaPeriodId,
|
@Nullable MediaPeriodId mediaPeriodId,
|
||||||
LoadEventInfo loadEventData,
|
LoadEventInfo loadEventData,
|
||||||
MediaLoadData mediaLoadData) {
|
MediaLoadData mediaLoadData,
|
||||||
|
int retryCount) {
|
||||||
if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
|
if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
|
||||||
mediaSourceEventDispatcher.loadStarted(
|
mediaSourceEventDispatcher.loadStarted(
|
||||||
loadEventData, maybeUpdateMediaLoadData(mediaLoadData, mediaPeriodId));
|
loadEventData, maybeUpdateMediaLoadData(mediaLoadData, mediaPeriodId), retryCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,12 +46,15 @@ public interface MediaSourceEventListener {
|
|||||||
* LoadEventInfo#uri} won't reflect potential redirection yet and {@link
|
* LoadEventInfo#uri} won't reflect potential redirection yet and {@link
|
||||||
* LoadEventInfo#responseHeaders} will be empty.
|
* LoadEventInfo#responseHeaders} will be empty.
|
||||||
* @param mediaLoadData The {@link MediaLoadData} defining the data being loaded.
|
* @param mediaLoadData The {@link MediaLoadData} defining the data being loaded.
|
||||||
|
* @param retryCount The number of failed attempts since this method was first called (this is
|
||||||
|
* zero for the first load attempt).
|
||||||
*/
|
*/
|
||||||
default void onLoadStarted(
|
default void onLoadStarted(
|
||||||
int windowIndex,
|
int windowIndex,
|
||||||
@Nullable MediaPeriodId mediaPeriodId,
|
@Nullable MediaPeriodId mediaPeriodId,
|
||||||
LoadEventInfo loadEventInfo,
|
LoadEventInfo loadEventInfo,
|
||||||
MediaLoadData mediaLoadData) {}
|
MediaLoadData mediaLoadData,
|
||||||
|
int retryCount) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a load ends.
|
* Called when a load ends.
|
||||||
@ -61,8 +64,7 @@ public interface MediaSourceEventListener {
|
|||||||
* belong to a specific media period.
|
* belong to a specific media period.
|
||||||
* @param loadEventInfo The {@link LoadEventInfo} corresponding to the event. The values of {@link
|
* @param loadEventInfo The {@link LoadEventInfo} corresponding to the event. The values of {@link
|
||||||
* LoadEventInfo#elapsedRealtimeMs} and {@link LoadEventInfo#bytesLoaded} are relative to the
|
* LoadEventInfo#elapsedRealtimeMs} and {@link LoadEventInfo#bytesLoaded} are relative to the
|
||||||
* corresponding {@link #onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}
|
* corresponding {@link #onLoadStarted} event.
|
||||||
* event.
|
|
||||||
* @param mediaLoadData The {@link MediaLoadData} defining the data being loaded.
|
* @param mediaLoadData The {@link MediaLoadData} defining the data being loaded.
|
||||||
*/
|
*/
|
||||||
default void onLoadCompleted(
|
default void onLoadCompleted(
|
||||||
@ -79,8 +81,7 @@ public interface MediaSourceEventListener {
|
|||||||
* belong to a specific media period.
|
* belong to a specific media period.
|
||||||
* @param loadEventInfo The {@link LoadEventInfo} corresponding to the event. The values of {@link
|
* @param loadEventInfo The {@link LoadEventInfo} corresponding to the event. The values of {@link
|
||||||
* LoadEventInfo#elapsedRealtimeMs} and {@link LoadEventInfo#bytesLoaded} are relative to the
|
* LoadEventInfo#elapsedRealtimeMs} and {@link LoadEventInfo#bytesLoaded} are relative to the
|
||||||
* corresponding {@link #onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}
|
* corresponding {@link #onLoadStarted} event.
|
||||||
* event.
|
|
||||||
* @param mediaLoadData The {@link MediaLoadData} defining the data being loaded.
|
* @param mediaLoadData The {@link MediaLoadData} defining the data being loaded.
|
||||||
*/
|
*/
|
||||||
default void onLoadCanceled(
|
default void onLoadCanceled(
|
||||||
@ -108,8 +109,7 @@ public interface MediaSourceEventListener {
|
|||||||
* belong to a specific media period.
|
* belong to a specific media period.
|
||||||
* @param loadEventInfo The {@link LoadEventInfo} corresponding to the event. The values of {@link
|
* @param loadEventInfo The {@link LoadEventInfo} corresponding to the event. The values of {@link
|
||||||
* LoadEventInfo#elapsedRealtimeMs} and {@link LoadEventInfo#bytesLoaded} are relative to the
|
* LoadEventInfo#elapsedRealtimeMs} and {@link LoadEventInfo#bytesLoaded} are relative to the
|
||||||
* corresponding {@link #onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}
|
* corresponding {@link #onLoadStarted} event.
|
||||||
* event.
|
|
||||||
* @param mediaLoadData The {@link MediaLoadData} defining the data being loaded.
|
* @param mediaLoadData The {@link MediaLoadData} defining the data being loaded.
|
||||||
* @param error The load error.
|
* @param error The load error.
|
||||||
* @param wasCanceled Whether the load was canceled as a result of the error.
|
* @param wasCanceled Whether the load was canceled as a result of the error.
|
||||||
@ -223,8 +223,17 @@ public interface MediaSourceEventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Dispatches {@link #onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}. */
|
/**
|
||||||
|
* @deprecated Use {link {@link #loadStarted(LoadEventInfo, int, int)} instead to pass {@code
|
||||||
|
* retryCount}.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public void loadStarted(LoadEventInfo loadEventInfo, @DataType int dataType) {
|
public void loadStarted(LoadEventInfo loadEventInfo, @DataType int dataType) {
|
||||||
|
loadStarted(loadEventInfo, dataType, /* retryCount= */ 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Dispatches {@link #onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData, int)}. */
|
||||||
|
public void loadStarted(LoadEventInfo loadEventInfo, @DataType int dataType, int retryCount) {
|
||||||
loadStarted(
|
loadStarted(
|
||||||
loadEventInfo,
|
loadEventInfo,
|
||||||
dataType,
|
dataType,
|
||||||
@ -233,10 +242,15 @@ public interface MediaSourceEventListener {
|
|||||||
/* trackSelectionReason= */ C.SELECTION_REASON_UNKNOWN,
|
/* trackSelectionReason= */ C.SELECTION_REASON_UNKNOWN,
|
||||||
/* trackSelectionData= */ null,
|
/* trackSelectionData= */ null,
|
||||||
/* mediaStartTimeUs= */ C.TIME_UNSET,
|
/* mediaStartTimeUs= */ C.TIME_UNSET,
|
||||||
/* mediaEndTimeUs= */ C.TIME_UNSET);
|
/* mediaEndTimeUs= */ C.TIME_UNSET,
|
||||||
|
retryCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Dispatches {@link #onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}. */
|
/**
|
||||||
|
* @deprecated Use {link {@link #loadStarted(LoadEventInfo, int, int, Format, int, Object, long,
|
||||||
|
* long, int)} )} instead to pass {@code retryCount}.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public void loadStarted(
|
public void loadStarted(
|
||||||
LoadEventInfo loadEventInfo,
|
LoadEventInfo loadEventInfo,
|
||||||
@DataType int dataType,
|
@DataType int dataType,
|
||||||
@ -258,11 +272,46 @@ public interface MediaSourceEventListener {
|
|||||||
usToMs(mediaEndTimeUs)));
|
usToMs(mediaEndTimeUs)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Dispatches {@link #onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}. */
|
/** Dispatches {@link #onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData, int)}. */
|
||||||
|
public void loadStarted(
|
||||||
|
LoadEventInfo loadEventInfo,
|
||||||
|
@DataType int dataType,
|
||||||
|
@C.TrackType int trackType,
|
||||||
|
@Nullable Format trackFormat,
|
||||||
|
@C.SelectionReason int trackSelectionReason,
|
||||||
|
@Nullable Object trackSelectionData,
|
||||||
|
long mediaStartTimeUs,
|
||||||
|
long mediaEndTimeUs,
|
||||||
|
int retryCount) {
|
||||||
|
loadStarted(
|
||||||
|
loadEventInfo,
|
||||||
|
new MediaLoadData(
|
||||||
|
dataType,
|
||||||
|
trackType,
|
||||||
|
trackFormat,
|
||||||
|
trackSelectionReason,
|
||||||
|
trackSelectionData,
|
||||||
|
usToMs(mediaStartTimeUs),
|
||||||
|
usToMs(mediaEndTimeUs)),
|
||||||
|
retryCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {link {@link #loadStarted(LoadEventInfo, MediaLoadData, int)} instead to pass
|
||||||
|
* {@code retryCount}.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public void loadStarted(LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {
|
public void loadStarted(LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {
|
||||||
|
loadStarted(loadEventInfo, mediaLoadData, /* retryCount= */ 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Dispatches {@link #onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData, int)}. */
|
||||||
|
public void loadStarted(
|
||||||
|
LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData, int retryCount) {
|
||||||
dispatchEvent(
|
dispatchEvent(
|
||||||
(listener) ->
|
(listener) ->
|
||||||
listener.onLoadStarted(windowIndex, mediaPeriodId, loadEventInfo, mediaLoadData));
|
listener.onLoadStarted(
|
||||||
|
windowIndex, mediaPeriodId, loadEventInfo, mediaLoadData, retryCount));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Dispatches {@link #onLoadCompleted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}. */
|
/** Dispatches {@link #onLoadCompleted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}. */
|
||||||
|
@ -597,6 +597,31 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
|
|
||||||
// Loader.Callback implementation.
|
// Loader.Callback implementation.
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(
|
||||||
|
ExtractingLoadable loadable, long elapsedRealtimeMs, long loadDurationMs, int retryCount) {
|
||||||
|
StatsDataSource dataSource = loadable.dataSource;
|
||||||
|
LoadEventInfo loadEventInfo =
|
||||||
|
new LoadEventInfo(
|
||||||
|
loadable.loadTaskId,
|
||||||
|
loadable.dataSpec,
|
||||||
|
dataSource.getLastOpenedUri(),
|
||||||
|
dataSource.getLastResponseHeaders(),
|
||||||
|
elapsedRealtimeMs,
|
||||||
|
loadDurationMs,
|
||||||
|
dataSource.getBytesRead());
|
||||||
|
mediaSourceEventDispatcher.loadStarted(
|
||||||
|
loadEventInfo,
|
||||||
|
C.DATA_TYPE_MEDIA,
|
||||||
|
C.TRACK_TYPE_UNKNOWN,
|
||||||
|
/* trackFormat= */ null,
|
||||||
|
C.SELECTION_REASON_UNKNOWN,
|
||||||
|
/* trackSelectionData= */ null,
|
||||||
|
/* mediaStartTimeUs= */ loadable.seekTimeUs,
|
||||||
|
durationUs,
|
||||||
|
retryCount);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(
|
public void onLoadCompleted(
|
||||||
ExtractingLoadable loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
ExtractingLoadable loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
@ -881,19 +906,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
pendingResetPositionUs = C.TIME_UNSET;
|
pendingResetPositionUs = C.TIME_UNSET;
|
||||||
}
|
}
|
||||||
extractedSamplesCountAtStartOfLoad = getExtractedSamplesCount();
|
extractedSamplesCountAtStartOfLoad = getExtractedSamplesCount();
|
||||||
long elapsedRealtimeMs =
|
|
||||||
loader.startLoading(
|
loader.startLoading(
|
||||||
loadable, this, loadErrorHandlingPolicy.getMinimumLoadableRetryCount(dataType));
|
loadable, this, loadErrorHandlingPolicy.getMinimumLoadableRetryCount(dataType));
|
||||||
DataSpec dataSpec = loadable.dataSpec;
|
|
||||||
mediaSourceEventDispatcher.loadStarted(
|
|
||||||
new LoadEventInfo(loadable.loadTaskId, dataSpec, elapsedRealtimeMs),
|
|
||||||
C.DATA_TYPE_MEDIA,
|
|
||||||
C.TRACK_TYPE_UNKNOWN,
|
|
||||||
/* trackFormat= */ null,
|
|
||||||
C.SELECTION_REASON_UNKNOWN,
|
|
||||||
/* trackSelectionData= */ null,
|
|
||||||
/* mediaStartTimeUs= */ loadable.seekTimeUs,
|
|
||||||
durationUs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -155,20 +155,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
dataSource.addTransferListener(transferListener);
|
dataSource.addTransferListener(transferListener);
|
||||||
}
|
}
|
||||||
SourceLoadable loadable = new SourceLoadable(dataSpec, dataSource);
|
SourceLoadable loadable = new SourceLoadable(dataSpec, dataSource);
|
||||||
long elapsedRealtimeMs =
|
|
||||||
loader.startLoading(
|
loader.startLoading(
|
||||||
loadable,
|
loadable,
|
||||||
/* callback= */ this,
|
/* callback= */ this,
|
||||||
loadErrorHandlingPolicy.getMinimumLoadableRetryCount(C.DATA_TYPE_MEDIA));
|
loadErrorHandlingPolicy.getMinimumLoadableRetryCount(C.DATA_TYPE_MEDIA));
|
||||||
eventDispatcher.loadStarted(
|
|
||||||
new LoadEventInfo(loadable.loadTaskId, dataSpec, elapsedRealtimeMs),
|
|
||||||
C.DATA_TYPE_MEDIA,
|
|
||||||
C.TRACK_TYPE_UNKNOWN,
|
|
||||||
format,
|
|
||||||
C.SELECTION_REASON_UNKNOWN,
|
|
||||||
/* trackSelectionData= */ null,
|
|
||||||
/* mediaStartTimeUs= */ 0,
|
|
||||||
durationUs);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,6 +197,31 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
|
|
||||||
// Loader.Callback implementation.
|
// Loader.Callback implementation.
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(
|
||||||
|
SourceLoadable loadable, long elapsedRealtimeMs, long loadDurationMs, int retryCount) {
|
||||||
|
StatsDataSource dataSource = loadable.dataSource;
|
||||||
|
LoadEventInfo loadEventInfo =
|
||||||
|
new LoadEventInfo(
|
||||||
|
loadable.loadTaskId,
|
||||||
|
loadable.dataSpec,
|
||||||
|
dataSource.getLastOpenedUri(),
|
||||||
|
dataSource.getLastResponseHeaders(),
|
||||||
|
elapsedRealtimeMs,
|
||||||
|
loadDurationMs,
|
||||||
|
dataSource.getBytesRead());
|
||||||
|
eventDispatcher.loadStarted(
|
||||||
|
loadEventInfo,
|
||||||
|
C.DATA_TYPE_MEDIA,
|
||||||
|
C.TRACK_TYPE_UNKNOWN,
|
||||||
|
format,
|
||||||
|
C.SELECTION_REASON_UNKNOWN,
|
||||||
|
/* trackSelectionData= */ null,
|
||||||
|
/* mediaStartTimeUs= */ 0,
|
||||||
|
durationUs,
|
||||||
|
retryCount);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(
|
public void onLoadCompleted(
|
||||||
SourceLoadable loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
SourceLoadable loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
|
@ -427,12 +427,16 @@ public final class ServerSideAdInsertionMediaSource extends BaseMediaSource
|
|||||||
int windowIndex,
|
int windowIndex,
|
||||||
@Nullable MediaPeriodId mediaPeriodId,
|
@Nullable MediaPeriodId mediaPeriodId,
|
||||||
LoadEventInfo loadEventInfo,
|
LoadEventInfo loadEventInfo,
|
||||||
MediaLoadData mediaLoadData) {
|
MediaLoadData mediaLoadData,
|
||||||
|
int retryCount) {
|
||||||
|
// TODO: b/375408535 - Update this to support non-zero retry counts.
|
||||||
|
if (retryCount == 0) {
|
||||||
@Nullable
|
@Nullable
|
||||||
MediaPeriodImpl mediaPeriod =
|
MediaPeriodImpl mediaPeriod =
|
||||||
getMediaPeriodForEvent(mediaPeriodId, mediaLoadData, /* useLoadingPeriod= */ true);
|
getMediaPeriodForEvent(mediaPeriodId, mediaLoadData, /* useLoadingPeriod= */ true);
|
||||||
if (mediaPeriod == null) {
|
if (mediaPeriod == null) {
|
||||||
mediaSourceEventDispatcherWithoutId.loadStarted(loadEventInfo, mediaLoadData);
|
mediaSourceEventDispatcherWithoutId.loadStarted(
|
||||||
|
loadEventInfo, mediaLoadData, /* retryCount= */ 0);
|
||||||
} else {
|
} else {
|
||||||
mediaPeriod.sharedPeriod.onLoadStarted(loadEventInfo, mediaLoadData);
|
mediaPeriod.sharedPeriod.onLoadStarted(loadEventInfo, mediaLoadData);
|
||||||
mediaPeriod.mediaSourceEventDispatcher.loadStarted(
|
mediaPeriod.mediaSourceEventDispatcher.loadStarted(
|
||||||
@ -440,7 +444,9 @@ public final class ServerSideAdInsertionMediaSource extends BaseMediaSource
|
|||||||
correctMediaLoadData(
|
correctMediaLoadData(
|
||||||
mediaPeriod,
|
mediaPeriod,
|
||||||
mediaLoadData,
|
mediaLoadData,
|
||||||
checkNotNull(adPlaybackStates.get(mediaPeriod.mediaPeriodId.periodUid))));
|
checkNotNull(adPlaybackStates.get(mediaPeriod.mediaPeriodId.periodUid))),
|
||||||
|
/* retryCount= */ 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -750,7 +756,9 @@ public final class ServerSideAdInsertionMediaSource extends BaseMediaSource
|
|||||||
loadData.first,
|
loadData.first,
|
||||||
correctMediaLoadData(loadingPeriod, loadData.second, adPlaybackState));
|
correctMediaLoadData(loadingPeriod, loadData.second, adPlaybackState));
|
||||||
mediaPeriod.mediaSourceEventDispatcher.loadStarted(
|
mediaPeriod.mediaSourceEventDispatcher.loadStarted(
|
||||||
loadData.first, correctMediaLoadData(mediaPeriod, loadData.second, adPlaybackState));
|
loadData.first,
|
||||||
|
correctMediaLoadData(mediaPeriod, loadData.second, adPlaybackState),
|
||||||
|
/* retryCount= */ 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.loadingPeriod = mediaPeriod;
|
this.loadingPeriod = mediaPeriod;
|
||||||
|
@ -429,6 +429,28 @@ public class ChunkSampleStream<T extends ChunkSource>
|
|||||||
|
|
||||||
// Loader.Callback implementation.
|
// Loader.Callback implementation.
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(
|
||||||
|
Chunk loadable, long elapsedRealtimeMs, long loadDurationMs, int retryCount) {
|
||||||
|
mediaSourceEventDispatcher.loadStarted(
|
||||||
|
new LoadEventInfo(
|
||||||
|
loadable.loadTaskId,
|
||||||
|
loadable.dataSpec,
|
||||||
|
loadable.getUri(),
|
||||||
|
loadable.getResponseHeaders(),
|
||||||
|
elapsedRealtimeMs,
|
||||||
|
loadDurationMs,
|
||||||
|
loadable.dataSource.getBytesRead()),
|
||||||
|
loadable.type,
|
||||||
|
primaryTrackType,
|
||||||
|
loadable.trackFormat,
|
||||||
|
loadable.trackSelectionReason,
|
||||||
|
loadable.trackSelectionData,
|
||||||
|
loadable.startTimeUs,
|
||||||
|
loadable.endTimeUs,
|
||||||
|
retryCount);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(Chunk loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
public void onLoadCompleted(Chunk loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
loadingChunk = null;
|
loadingChunk = null;
|
||||||
@ -636,18 +658,8 @@ public class ChunkSampleStream<T extends ChunkSource>
|
|||||||
} else if (loadable instanceof InitializationChunk) {
|
} else if (loadable instanceof InitializationChunk) {
|
||||||
((InitializationChunk) loadable).init(chunkOutput);
|
((InitializationChunk) loadable).init(chunkOutput);
|
||||||
}
|
}
|
||||||
long elapsedRealtimeMs =
|
|
||||||
loader.startLoading(
|
loader.startLoading(
|
||||||
loadable, this, loadErrorHandlingPolicy.getMinimumLoadableRetryCount(loadable.type));
|
loadable, this, loadErrorHandlingPolicy.getMinimumLoadableRetryCount(loadable.type));
|
||||||
mediaSourceEventDispatcher.loadStarted(
|
|
||||||
new LoadEventInfo(loadable.loadTaskId, loadable.dataSpec, elapsedRealtimeMs),
|
|
||||||
loadable.type,
|
|
||||||
primaryTrackType,
|
|
||||||
loadable.trackFormat,
|
|
||||||
loadable.trackSelectionReason,
|
|
||||||
loadable.trackSelectionData,
|
|
||||||
loadable.startTimeUs,
|
|
||||||
loadable.endTimeUs);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,8 +146,9 @@ import org.mockito.InOrder;
|
|||||||
public final class DefaultAnalyticsCollectorTest {
|
public final class DefaultAnalyticsCollectorTest {
|
||||||
|
|
||||||
// Deprecated event constants.
|
// Deprecated event constants.
|
||||||
private static final long EVENT_PLAYER_STATE_CHANGED = 1L << 63;
|
private static final long EVENT_PLAYER_STATE_CHANGED = Long.MIN_VALUE;
|
||||||
private static final long EVENT_SEEK_STARTED = 1L << 62;
|
private static final long EVENT_SEEK_STARTED = Long.MIN_VALUE + 1;
|
||||||
|
private static final long DEPRECATED_EVENT_LOAD_STARTED = Long.MIN_VALUE + 2;
|
||||||
|
|
||||||
private static final UUID DRM_SCHEME_UUID =
|
private static final UUID DRM_SCHEME_UUID =
|
||||||
UUID.nameUUIDFromBytes(TestUtil.createByteArray(7, 8, 9));
|
UUID.nameUUIDFromBytes(TestUtil.createByteArray(7, 8, 9));
|
||||||
@ -264,6 +265,9 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
assertThat(listener.getEvents(EVENT_LOAD_STARTED))
|
assertThat(listener.getEvents(EVENT_LOAD_STARTED))
|
||||||
.containsExactly(WINDOW_0 /* manifest */, period0 /* media */)
|
.containsExactly(WINDOW_0 /* manifest */, period0 /* media */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
|
assertThat(listener.getEvents(DEPRECATED_EVENT_LOAD_STARTED))
|
||||||
|
.containsExactly(WINDOW_0 /* manifest */, period0 /* media */)
|
||||||
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
||||||
.containsExactly(WINDOW_0 /* manifest */, period0 /* media */)
|
.containsExactly(WINDOW_0 /* manifest */, period0 /* media */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
@ -333,6 +337,13 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
period0 /* media */,
|
period0 /* media */,
|
||||||
period1 /* media */)
|
period1 /* media */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
|
assertThat(listener.getEvents(DEPRECATED_EVENT_LOAD_STARTED))
|
||||||
|
.containsExactly(
|
||||||
|
WINDOW_0 /* manifest */,
|
||||||
|
WINDOW_1 /* manifest */,
|
||||||
|
period0 /* media */,
|
||||||
|
period1 /* media */)
|
||||||
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
WINDOW_0 /* manifest */,
|
WINDOW_0 /* manifest */,
|
||||||
@ -411,6 +422,13 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
period0 /* media */,
|
period0 /* media */,
|
||||||
period1 /* media */)
|
period1 /* media */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
|
assertThat(listener.getEvents(DEPRECATED_EVENT_LOAD_STARTED))
|
||||||
|
.containsExactly(
|
||||||
|
WINDOW_0 /* manifest */,
|
||||||
|
WINDOW_1 /* manifest */,
|
||||||
|
period0 /* media */,
|
||||||
|
period1 /* media */)
|
||||||
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
WINDOW_0 /* manifest */,
|
WINDOW_0 /* manifest */,
|
||||||
@ -493,6 +511,13 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
period0 /* media */,
|
period0 /* media */,
|
||||||
period1 /* media */)
|
period1 /* media */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
|
assertThat(listener.getEvents(DEPRECATED_EVENT_LOAD_STARTED))
|
||||||
|
.containsExactly(
|
||||||
|
WINDOW_0 /* manifest */,
|
||||||
|
WINDOW_1 /* manifest */,
|
||||||
|
period0 /* media */,
|
||||||
|
period1 /* media */)
|
||||||
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
WINDOW_0 /* manifest */,
|
WINDOW_0 /* manifest */,
|
||||||
@ -590,6 +615,14 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
period1Seq1 /* media */,
|
period1Seq1 /* media */,
|
||||||
period1Seq2 /* media */)
|
period1Seq2 /* media */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
|
assertThat(listener.getEvents(DEPRECATED_EVENT_LOAD_STARTED))
|
||||||
|
.containsExactly(
|
||||||
|
WINDOW_0 /* manifest */,
|
||||||
|
WINDOW_1 /* manifest */,
|
||||||
|
period0 /* media */,
|
||||||
|
period1Seq1 /* media */,
|
||||||
|
period1Seq2 /* media */)
|
||||||
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
WINDOW_0 /* manifest */,
|
WINDOW_0 /* manifest */,
|
||||||
@ -709,6 +742,13 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
WINDOW_0 /* manifest */,
|
WINDOW_0 /* manifest */,
|
||||||
period0Seq1 /* media */)
|
period0Seq1 /* media */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
|
assertThat(listener.getEvents(DEPRECATED_EVENT_LOAD_STARTED))
|
||||||
|
.containsExactly(
|
||||||
|
WINDOW_0 /* manifest */,
|
||||||
|
period0Seq0 /* media */,
|
||||||
|
WINDOW_0 /* manifest */,
|
||||||
|
period0Seq1 /* media */)
|
||||||
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
WINDOW_0 /* manifest */,
|
WINDOW_0 /* manifest */,
|
||||||
@ -803,6 +843,13 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
WINDOW_0 /* manifest */,
|
WINDOW_0 /* manifest */,
|
||||||
period0Seq0 /* media */)
|
period0Seq0 /* media */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
|
assertThat(listener.getEvents(DEPRECATED_EVENT_LOAD_STARTED))
|
||||||
|
.containsExactly(
|
||||||
|
WINDOW_0 /* manifest */,
|
||||||
|
period0Seq0 /* media */,
|
||||||
|
WINDOW_0 /* manifest */,
|
||||||
|
period0Seq0 /* media */)
|
||||||
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
WINDOW_0 /* manifest */,
|
WINDOW_0 /* manifest */,
|
||||||
@ -875,6 +922,10 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
.containsExactly(
|
.containsExactly(
|
||||||
WINDOW_0 /* manifest */, window0Period1Seq0 /* media */, window1Period0Seq1 /* media */)
|
WINDOW_0 /* manifest */, window0Period1Seq0 /* media */, window1Period0Seq1 /* media */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
|
assertThat(listener.getEvents(DEPRECATED_EVENT_LOAD_STARTED))
|
||||||
|
.containsExactly(
|
||||||
|
WINDOW_0 /* manifest */, window0Period1Seq0 /* media */, window1Period0Seq1 /* media */)
|
||||||
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
WINDOW_0 /* manifest */, window0Period1Seq0 /* media */, window1Period0Seq1 /* media */)
|
WINDOW_0 /* manifest */, window0Period1Seq0 /* media */, window1Period0Seq1 /* media */)
|
||||||
@ -973,6 +1024,9 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
assertThat(listener.getEvents(EVENT_LOAD_STARTED))
|
assertThat(listener.getEvents(EVENT_LOAD_STARTED))
|
||||||
.containsExactly(WINDOW_0 /* manifest */, period0Seq0 /* media */, period1Seq1 /* media */)
|
.containsExactly(WINDOW_0 /* manifest */, period0Seq0 /* media */, period1Seq1 /* media */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
|
assertThat(listener.getEvents(DEPRECATED_EVENT_LOAD_STARTED))
|
||||||
|
.containsExactly(WINDOW_0 /* manifest */, period0Seq0 /* media */, period1Seq1 /* media */)
|
||||||
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
||||||
.containsExactly(WINDOW_0 /* manifest */, period0Seq0 /* media */, period1Seq1 /* media */)
|
.containsExactly(WINDOW_0 /* manifest */, period0Seq0 /* media */, period1Seq1 /* media */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
@ -1178,6 +1232,16 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
postrollAd,
|
postrollAd,
|
||||||
contentAfterPostroll)
|
contentAfterPostroll)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
|
assertThat(listener.getEvents(DEPRECATED_EVENT_LOAD_STARTED))
|
||||||
|
.containsExactly(
|
||||||
|
WINDOW_0 /* content manifest */,
|
||||||
|
prerollAd,
|
||||||
|
contentAfterPreroll,
|
||||||
|
midrollAd,
|
||||||
|
contentAfterMidroll,
|
||||||
|
postrollAd,
|
||||||
|
contentAfterPostroll)
|
||||||
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
WINDOW_0 /* content manifest */,
|
WINDOW_0 /* content manifest */,
|
||||||
@ -1337,6 +1401,14 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
contentAfterMidroll,
|
contentAfterMidroll,
|
||||||
contentAfterMidroll)
|
contentAfterMidroll)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
|
assertThat(listener.getEvents(DEPRECATED_EVENT_LOAD_STARTED))
|
||||||
|
.containsExactly(
|
||||||
|
WINDOW_0 /* content manifest */,
|
||||||
|
contentBeforeMidroll,
|
||||||
|
midrollAd,
|
||||||
|
contentAfterMidroll,
|
||||||
|
contentAfterMidroll)
|
||||||
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
assertThat(listener.getEvents(EVENT_LOAD_COMPLETED))
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
WINDOW_0 /* content manifest */,
|
WINDOW_0 /* content manifest */,
|
||||||
@ -1715,7 +1787,7 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
ArgumentCaptor<AnalyticsListener.EventTime> individualLoadStartedEventTimes =
|
ArgumentCaptor<AnalyticsListener.EventTime> individualLoadStartedEventTimes =
|
||||||
ArgumentCaptor.forClass(AnalyticsListener.EventTime.class);
|
ArgumentCaptor.forClass(AnalyticsListener.EventTime.class);
|
||||||
verify(listener, atLeastOnce())
|
verify(listener, atLeastOnce())
|
||||||
.onLoadStarted(individualLoadStartedEventTimes.capture(), any(), any());
|
.onLoadStarted(individualLoadStartedEventTimes.capture(), any(), any(), anyInt());
|
||||||
ArgumentCaptor<AnalyticsListener.EventTime> individualLoadCompletedEventTimes =
|
ArgumentCaptor<AnalyticsListener.EventTime> individualLoadCompletedEventTimes =
|
||||||
ArgumentCaptor.forClass(AnalyticsListener.EventTime.class);
|
ArgumentCaptor.forClass(AnalyticsListener.EventTime.class);
|
||||||
verify(listener, atLeastOnce())
|
verify(listener, atLeastOnce())
|
||||||
@ -2196,6 +2268,15 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
@Override
|
@Override
|
||||||
public void onLoadStarted(
|
public void onLoadStarted(
|
||||||
EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {
|
EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {
|
||||||
|
reportedEvents.add(new ReportedEvent(DEPRECATED_EVENT_LOAD_STARTED, eventTime));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(
|
||||||
|
EventTime eventTime,
|
||||||
|
LoadEventInfo loadEventInfo,
|
||||||
|
MediaLoadData mediaLoadData,
|
||||||
|
int retryCount) {
|
||||||
reportedEvents.add(new ReportedEvent(EVENT_LOAD_STARTED, eventTime));
|
reportedEvents.add(new ReportedEvent(EVENT_LOAD_STARTED, eventTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUnti
|
|||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static java.lang.Math.max;
|
import static java.lang.Math.max;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.atLeast;
|
import static org.mockito.Mockito.atLeast;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
@ -625,7 +626,8 @@ public final class ConcatenatingMediaSource2Test {
|
|||||||
/* windowIndex= */ eq(0),
|
/* windowIndex= */ eq(0),
|
||||||
/* mediaPeriodId= */ eq(mediaPeriodId),
|
/* mediaPeriodId= */ eq(mediaPeriodId),
|
||||||
/* loadEventInfo= */ any(),
|
/* loadEventInfo= */ any(),
|
||||||
/* mediaLoadData= */ any());
|
/* mediaLoadData= */ any(),
|
||||||
|
/* retryCount */ anyInt());
|
||||||
verify(eventListener)
|
verify(eventListener)
|
||||||
.onLoadCompleted(
|
.onLoadCompleted(
|
||||||
/* windowIndex= */ eq(0),
|
/* windowIndex= */ eq(0),
|
||||||
|
@ -139,7 +139,8 @@ public class MergingMediaSourceTest {
|
|||||||
int windowIndex,
|
int windowIndex,
|
||||||
@Nullable MediaPeriodId mediaPeriodId,
|
@Nullable MediaPeriodId mediaPeriodId,
|
||||||
LoadEventInfo loadEventInfo,
|
LoadEventInfo loadEventInfo,
|
||||||
MediaLoadData mediaLoadData) {
|
MediaLoadData mediaLoadData,
|
||||||
|
int retryCount) {
|
||||||
if (mediaPeriodId != null) {
|
if (mediaPeriodId != null) {
|
||||||
onLoadStartedMediaPeriodUids.add(mediaPeriodId.periodUid);
|
onLoadStartedMediaPeriodUids.add(mediaPeriodId.periodUid);
|
||||||
}
|
}
|
||||||
|
@ -629,6 +629,24 @@ public final class DashMediaSource extends BaseMediaSource {
|
|||||||
|
|
||||||
// Loadable callbacks.
|
// Loadable callbacks.
|
||||||
|
|
||||||
|
/* package */ void onManifestLoadStarted(
|
||||||
|
ParsingLoadable<DashManifest> loadable,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
|
int retryCount) {
|
||||||
|
manifestEventDispatcher.loadStarted(
|
||||||
|
new LoadEventInfo(
|
||||||
|
loadable.loadTaskId,
|
||||||
|
loadable.dataSpec,
|
||||||
|
loadable.getUri(),
|
||||||
|
loadable.getResponseHeaders(),
|
||||||
|
elapsedRealtimeMs,
|
||||||
|
loadDurationMs,
|
||||||
|
loadable.bytesLoaded()),
|
||||||
|
loadable.type,
|
||||||
|
retryCount);
|
||||||
|
}
|
||||||
|
|
||||||
/* package */ void onManifestLoadCompleted(
|
/* package */ void onManifestLoadCompleted(
|
||||||
ParsingLoadable<DashManifest> loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
ParsingLoadable<DashManifest> loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
LoadEventInfo loadEventInfo =
|
LoadEventInfo loadEventInfo =
|
||||||
@ -1094,10 +1112,7 @@ public final class DashMediaSource extends BaseMediaSource {
|
|||||||
ParsingLoadable<T> loadable,
|
ParsingLoadable<T> loadable,
|
||||||
Loader.Callback<ParsingLoadable<T>> callback,
|
Loader.Callback<ParsingLoadable<T>> callback,
|
||||||
int minRetryCount) {
|
int minRetryCount) {
|
||||||
long elapsedRealtimeMs = loader.startLoading(loadable, callback, minRetryCount);
|
loader.startLoading(loadable, callback, minRetryCount);
|
||||||
manifestEventDispatcher.loadStarted(
|
|
||||||
new LoadEventInfo(loadable.loadTaskId, loadable.dataSpec, elapsedRealtimeMs),
|
|
||||||
loadable.type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static long getIntervalUntilNextManifestRefreshMs(
|
private static long getIntervalUntilNextManifestRefreshMs(
|
||||||
@ -1389,6 +1404,15 @@ 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
|
||||||
|
public void onLoadStarted(
|
||||||
|
ParsingLoadable<DashManifest> loadable,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
|
int retryCount) {
|
||||||
|
onManifestLoadStarted(loadable, elapsedRealtimeMs, loadDurationMs, retryCount);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(
|
public void onLoadCompleted(
|
||||||
ParsingLoadable<DashManifest> loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
ParsingLoadable<DashManifest> loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
|
@ -808,18 +808,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||||||
initMediaChunkLoad((HlsMediaChunk) loadable);
|
initMediaChunkLoad((HlsMediaChunk) loadable);
|
||||||
}
|
}
|
||||||
loadingChunk = loadable;
|
loadingChunk = loadable;
|
||||||
long elapsedRealtimeMs =
|
|
||||||
loader.startLoading(
|
loader.startLoading(
|
||||||
loadable, this, loadErrorHandlingPolicy.getMinimumLoadableRetryCount(loadable.type));
|
loadable, this, loadErrorHandlingPolicy.getMinimumLoadableRetryCount(loadable.type));
|
||||||
mediaSourceEventDispatcher.loadStarted(
|
|
||||||
new LoadEventInfo(loadable.loadTaskId, loadable.dataSpec, elapsedRealtimeMs),
|
|
||||||
loadable.type,
|
|
||||||
trackType,
|
|
||||||
loadable.trackFormat,
|
|
||||||
loadable.trackSelectionReason,
|
|
||||||
loadable.trackSelectionData,
|
|
||||||
loadable.startTimeUs,
|
|
||||||
loadable.endTimeUs);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -860,6 +850,28 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||||||
|
|
||||||
// Loader.Callback implementation.
|
// Loader.Callback implementation.
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(
|
||||||
|
Chunk loadable, long elapsedRealtimeMs, long loadDurationMs, int retryCount) {
|
||||||
|
mediaSourceEventDispatcher.loadStarted(
|
||||||
|
new LoadEventInfo(
|
||||||
|
loadable.loadTaskId,
|
||||||
|
loadable.dataSpec,
|
||||||
|
loadable.getUri(),
|
||||||
|
loadable.getResponseHeaders(),
|
||||||
|
elapsedRealtimeMs,
|
||||||
|
loadDurationMs,
|
||||||
|
loadable.bytesLoaded()),
|
||||||
|
loadable.type,
|
||||||
|
trackType,
|
||||||
|
loadable.trackFormat,
|
||||||
|
loadable.trackSelectionReason,
|
||||||
|
loadable.trackSelectionData,
|
||||||
|
loadable.startTimeUs,
|
||||||
|
loadable.endTimeUs,
|
||||||
|
retryCount);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(Chunk loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
public void onLoadCompleted(Chunk loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
loadingChunk = null;
|
loadingChunk = null;
|
||||||
|
@ -141,18 +141,10 @@ public final class DefaultHlsPlaylistTracker
|
|||||||
playlistParserFactory.createPlaylistParser());
|
playlistParserFactory.createPlaylistParser());
|
||||||
Assertions.checkState(initialPlaylistLoader == null);
|
Assertions.checkState(initialPlaylistLoader == null);
|
||||||
initialPlaylistLoader = new Loader("DefaultHlsPlaylistTracker:MultivariantPlaylist");
|
initialPlaylistLoader = new Loader("DefaultHlsPlaylistTracker:MultivariantPlaylist");
|
||||||
long elapsedRealtime =
|
|
||||||
initialPlaylistLoader.startLoading(
|
initialPlaylistLoader.startLoading(
|
||||||
multivariantPlaylistLoadable,
|
multivariantPlaylistLoadable,
|
||||||
this,
|
this,
|
||||||
loadErrorHandlingPolicy.getMinimumLoadableRetryCount(
|
loadErrorHandlingPolicy.getMinimumLoadableRetryCount(multivariantPlaylistLoadable.type));
|
||||||
multivariantPlaylistLoadable.type));
|
|
||||||
eventDispatcher.loadStarted(
|
|
||||||
new LoadEventInfo(
|
|
||||||
multivariantPlaylistLoadable.loadTaskId,
|
|
||||||
multivariantPlaylistLoadable.dataSpec,
|
|
||||||
elapsedRealtime),
|
|
||||||
multivariantPlaylistLoadable.type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -254,6 +246,25 @@ public final class DefaultHlsPlaylistTracker
|
|||||||
|
|
||||||
// Loader.Callback implementation.
|
// Loader.Callback implementation.
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(
|
||||||
|
ParsingLoadable<HlsPlaylist> loadable,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
|
int retryCount) {
|
||||||
|
eventDispatcher.loadStarted(
|
||||||
|
new LoadEventInfo(
|
||||||
|
loadable.loadTaskId,
|
||||||
|
loadable.dataSpec,
|
||||||
|
loadable.getUri(),
|
||||||
|
loadable.getResponseHeaders(),
|
||||||
|
elapsedRealtimeMs,
|
||||||
|
loadDurationMs,
|
||||||
|
loadable.bytesLoaded()),
|
||||||
|
loadable.type,
|
||||||
|
retryCount);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(
|
public void onLoadCompleted(
|
||||||
ParsingLoadable<HlsPlaylist> loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
ParsingLoadable<HlsPlaylist> loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
@ -736,15 +747,10 @@ public final class DefaultHlsPlaylistTracker
|
|||||||
playlistRequestUri,
|
playlistRequestUri,
|
||||||
C.DATA_TYPE_MANIFEST,
|
C.DATA_TYPE_MANIFEST,
|
||||||
mediaPlaylistParser);
|
mediaPlaylistParser);
|
||||||
long elapsedRealtime =
|
|
||||||
mediaPlaylistLoader.startLoading(
|
mediaPlaylistLoader.startLoading(
|
||||||
mediaPlaylistLoadable,
|
mediaPlaylistLoadable,
|
||||||
/* callback= */ this,
|
/* callback= */ this,
|
||||||
loadErrorHandlingPolicy.getMinimumLoadableRetryCount(mediaPlaylistLoadable.type));
|
loadErrorHandlingPolicy.getMinimumLoadableRetryCount(mediaPlaylistLoadable.type));
|
||||||
eventDispatcher.loadStarted(
|
|
||||||
new LoadEventInfo(
|
|
||||||
mediaPlaylistLoadable.loadTaskId, mediaPlaylistLoadable.dataSpec, elapsedRealtime),
|
|
||||||
mediaPlaylistLoadable.type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processLoadedPlaylist(
|
private void processLoadedPlaylist(
|
||||||
|
@ -497,6 +497,25 @@ public final class SsMediaSource extends BaseMediaSource
|
|||||||
|
|
||||||
// Loader.Callback implementation
|
// Loader.Callback implementation
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(
|
||||||
|
ParsingLoadable<SsManifest> loadable,
|
||||||
|
long elapsedRealtimeMs,
|
||||||
|
long loadDurationMs,
|
||||||
|
int retryCount) {
|
||||||
|
manifestEventDispatcher.loadStarted(
|
||||||
|
new LoadEventInfo(
|
||||||
|
loadable.loadTaskId,
|
||||||
|
loadable.dataSpec,
|
||||||
|
loadable.getUri(),
|
||||||
|
loadable.getResponseHeaders(),
|
||||||
|
elapsedRealtimeMs,
|
||||||
|
loadDurationMs,
|
||||||
|
loadable.bytesLoaded()),
|
||||||
|
loadable.type,
|
||||||
|
retryCount);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(
|
public void onLoadCompleted(
|
||||||
ParsingLoadable<SsManifest> loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
ParsingLoadable<SsManifest> loadable, long elapsedRealtimeMs, long loadDurationMs) {
|
||||||
@ -659,11 +678,7 @@ public final class SsMediaSource extends BaseMediaSource
|
|||||||
ParsingLoadable<SsManifest> loadable =
|
ParsingLoadable<SsManifest> loadable =
|
||||||
new ParsingLoadable<>(
|
new ParsingLoadable<>(
|
||||||
manifestDataSource, manifestUri, C.DATA_TYPE_MANIFEST, manifestParser);
|
manifestDataSource, manifestUri, C.DATA_TYPE_MANIFEST, manifestParser);
|
||||||
long elapsedRealtimeMs =
|
|
||||||
manifestLoader.startLoading(
|
manifestLoader.startLoading(
|
||||||
loadable, this, loadErrorHandlingPolicy.getMinimumLoadableRetryCount(loadable.type));
|
loadable, this, loadErrorHandlingPolicy.getMinimumLoadableRetryCount(loadable.type));
|
||||||
manifestEventDispatcher.loadStarted(
|
|
||||||
new LoadEventInfo(loadable.loadTaskId, loadable.dataSpec, elapsedRealtimeMs),
|
|
||||||
loadable.type);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,8 @@ public class FakeAdaptiveMediaPeriod
|
|||||||
C.SELECTION_REASON_UNKNOWN,
|
C.SELECTION_REASON_UNKNOWN,
|
||||||
/* trackSelectionData= */ null,
|
/* trackSelectionData= */ null,
|
||||||
/* mediaStartTimeUs= */ 0,
|
/* mediaStartTimeUs= */ 0,
|
||||||
/* mediaEndTimeUs= */ C.TIME_UNSET);
|
/* mediaEndTimeUs= */ C.TIME_UNSET,
|
||||||
|
/* retryCount= */ 0);
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
prepared = true;
|
prepared = true;
|
||||||
Util.castNonNull(this.callback).onPrepared(this);
|
Util.castNonNull(this.callback).onPrepared(this);
|
||||||
|
@ -235,7 +235,8 @@ public class FakeMediaPeriod implements MediaPeriod {
|
|||||||
C.SELECTION_REASON_UNKNOWN,
|
C.SELECTION_REASON_UNKNOWN,
|
||||||
/* trackSelectionData= */ null,
|
/* trackSelectionData= */ null,
|
||||||
/* mediaStartTimeUs= */ 0,
|
/* mediaStartTimeUs= */ 0,
|
||||||
/* mediaEndTimeUs= */ C.TIME_UNSET);
|
/* mediaEndTimeUs= */ C.TIME_UNSET,
|
||||||
|
/* retryCount= */ 0);
|
||||||
prepareCallback = callback;
|
prepareCallback = callback;
|
||||||
if (deferOnPrepared) {
|
if (deferOnPrepared) {
|
||||||
playerHandler = Util.createHandlerForCurrentLooper();
|
playerHandler = Util.createHandlerForCurrentLooper();
|
||||||
|
@ -455,7 +455,8 @@ public class FakeMediaSource extends BaseMediaSource {
|
|||||||
elapsedRealTimeMs,
|
elapsedRealTimeMs,
|
||||||
/* loadDurationMs= */ 0,
|
/* loadDurationMs= */ 0,
|
||||||
/* bytesLoaded= */ 0),
|
/* bytesLoaded= */ 0),
|
||||||
mediaLoadData);
|
mediaLoadData,
|
||||||
|
/* retryCount= */ 0);
|
||||||
eventDispatcher.loadCompleted(
|
eventDispatcher.loadCompleted(
|
||||||
new LoadEventInfo(
|
new LoadEventInfo(
|
||||||
loadTaskId,
|
loadTaskId,
|
||||||
|
@ -364,7 +364,8 @@ public class MediaSourceTestRunner {
|
|||||||
int windowIndex,
|
int windowIndex,
|
||||||
@Nullable MediaPeriodId mediaPeriodId,
|
@Nullable MediaPeriodId mediaPeriodId,
|
||||||
LoadEventInfo loadEventInfo,
|
LoadEventInfo loadEventInfo,
|
||||||
MediaLoadData mediaLoadData) {
|
MediaLoadData mediaLoadData,
|
||||||
|
int retryCount) {
|
||||||
Assertions.checkState(Looper.myLooper() == playbackThread.getLooper());
|
Assertions.checkState(Looper.myLooper() == playbackThread.getLooper());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user