mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Stop merging methods through AnalyticsCollector/AnalyticsListener
PiperOrigin-RevId: 321595514
This commit is contained in:
parent
3b26c218e1
commit
a6640ae377
9 changed files with 402 additions and 148 deletions
|
|
@ -2224,10 +2224,9 @@ public class SimpleExoPlayer extends BasePlayer
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onAudioSinkUnderrun(
|
||||
int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {
|
||||
public void onAudioUnderrun(int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {
|
||||
for (AudioRendererEventListener audioDebugListener : audioDebugListeners) {
|
||||
audioDebugListener.onAudioSinkUnderrun(bufferSize, bufferSizeMs, elapsedSinceLastFeedMs);
|
||||
audioDebugListener.onAudioUnderrun(bufferSize, bufferSizeMs, elapsedSinceLastFeedMs);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -172,34 +172,40 @@ public class AnalyticsCollector
|
|||
|
||||
// AudioRendererEventListener implementation.
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public final void onAudioEnabled(DecoderCounters counters) {
|
||||
EventTime eventTime = generateReadingMediaPeriodEventTime();
|
||||
for (AnalyticsListener listener : listeners) {
|
||||
listener.onAudioEnabled(eventTime, counters);
|
||||
listener.onDecoderEnabled(eventTime, C.TRACK_TYPE_AUDIO, counters);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public final void onAudioDecoderInitialized(
|
||||
String decoderName, long initializedTimestampMs, long initializationDurationMs) {
|
||||
EventTime eventTime = generateReadingMediaPeriodEventTime();
|
||||
for (AnalyticsListener listener : listeners) {
|
||||
listener.onAudioDecoderInitialized(eventTime, decoderName, initializationDurationMs);
|
||||
listener.onDecoderInitialized(
|
||||
eventTime, C.TRACK_TYPE_AUDIO, decoderName, initializationDurationMs);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public final void onAudioInputFormatChanged(Format format) {
|
||||
EventTime eventTime = generateReadingMediaPeriodEventTime();
|
||||
for (AnalyticsListener listener : listeners) {
|
||||
listener.onAudioInputFormatChanged(eventTime, format);
|
||||
listener.onDecoderInputFormatChanged(eventTime, C.TRACK_TYPE_AUDIO, format);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onAudioSinkUnderrun(
|
||||
public final void onAudioUnderrun(
|
||||
int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {
|
||||
EventTime eventTime = generateReadingMediaPeriodEventTime();
|
||||
for (AnalyticsListener listener : listeners) {
|
||||
|
|
@ -207,10 +213,12 @@ public class AnalyticsCollector
|
|||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public final void onAudioDisabled(DecoderCounters counters) {
|
||||
EventTime eventTime = generatePlayingMediaPeriodEventTime();
|
||||
for (AnalyticsListener listener : listeners) {
|
||||
listener.onAudioDisabled(eventTime, counters);
|
||||
listener.onDecoderDisabled(eventTime, C.TRACK_TYPE_AUDIO, counters);
|
||||
}
|
||||
}
|
||||
|
|
@ -251,28 +259,34 @@ public class AnalyticsCollector
|
|||
|
||||
// VideoRendererEventListener implementation.
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public final void onVideoEnabled(DecoderCounters counters) {
|
||||
EventTime eventTime = generateReadingMediaPeriodEventTime();
|
||||
for (AnalyticsListener listener : listeners) {
|
||||
listener.onVideoEnabled(eventTime, counters);
|
||||
listener.onDecoderEnabled(eventTime, C.TRACK_TYPE_VIDEO, counters);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public final void onVideoDecoderInitialized(
|
||||
String decoderName, long initializedTimestampMs, long initializationDurationMs) {
|
||||
EventTime eventTime = generateReadingMediaPeriodEventTime();
|
||||
for (AnalyticsListener listener : listeners) {
|
||||
listener.onVideoDecoderInitialized(eventTime, decoderName, initializationDurationMs);
|
||||
listener.onDecoderInitialized(
|
||||
eventTime, C.TRACK_TYPE_VIDEO, decoderName, initializationDurationMs);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public final void onVideoInputFormatChanged(Format format) {
|
||||
EventTime eventTime = generateReadingMediaPeriodEventTime();
|
||||
for (AnalyticsListener listener : listeners) {
|
||||
listener.onVideoInputFormatChanged(eventTime, format);
|
||||
listener.onDecoderInputFormatChanged(eventTime, C.TRACK_TYPE_VIDEO, format);
|
||||
}
|
||||
}
|
||||
|
|
@ -285,10 +299,12 @@ public class AnalyticsCollector
|
|||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public final void onVideoDisabled(DecoderCounters counters) {
|
||||
EventTime eventTime = generatePlayingMediaPeriodEventTime();
|
||||
for (AnalyticsListener listener : listeners) {
|
||||
listener.onVideoDisabled(eventTime, counters);
|
||||
listener.onDecoderDisabled(eventTime, C.TRACK_TYPE_VIDEO, counters);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ import com.google.android.exoplayer2.Player.PlaybackSuppressionReason;
|
|||
import com.google.android.exoplayer2.Player.TimelineChangeReason;
|
||||
import com.google.android.exoplayer2.Timeline;
|
||||
import com.google.android.exoplayer2.audio.AudioAttributes;
|
||||
import com.google.android.exoplayer2.audio.AudioSink;
|
||||
import com.google.android.exoplayer2.decoder.DecoderCounters;
|
||||
import com.google.android.exoplayer2.metadata.Metadata;
|
||||
import com.google.android.exoplayer2.source.LoadEventInfo;
|
||||
|
|
@ -273,9 +272,8 @@ public interface AnalyticsListener {
|
|||
default void onSeekStarted(EventTime eventTime) {}
|
||||
|
||||
/**
|
||||
* @deprecated Seeks are processed without delay. Listen to {@link
|
||||
* #onPositionDiscontinuity(EventTime, int)} with reason {@link
|
||||
* Player#DISCONTINUITY_REASON_SEEK} instead.
|
||||
* @deprecated Seeks are processed without delay. Use {@link #onPositionDiscontinuity(EventTime,
|
||||
* int)} with reason {@link Player#DISCONTINUITY_REASON_SEEK} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
default void onSeekProcessed(EventTime eventTime) {}
|
||||
|
|
@ -442,17 +440,6 @@ public interface AnalyticsListener {
|
|||
default void onBandwidthEstimate(
|
||||
EventTime eventTime, int totalLoadTimeMs, long totalBytesLoaded, long bitrateEstimate) {}
|
||||
|
||||
/**
|
||||
* Called when the output surface size changed.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param width The surface width in pixels. May be {@link C#LENGTH_UNSET} if unknown, or 0 if the
|
||||
* video is not rendered onto a surface.
|
||||
* @param height The surface height in pixels. May be {@link C#LENGTH_UNSET} if unknown, or 0 if
|
||||
* the video is not rendered onto a surface.
|
||||
*/
|
||||
default void onSurfaceSizeChanged(EventTime eventTime, int width, int height) {}
|
||||
|
||||
/**
|
||||
* Called when there is {@link Metadata} associated with the current playback time.
|
||||
*
|
||||
|
|
@ -461,50 +448,78 @@ public interface AnalyticsListener {
|
|||
*/
|
||||
default void onMetadata(EventTime eventTime, Metadata metadata) {}
|
||||
|
||||
/**
|
||||
* Called when an audio or video decoder has been enabled.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param trackType The track type of the enabled decoder. Either {@link C#TRACK_TYPE_AUDIO} or
|
||||
* {@link C#TRACK_TYPE_VIDEO}.
|
||||
* @param decoderCounters The accumulated event counters associated with this decoder.
|
||||
*/
|
||||
/** @deprecated Use {@link #onAudioEnabled} and {@link #onVideoEnabled} instead. */
|
||||
@Deprecated
|
||||
default void onDecoderEnabled(
|
||||
EventTime eventTime, int trackType, DecoderCounters decoderCounters) {}
|
||||
|
||||
/**
|
||||
* Called when an audio or video decoder has been initialized.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param trackType The track type of the initialized decoder. Either {@link C#TRACK_TYPE_AUDIO}
|
||||
* or {@link C#TRACK_TYPE_VIDEO}.
|
||||
* @param decoderName The decoder that was created.
|
||||
* @param initializationDurationMs Time taken to initialize the decoder, in milliseconds.
|
||||
* @deprecated Use {@link #onAudioDecoderInitialized} and {@link #onVideoDecoderInitialized}
|
||||
* instead.
|
||||
*/
|
||||
@Deprecated
|
||||
default void onDecoderInitialized(
|
||||
EventTime eventTime, int trackType, String decoderName, long initializationDurationMs) {}
|
||||
|
||||
/**
|
||||
* Called when an audio or video decoder input format changed.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param trackType The track type of the decoder whose format changed. Either {@link
|
||||
* C#TRACK_TYPE_AUDIO} or {@link C#TRACK_TYPE_VIDEO}.
|
||||
* @param format The new input format for the decoder.
|
||||
* @deprecated Use {@link #onAudioInputFormatChanged} and {@link #onVideoInputFormatChanged}
|
||||
* instead.
|
||||
*/
|
||||
@Deprecated
|
||||
default void onDecoderInputFormatChanged(EventTime eventTime, int trackType, Format format) {}
|
||||
|
||||
/**
|
||||
* Called when an audio or video decoder has been disabled.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param trackType The track type of the disabled decoder. Either {@link C#TRACK_TYPE_AUDIO} or
|
||||
* {@link C#TRACK_TYPE_VIDEO}.
|
||||
* @param decoderCounters The accumulated event counters associated with this decoder.
|
||||
*/
|
||||
/** @deprecated Use {@link #onAudioDisabled} and {@link #onVideoDisabled} instead. */
|
||||
@Deprecated
|
||||
default void onDecoderDisabled(
|
||||
EventTime eventTime, int trackType, DecoderCounters decoderCounters) {}
|
||||
|
||||
/**
|
||||
* Called when an audio renderer is enabled.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param counters {@link DecoderCounters} that will be updated by the renderer for as long as it
|
||||
* remains enabled.
|
||||
*/
|
||||
default void onAudioEnabled(EventTime eventTime, DecoderCounters counters) {}
|
||||
|
||||
/**
|
||||
* Called when an audio renderer creates a decoder.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param decoderName The decoder that was created.
|
||||
* @param initializationDurationMs The time taken to initialize the decoder in milliseconds.
|
||||
*/
|
||||
default void onAudioDecoderInitialized(
|
||||
EventTime eventTime, String decoderName, long initializationDurationMs) {}
|
||||
|
||||
/**
|
||||
* Called when the format of the media being consumed by an audio renderer changes.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param format The new format.
|
||||
*/
|
||||
default void onAudioInputFormatChanged(EventTime eventTime, Format format) {}
|
||||
|
||||
/**
|
||||
* Called when an audio underrun occurs.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param bufferSize The size of the audio output buffer, in bytes.
|
||||
* @param bufferSizeMs The size of the audio output buffer, in milliseconds, if it contains PCM
|
||||
* encoded audio. {@link C#TIME_UNSET} if the output buffer contains non-PCM encoded audio.
|
||||
* @param elapsedSinceLastFeedMs The time since audio was last written to the output buffer.
|
||||
*/
|
||||
default void onAudioUnderrun(
|
||||
EventTime eventTime, int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {}
|
||||
|
||||
/**
|
||||
* Called when an audio renderer is disabled.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param counters {@link DecoderCounters} that were updated by the renderer.
|
||||
*/
|
||||
default void onAudioDisabled(EventTime eventTime, DecoderCounters counters) {}
|
||||
|
||||
/**
|
||||
* Called when the audio session id is set.
|
||||
*
|
||||
|
|
@ -521,6 +536,14 @@ public interface AnalyticsListener {
|
|||
*/
|
||||
default void onAudioAttributesChanged(EventTime eventTime, AudioAttributes audioAttributes) {}
|
||||
|
||||
/**
|
||||
* Called when skipping silences is enabled or disabled in the audio stream.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param skipSilenceEnabled Whether skipping silences in the audio stream is enabled.
|
||||
*/
|
||||
default void onSkipSilenceEnabledChanged(EventTime eventTime, boolean skipSilenceEnabled) {}
|
||||
|
||||
/**
|
||||
* Called when the volume changes.
|
||||
*
|
||||
|
|
@ -530,25 +553,31 @@ public interface AnalyticsListener {
|
|||
default void onVolumeChanged(EventTime eventTime, float volume) {}
|
||||
|
||||
/**
|
||||
* Called when an audio underrun occurred.
|
||||
* Called when a video renderer is enabled.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param bufferSize The size of the {@link AudioSink}'s buffer, in bytes.
|
||||
* @param bufferSizeMs The size of the {@link AudioSink}'s buffer, in milliseconds, if it is
|
||||
* configured for PCM output. {@link C#TIME_UNSET} if it is configured for passthrough output,
|
||||
* as the buffered media can have a variable bitrate so the duration may be unknown.
|
||||
* @param elapsedSinceLastFeedMs The time since the {@link AudioSink} was last fed data.
|
||||
* @param counters {@link DecoderCounters} that will be updated by the renderer for as long as it
|
||||
* remains enabled.
|
||||
*/
|
||||
default void onAudioUnderrun(
|
||||
EventTime eventTime, int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {}
|
||||
default void onVideoEnabled(EventTime eventTime, DecoderCounters counters) {}
|
||||
|
||||
/**
|
||||
* Called when skipping silences is enabled or disabled in the audio stream.
|
||||
* Called when a video renderer creates a decoder.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param skipSilenceEnabled Whether skipping silences in the audio stream is enabled.
|
||||
* @param decoderName The decoder that was created.
|
||||
* @param initializationDurationMs The time taken to initialize the decoder in milliseconds.
|
||||
*/
|
||||
default void onSkipSilenceEnabledChanged(EventTime eventTime, boolean skipSilenceEnabled) {}
|
||||
default void onVideoDecoderInitialized(
|
||||
EventTime eventTime, String decoderName, long initializationDurationMs) {}
|
||||
|
||||
/**
|
||||
* Called when the format of the media being consumed by a video renderer changes.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param format The new format.
|
||||
*/
|
||||
default void onVideoInputFormatChanged(EventTime eventTime, Format format) {}
|
||||
|
||||
/**
|
||||
* Called after video frames have been dropped.
|
||||
|
|
@ -561,6 +590,14 @@ public interface AnalyticsListener {
|
|||
*/
|
||||
default void onDroppedVideoFrames(EventTime eventTime, int droppedFrames, long elapsedMs) {}
|
||||
|
||||
/**
|
||||
* Called when a video renderer is disabled.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param counters {@link DecoderCounters} that were updated by the renderer.
|
||||
*/
|
||||
default void onVideoDisabled(EventTime eventTime, DecoderCounters counters) {}
|
||||
|
||||
/**
|
||||
* Called when there is an update to the video frame processing offset reported by a video
|
||||
* renderer.
|
||||
|
|
@ -580,6 +617,16 @@ public interface AnalyticsListener {
|
|||
default void onVideoFrameProcessingOffset(
|
||||
EventTime eventTime, long totalProcessingOffsetUs, int frameCount, Format format) {}
|
||||
|
||||
/**
|
||||
* Called when a frame is rendered for the first time since setting the surface, or since the
|
||||
* renderer was reset, or since the stream being rendered was changed.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param surface The {@link Surface} to which a frame has been rendered, or {@code null} if the
|
||||
* renderer renders to something that isn't a {@link Surface}.
|
||||
*/
|
||||
default void onRenderedFirstFrame(EventTime eventTime, @Nullable Surface surface) {}
|
||||
|
||||
/**
|
||||
* Called before a frame is rendered for the first time since setting the surface, and each time
|
||||
* there's a change in the size or pixel aspect ratio of the video being rendered.
|
||||
|
|
@ -601,14 +648,15 @@ public interface AnalyticsListener {
|
|||
float pixelWidthHeightRatio) {}
|
||||
|
||||
/**
|
||||
* Called when a frame is rendered for the first time since setting the surface, and when a frame
|
||||
* is rendered for the first time since the renderer was reset.
|
||||
* Called when the output surface size changed.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
* @param surface The {@link Surface} to which a first frame has been rendered, or {@code null} if
|
||||
* the renderer renders to something that isn't a {@link Surface}.
|
||||
* @param width The surface width in pixels. May be {@link C#LENGTH_UNSET} if unknown, or 0 if the
|
||||
* video is not rendered onto a surface.
|
||||
* @param height The surface height in pixels. May be {@link C#LENGTH_UNSET} if unknown, or 0 if
|
||||
* the video is not rendered onto a surface.
|
||||
*/
|
||||
default void onRenderedFirstFrame(EventTime eventTime, @Nullable Surface surface) {}
|
||||
default void onSurfaceSizeChanged(EventTime eventTime, int width, int height) {}
|
||||
|
||||
/**
|
||||
* Called each time a drm session is acquired.
|
||||
|
|
|
|||
|
|
@ -66,16 +66,14 @@ public interface AudioRendererEventListener {
|
|||
default void onAudioInputFormatChanged(Format format) {}
|
||||
|
||||
/**
|
||||
* Called when an {@link AudioSink} underrun occurs.
|
||||
* Called when an audio underrun occurs.
|
||||
*
|
||||
* @param bufferSize The size of the {@link AudioSink}'s buffer, in bytes.
|
||||
* @param bufferSizeMs The size of the {@link AudioSink}'s buffer, in milliseconds, if it is
|
||||
* configured for PCM output. {@link C#TIME_UNSET} if it is configured for passthrough output,
|
||||
* as the buffered media can have a variable bitrate so the duration may be unknown.
|
||||
* @param elapsedSinceLastFeedMs The time since the {@link AudioSink} was last fed data.
|
||||
* @param bufferSize The size of the audio output buffer, in bytes.
|
||||
* @param bufferSizeMs The size of the audio output buffer, in milliseconds, if it contains PCM
|
||||
* encoded audio. {@link C#TIME_UNSET} if the output buffer contains non-PCM encoded audio.
|
||||
* @param elapsedSinceLastFeedMs The time since audio was last written to the output buffer.
|
||||
*/
|
||||
default void onAudioSinkUnderrun(
|
||||
int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {}
|
||||
default void onAudioUnderrun(int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {}
|
||||
|
||||
/**
|
||||
* Called when the renderer is disabled.
|
||||
|
|
@ -140,14 +138,14 @@ public interface AudioRendererEventListener {
|
|||
}
|
||||
}
|
||||
|
||||
/** Invokes {@link AudioRendererEventListener#onAudioSinkUnderrun(int, long, long)}. */
|
||||
/** Invokes {@link AudioRendererEventListener#onAudioUnderrun(int, long, long)}. */
|
||||
public void underrun(
|
||||
final int bufferSize, final long bufferSizeMs, final long elapsedSinceLastFeedMs) {
|
||||
if (handler != null) {
|
||||
handler.post(
|
||||
() ->
|
||||
castNonNull(listener)
|
||||
.onAudioSinkUnderrun(bufferSize, bufferSizeMs, elapsedSinceLastFeedMs));
|
||||
.onAudioUnderrun(bufferSize, bufferSizeMs, elapsedSinceLastFeedMs));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -301,8 +301,34 @@ public class EventLogger implements AnalyticsListener {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onDecoderEnabled(EventTime eventTime, int trackType, DecoderCounters counters) {
|
||||
logd(eventTime, "decoderEnabled", Util.getTrackTypeString(trackType));
|
||||
public void onAudioEnabled(EventTime eventTime, DecoderCounters counters) {
|
||||
logd(eventTime, "audioEnabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAudioDecoderInitialized(
|
||||
EventTime eventTime, String decoderName, long initializationDurationMs) {
|
||||
logd(eventTime, "audioDecoderInitialized", decoderName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAudioInputFormatChanged(EventTime eventTime, Format format) {
|
||||
logd(eventTime, "audioInputFormat", Format.toLogString(format));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAudioUnderrun(
|
||||
EventTime eventTime, int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {
|
||||
loge(
|
||||
eventTime,
|
||||
"audioTrackUnderrun",
|
||||
bufferSize + ", " + bufferSizeMs + ", " + elapsedSinceLastFeedMs + "]",
|
||||
/* throwable= */ null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAudioDisabled(EventTime eventTime, DecoderCounters counters) {
|
||||
logd(eventTime, "audioDisabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -335,32 +361,19 @@ public class EventLogger implements AnalyticsListener {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onDecoderInitialized(
|
||||
EventTime eventTime, int trackType, String decoderName, long initializationDurationMs) {
|
||||
logd(eventTime, "decoderInitialized", Util.getTrackTypeString(trackType) + ", " + decoderName);
|
||||
public void onVideoEnabled(EventTime eventTime, DecoderCounters counters) {
|
||||
logd(eventTime, "videoEnabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDecoderInputFormatChanged(EventTime eventTime, int trackType, Format format) {
|
||||
logd(
|
||||
eventTime,
|
||||
"decoderInputFormat",
|
||||
Util.getTrackTypeString(trackType) + ", " + Format.toLogString(format));
|
||||
public void onVideoDecoderInitialized(
|
||||
EventTime eventTime, String decoderName, long initializationDurationMs) {
|
||||
logd(eventTime, "videoDecoderInitialized", decoderName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDecoderDisabled(EventTime eventTime, int trackType, DecoderCounters counters) {
|
||||
logd(eventTime, "decoderDisabled", Util.getTrackTypeString(trackType));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAudioUnderrun(
|
||||
EventTime eventTime, int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {
|
||||
loge(
|
||||
eventTime,
|
||||
"audioTrackUnderrun",
|
||||
bufferSize + ", " + bufferSizeMs + ", " + elapsedSinceLastFeedMs + "]",
|
||||
null);
|
||||
public void onVideoInputFormatChanged(EventTime eventTime, Format format) {
|
||||
logd(eventTime, "videoInputFormat", Format.toLogString(format));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -368,6 +381,16 @@ public class EventLogger implements AnalyticsListener {
|
|||
logd(eventTime, "droppedFrames", Integer.toString(count));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoDisabled(EventTime eventTime, DecoderCounters counters) {
|
||||
logd(eventTime, "videoDisabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRenderedFirstFrame(EventTime eventTime, @Nullable Surface surface) {
|
||||
logd(eventTime, "renderedFirstFrame", String.valueOf(surface));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoSizeChanged(
|
||||
EventTime eventTime,
|
||||
|
|
@ -378,11 +401,6 @@ public class EventLogger implements AnalyticsListener {
|
|||
logd(eventTime, "videoSize", width + ", " + height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRenderedFirstFrame(EventTime eventTime, @Nullable Surface surface) {
|
||||
logd(eventTime, "renderedFirstFrame", String.valueOf(surface));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaPeriodCreated(EventTime eventTime) {
|
||||
logd(eventTime, "mediaPeriodCreated");
|
||||
|
|
|
|||
|
|
@ -51,8 +51,8 @@ public interface VideoListener {
|
|||
default void onSurfaceSizeChanged(int width, int height) {}
|
||||
|
||||
/**
|
||||
* Called when a frame is rendered for the first time since setting the surface, and when a frame
|
||||
* is rendered for the first time since the renderer was reset.
|
||||
* Called when a frame is rendered for the first time since setting the surface, or since the
|
||||
* renderer was reset, or since the stream being rendered was changed.
|
||||
*/
|
||||
default void onRenderedFirstFrame() {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -114,8 +114,8 @@ public interface VideoRendererEventListener {
|
|||
int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {}
|
||||
|
||||
/**
|
||||
* Called when a frame is rendered for the first time since setting the surface, and when a frame
|
||||
* is rendered for the first time since the renderer was reset.
|
||||
* Called when a frame is rendered for the first time since setting the surface, or since the
|
||||
* renderer was reset, or since the stream being rendered was changed.
|
||||
*
|
||||
* @param surface The {@link Surface} to which a first frame has been rendered, or {@code null} if
|
||||
* the renderer renders to something that isn't a {@link Surface}.
|
||||
|
|
|
|||
|
|
@ -107,18 +107,26 @@ public final class AnalyticsCollectorTest {
|
|||
private static final int EVENT_DECODER_INIT = 25;
|
||||
private static final int EVENT_DECODER_FORMAT_CHANGED = 26;
|
||||
private static final int EVENT_DECODER_DISABLED = 27;
|
||||
private static final int EVENT_AUDIO_SESSION_ID = 28;
|
||||
private static final int EVENT_AUDIO_UNDERRUN = 29;
|
||||
private static final int EVENT_DROPPED_VIDEO_FRAMES = 30;
|
||||
private static final int EVENT_VIDEO_SIZE_CHANGED = 31;
|
||||
private static final int EVENT_RENDERED_FIRST_FRAME = 32;
|
||||
private static final int EVENT_DRM_KEYS_LOADED = 33;
|
||||
private static final int EVENT_DRM_ERROR = 34;
|
||||
private static final int EVENT_DRM_KEYS_RESTORED = 35;
|
||||
private static final int EVENT_DRM_KEYS_REMOVED = 36;
|
||||
private static final int EVENT_DRM_SESSION_ACQUIRED = 37;
|
||||
private static final int EVENT_DRM_SESSION_RELEASED = 38;
|
||||
private static final int EVENT_VIDEO_FRAME_PROCESSING_OFFSET = 39;
|
||||
private static final int EVENT_AUDIO_ENABLED = 28;
|
||||
private static final int EVENT_AUDIO_DECODER_INIT = 29;
|
||||
private static final int EVENT_AUDIO_INPUT_FORMAT_CHANGED = 30;
|
||||
private static final int EVENT_AUDIO_DISABLED = 31;
|
||||
private static final int EVENT_AUDIO_SESSION_ID = 32;
|
||||
private static final int EVENT_AUDIO_UNDERRUN = 33;
|
||||
private static final int EVENT_VIDEO_ENABLED = 34;
|
||||
private static final int EVENT_VIDEO_DECODER_INIT = 35;
|
||||
private static final int EVENT_VIDEO_INPUT_FORMAT_CHANGED = 36;
|
||||
private static final int EVENT_DROPPED_FRAMES = 37;
|
||||
private static final int EVENT_VIDEO_DISABLED = 38;
|
||||
private static final int EVENT_RENDERED_FIRST_FRAME = 39;
|
||||
private static final int EVENT_VIDEO_FRAME_PROCESSING_OFFSET = 40;
|
||||
private static final int EVENT_VIDEO_SIZE_CHANGED = 41;
|
||||
private static final int EVENT_DRM_KEYS_LOADED = 42;
|
||||
private static final int EVENT_DRM_ERROR = 43;
|
||||
private static final int EVENT_DRM_KEYS_RESTORED = 44;
|
||||
private static final int EVENT_DRM_KEYS_REMOVED = 45;
|
||||
private static final int EVENT_DRM_SESSION_ACQUIRED = 46;
|
||||
private static final int EVENT_DRM_SESSION_RELEASED = 47;
|
||||
|
||||
private static final UUID DRM_SCHEME_UUID =
|
||||
UUID.nameUUIDFromBytes(TestUtil.createByteArray(7, 8, 9));
|
||||
|
|
@ -222,8 +230,14 @@ public final class AnalyticsCollectorTest {
|
|||
assertThat(listener.getEvents(EVENT_DECODER_FORMAT_CHANGED))
|
||||
.containsExactly(period0 /* audio */, period0 /* video */)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_ENABLED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_DECODER_INIT)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_INPUT_FORMAT_CHANGED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_SESSION_ID)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_VIDEO_FRAMES)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INIT)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_FRAMES)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_RENDERED_FIRST_FRAME)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_FRAME_PROCESSING_OFFSET)).containsExactly(period0);
|
||||
|
|
@ -298,8 +312,22 @@ public final class AnalyticsCollectorTest {
|
|||
.containsExactly(
|
||||
period0 /* audio */, period0 /* video */, period1 /* audio */, period1 /* video */)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_ENABLED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_DECODER_INIT))
|
||||
.containsExactly(period0, period1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_INPUT_FORMAT_CHANGED))
|
||||
.containsExactly(period0, period1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_SESSION_ID)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_VIDEO_FRAMES)).containsExactly(period1);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INIT))
|
||||
.containsExactly(period0, period1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED))
|
||||
.containsExactly(period0, period1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_FRAMES)).containsExactly(period1);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED))
|
||||
.containsExactly(period0, period1)
|
||||
.inOrder();
|
||||
|
|
@ -369,9 +397,16 @@ public final class AnalyticsCollectorTest {
|
|||
assertThat(listener.getEvents(EVENT_DECODER_FORMAT_CHANGED))
|
||||
.containsExactly(period0 /* video */, period1 /* audio */)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_DECODER_DISABLED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_DECODER_DISABLED)).containsExactly(period0 /* video */);
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_ENABLED)).containsExactly(period1);
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_DECODER_INIT)).containsExactly(period1);
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_INPUT_FORMAT_CHANGED)).containsExactly(period1);
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_SESSION_ID)).containsExactly(period1);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_VIDEO_FRAMES)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INIT)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DISABLED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_FRAMES)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_RENDERED_FIRST_FRAME)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_FRAME_PROCESSING_OFFSET)).containsExactly(period0);
|
||||
|
|
@ -460,9 +495,21 @@ public final class AnalyticsCollectorTest {
|
|||
assertThat(listener.getEvents(EVENT_DECODER_DISABLED))
|
||||
.containsExactly(period0 /* video */, period0 /* audio */)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_ENABLED)).containsExactly(period0, period1).inOrder();
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_DECODER_INIT))
|
||||
.containsExactly(period0, period1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_INPUT_FORMAT_CHANGED))
|
||||
.containsExactly(period0, period1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_SESSION_ID))
|
||||
.containsExactly(period0, period1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_DISABLED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INIT)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DISABLED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_RENDERED_FIRST_FRAME)).containsExactly(period0);
|
||||
listener.assertNoMoreEvents();
|
||||
|
|
@ -555,10 +602,28 @@ public final class AnalyticsCollectorTest {
|
|||
.containsExactly(period0, period1Seq1, period1Seq1, period1Seq2, period1Seq2)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_DECODER_DISABLED)).containsExactly(period0, period0);
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_ENABLED))
|
||||
.containsExactly(period1, period1Seq2)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_DECODER_INIT))
|
||||
.containsExactly(period1Seq1, period1Seq2)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_INPUT_FORMAT_CHANGED))
|
||||
.containsExactly(period1Seq1, period1Seq2)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_SESSION_ID))
|
||||
.containsExactly(period1Seq1, period1Seq2)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_VIDEO_FRAMES))
|
||||
assertThat(listener.getEvents(EVENT_AUDIO_DISABLED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED)).containsExactly(period0, period0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INIT))
|
||||
.containsExactly(period0, period1Seq1, period1Seq2)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED))
|
||||
.containsExactly(period0, period1Seq1, period1Seq2)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DISABLED)).containsExactly(period0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_FRAMES))
|
||||
.containsExactly(period0, period1Seq2)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED))
|
||||
|
|
@ -658,7 +723,17 @@ public final class AnalyticsCollectorTest {
|
|||
.containsExactly(period0Seq0, period0Seq1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_DECODER_DISABLED)).containsExactly(period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_VIDEO_FRAMES)).containsExactly(period0Seq1);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED))
|
||||
.containsExactly(period0Seq0, period0Seq1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INIT))
|
||||
.containsExactly(period0Seq0, period0Seq1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED))
|
||||
.containsExactly(period0Seq0, period0Seq1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DISABLED)).containsExactly(period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_FRAMES)).containsExactly(period0Seq1);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED))
|
||||
.containsExactly(period0Seq0, period0Seq1)
|
||||
.inOrder();
|
||||
|
|
@ -736,7 +811,13 @@ public final class AnalyticsCollectorTest {
|
|||
assertThat(listener.getEvents(EVENT_DECODER_FORMAT_CHANGED))
|
||||
.containsExactly(period0Seq0, period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_DECODER_DISABLED)).containsExactly(period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_VIDEO_FRAMES)).containsExactly(period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED)).containsExactly(period0Seq0, period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INIT))
|
||||
.containsExactly(period0Seq0, period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED))
|
||||
.containsExactly(period0Seq0, period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DISABLED)).containsExactly(period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_FRAMES)).containsExactly(period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED))
|
||||
.containsExactly(period0Seq0, period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_RENDERED_FIRST_FRAME))
|
||||
|
|
@ -822,7 +903,17 @@ public final class AnalyticsCollectorTest {
|
|||
.containsExactly(window0Period1Seq0, window1Period0Seq1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_DECODER_DISABLED)).containsExactly(window0Period1Seq0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_VIDEO_FRAMES))
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED))
|
||||
.containsExactly(window0Period1Seq0, window0Period1Seq0)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INIT))
|
||||
.containsExactly(window0Period1Seq0, window1Period0Seq1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED))
|
||||
.containsExactly(window0Period1Seq0, window1Period0Seq1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DISABLED)).containsExactly(window0Period1Seq0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_FRAMES))
|
||||
.containsExactly(window0Period1Seq0, period1Seq0)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED))
|
||||
|
|
@ -917,7 +1008,17 @@ public final class AnalyticsCollectorTest {
|
|||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_DECODER_DISABLED))
|
||||
.containsExactly(period0Seq0, period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_VIDEO_FRAMES)).containsExactly(period0Seq1);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED))
|
||||
.containsExactly(period0Seq0, period0Seq1, period0Seq1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INIT))
|
||||
.containsExactly(period0Seq0, period0Seq1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED))
|
||||
.containsExactly(period0Seq0, period0Seq1)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DISABLED)).containsExactly(period0Seq0, period0Seq0);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_FRAMES)).containsExactly(period0Seq1);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED))
|
||||
.containsExactly(period0Seq0, period0Seq1)
|
||||
.inOrder();
|
||||
|
|
@ -1177,7 +1278,26 @@ public final class AnalyticsCollectorTest {
|
|||
postrollAd,
|
||||
contentAfterPostroll)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_VIDEO_FRAMES))
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED)).containsExactly(prerollAd);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INIT))
|
||||
.containsExactly(
|
||||
prerollAd,
|
||||
contentAfterPreroll,
|
||||
midrollAd,
|
||||
contentAfterMidroll,
|
||||
postrollAd,
|
||||
contentAfterPostroll)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED))
|
||||
.containsExactly(
|
||||
prerollAd,
|
||||
contentAfterPreroll,
|
||||
midrollAd,
|
||||
contentAfterMidroll,
|
||||
postrollAd,
|
||||
contentAfterPostroll)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_FRAMES))
|
||||
.containsExactly(contentAfterPreroll, contentAfterMidroll, contentAfterPostroll)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED))
|
||||
|
|
@ -1344,7 +1464,17 @@ public final class AnalyticsCollectorTest {
|
|||
.containsExactly(contentBeforeMidroll, midrollAd, contentAfterMidroll)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_DECODER_DISABLED)).containsExactly(contentBeforeMidroll);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_VIDEO_FRAMES)).containsExactly(contentAfterMidroll);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED))
|
||||
.containsExactly(contentBeforeMidroll, midrollAd)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INIT))
|
||||
.containsExactly(contentBeforeMidroll, midrollAd, contentAfterMidroll)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED))
|
||||
.containsExactly(contentBeforeMidroll, midrollAd, contentAfterMidroll)
|
||||
.inOrder();
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_DISABLED)).containsExactly(contentBeforeMidroll);
|
||||
assertThat(listener.getEvents(EVENT_DROPPED_FRAMES)).containsExactly(contentAfterMidroll);
|
||||
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED))
|
||||
.containsExactly(contentBeforeMidroll, midrollAd, contentAfterMidroll)
|
||||
.inOrder();
|
||||
|
|
@ -1847,29 +1977,54 @@ public final class AnalyticsCollectorTest {
|
|||
reportedEvents.add(new ReportedEvent(EVENT_METADATA, eventTime));
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void onDecoderEnabled(
|
||||
EventTime eventTime, int trackType, DecoderCounters decoderCounters) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_DECODER_ENABLED, eventTime));
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void onDecoderInitialized(
|
||||
EventTime eventTime, int trackType, String decoderName, long initializationDurationMs) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_DECODER_INIT, eventTime));
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void onDecoderInputFormatChanged(EventTime eventTime, int trackType, Format format) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_DECODER_FORMAT_CHANGED, eventTime));
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void onDecoderDisabled(
|
||||
EventTime eventTime, int trackType, DecoderCounters decoderCounters) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_DECODER_DISABLED, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAudioEnabled(EventTime eventTime, DecoderCounters counters) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_AUDIO_ENABLED, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAudioDecoderInitialized(
|
||||
EventTime eventTime, String decoderName, long initializationDurationMs) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_AUDIO_DECODER_INIT, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAudioInputFormatChanged(EventTime eventTime, Format format) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_AUDIO_INPUT_FORMAT_CHANGED, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAudioDisabled(EventTime eventTime, DecoderCounters counters) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_AUDIO_DISABLED, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAudioSessionId(EventTime eventTime, int audioSessionId) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_AUDIO_SESSION_ID, eventTime));
|
||||
|
|
@ -1881,9 +2036,41 @@ public final class AnalyticsCollectorTest {
|
|||
reportedEvents.add(new ReportedEvent(EVENT_AUDIO_UNDERRUN, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoEnabled(EventTime eventTime, DecoderCounters counters) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_VIDEO_ENABLED, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoDecoderInitialized(
|
||||
EventTime eventTime, String decoderName, long initializationDurationMs) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_VIDEO_DECODER_INIT, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoInputFormatChanged(EventTime eventTime, Format format) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_VIDEO_INPUT_FORMAT_CHANGED, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDroppedVideoFrames(EventTime eventTime, int droppedFrames, long elapsedMs) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_DROPPED_VIDEO_FRAMES, eventTime));
|
||||
reportedEvents.add(new ReportedEvent(EVENT_DROPPED_FRAMES, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoDisabled(EventTime eventTime, DecoderCounters counters) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_VIDEO_DISABLED, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoFrameProcessingOffset(
|
||||
EventTime eventTime, long totalProcessingOffsetUs, int frameCount, Format format) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_VIDEO_FRAME_PROCESSING_OFFSET, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRenderedFirstFrame(EventTime eventTime, Surface surface) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_RENDERED_FIRST_FRAME, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -1896,11 +2083,6 @@ public final class AnalyticsCollectorTest {
|
|||
reportedEvents.add(new ReportedEvent(EVENT_VIDEO_SIZE_CHANGED, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRenderedFirstFrame(EventTime eventTime, Surface surface) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_RENDERED_FIRST_FRAME, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmSessionAcquired(EventTime eventTime) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_DRM_SESSION_ACQUIRED, eventTime));
|
||||
|
|
@ -1931,12 +2113,6 @@ public final class AnalyticsCollectorTest {
|
|||
reportedEvents.add(new ReportedEvent(EVENT_DRM_SESSION_RELEASED, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoFrameProcessingOffset(
|
||||
EventTime eventTime, long totalProcessingOffsetUs, int frameCount, Format format) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_VIDEO_FRAME_PROCESSING_OFFSET, eventTime));
|
||||
}
|
||||
|
||||
private static final class ReportedEvent {
|
||||
|
||||
public final int eventType;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ import android.os.SystemClock;
|
|||
import android.view.Surface;
|
||||
import android.widget.FrameLayout;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.DefaultRenderersFactory;
|
||||
import com.google.android.exoplayer2.ExoPlaybackException;
|
||||
import com.google.android.exoplayer2.ExoPlayer;
|
||||
|
|
@ -209,13 +208,13 @@ public abstract class ExoHostedTest implements AnalyticsListener, HostedTest {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onDecoderDisabled(
|
||||
EventTime eventTime, int trackType, DecoderCounters decoderCounters) {
|
||||
if (trackType == C.TRACK_TYPE_AUDIO) {
|
||||
audioDecoderCounters.merge(decoderCounters);
|
||||
} else if (trackType == C.TRACK_TYPE_VIDEO) {
|
||||
videoDecoderCounters.merge(decoderCounters);
|
||||
}
|
||||
public void onAudioDisabled(EventTime eventTime, DecoderCounters decoderCounters) {
|
||||
audioDecoderCounters.merge(decoderCounters);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoDisabled(EventTime eventTime, DecoderCounters decoderCounters) {
|
||||
videoDecoderCounters.merge(decoderCounters);
|
||||
}
|
||||
|
||||
// Internal logic
|
||||
|
|
|
|||
Loading…
Reference in a new issue