# EventLogger

Artifact: [androidx.media3:media3-exoplayer](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/exoplayer/util/EventLogger.java+class:androidx.media3.exoplayer.util.EventLogger)

*** ** * ** ***

<br />

```
public class EventLogger implements AnalyticsListener
```

<br />

*** ** * ** ***

Logs events from `https://developer.android.com/reference/androidx/media3/common/Player` and other core components using `https://developer.android.com/reference/androidx/media3/common/util/Log`.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#EventLogger()()` Creates an instance. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#EventLogger(java.lang.String)(https://developer.android.com/reference/java/lang/String.html tag)` Creates an instance. |
| `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi [EventLogger](https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#EventLogger(androidx.media3.exoplayer.trackselection.MappingTrackSelector))(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector trackSelector)` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#EventLogger()` <br /> |
| `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi [EventLogger](https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#EventLogger(androidx.media3.exoplayer.trackselection.MappingTrackSelector,java.lang.String))(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector trackSelector, https://developer.android.com/reference/java/lang/String.html tag)` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#EventLogger(java.lang.String)` <br /> |

| ### Public methods |
|---|---|
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onAudioAttributesChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.AudioAttributes)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/common/AudioAttributes audioAttributes )` Called when the audio attributes change. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onAudioDecoderInitialized(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/java/lang/String.html decoderName, long initializedTimestampMs, long initializationDurationMs )` Called when an audio renderer creates a decoder. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onAudioDecoderReleased(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/java/lang/String.html decoderName )` Called when an audio renderer releases a decoder. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onAudioDisabled(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.DecoderCounters)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/exoplayer/DecoderCounters decoderCounters )` Called when an audio renderer is disabled. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onAudioEnabled(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.DecoderCounters)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/exoplayer/DecoderCounters decoderCounters )` Called when an audio renderer is enabled. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onAudioInputFormatChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.Format,androidx.media3.exoplayer.DecoderReuseEvaluation)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/common/Format format, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/DecoderReuseEvaluation decoderReuseEvaluation )` Called when the format of the media being consumed by an audio renderer changes. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onAudioPositionAdvancing(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,long)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, long playoutStartSystemTimeMs )` Called when the audio position has increased for the first time since the last pause or position reset. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onAudioSessionIdChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, int audioSessionId )` Called when the audio session ID changes. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onAudioTrackInitialized(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.audio.AudioSink.AudioTrackConfig)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.AudioTrackConfig audioTrackConfig )` Called when an `https://developer.android.com/reference/android/media/AudioTrack.html` has been initialized. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onAudioTrackReleased(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.audio.AudioSink.AudioTrackConfig)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.AudioTrackConfig audioTrackConfig )` Called when an `https://developer.android.com/reference/android/media/AudioTrack.html` has been released. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onAudioUnderrun(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int,long,long)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs )` Called when an audio underrun occurs. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onDownstreamFormatChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.source.MediaLoadData)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData mediaLoadData )` Called when the downstream format sent to the renderers changed. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onDrmKeysLoaded(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.drm.KeyRequestInfo)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/exoplayer/drm/KeyRequestInfo keyRequestInfo )` Called each time drm keys are loaded. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onDrmKeysRemoved(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime)` Called each time offline drm keys are removed. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onDrmKeysRestored(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime)` Called each time offline drm keys are restored. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onDrmSessionAcquired(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, @https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSession.State int state )` Called each time a drm session is acquired. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onDrmSessionManagerError(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.Exception)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/java/lang/Exception.html error )` Called when a drm error occurs. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onDrmSessionReleased(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime)` Called each time a drm session is released. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onDroppedSeeksWhileScrubbing(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, int droppedSeeks )` Called when seeks have been dropped while in `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer#setScrubbingModeEnabled(boolean)`. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onDroppedVideoFrames(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int,long)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, int droppedFrames, long elapsedMs )` Called after video frames have been dropped. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onIsLoadingChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,boolean)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, boolean isLoading )` Called when the player starts or stops loading data from a source. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onIsPlayingChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,boolean)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, boolean isPlaying )` Called when the player starts or stops playing. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onLoadError(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.source.LoadEventInfo,androidx.media3.exoplayer.source.MediaLoadData,java.io.IOException,boolean)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/exoplayer/source/LoadEventInfo loadEventInfo, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData mediaLoadData, https://developer.android.com/reference/java/io/IOException.html error, boolean wasCanceled )` Called when a media source loading error occurred. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onMediaItemTransition(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.MediaItem,int)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, int reason )` Called when playback transitions to a different media item. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onMetadata(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.Metadata)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/common/Metadata metadata)` Called when there is `https://developer.android.com/reference/androidx/media3/common/Metadata` associated with the current playback time. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onPlayWhenReadyChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,boolean,int)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, boolean playWhenReady, @https://developer.android.com/reference/androidx/media3/common/Player.PlayWhenReadyChangeReason int reason )` Called when the value changed that indicates whether playback will proceed when ready. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onPlaybackParametersChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.PlaybackParameters)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/common/PlaybackParameters playbackParameters )` Called when the playback parameters changed. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onPlaybackStateChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, @https://developer.android.com/reference/androidx/media3/common/Player.State int state )` Called when the playback state changed. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onPlaybackSuppressionReasonChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, @https://developer.android.com/reference/androidx/media3/common/Player.PlaybackSuppressionReason int playbackSuppressionReason )` Called when playback suppression reason changed. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onPlayerError(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.PlaybackException)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/common/PlaybackException error )` Called when a fatal player error occurred. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onPositionDiscontinuity(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.Player.PositionInfo,androidx.media3.common.Player.PositionInfo,int)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/common/Player.PositionInfo oldPosition, https://developer.android.com/reference/androidx/media3/common/Player.PositionInfo newPosition, @https://developer.android.com/reference/androidx/media3/common/Player.DiscontinuityReason int reason )` Called when a position discontinuity occurred. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onRenderedFirstFrame(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.Object,long)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/java/lang/Object.html output, long renderTimeMs )` 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. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onRendererReadyChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int,int,boolean)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, int rendererIndex, @https://developer.android.com/reference/androidx/media3/common/C.TrackType int rendererTrackType, boolean isRendererReady )` Called each time a renderer starts or stops allowing playback to be ready. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onRepeatModeChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, @https://developer.android.com/reference/androidx/media3/common/Player.RepeatMode int repeatMode )` Called when the repeat mode changed. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onShuffleModeChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,boolean)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, boolean shuffleModeEnabled )` Called when the shuffle mode changed. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onSkipSilenceEnabledChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,boolean)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, boolean skipSilenceEnabled )` Called when skipping silences is enabled or disabled in the audio stream. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onSurfaceSizeChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int,int)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, int width, int height )` Called when the output surface size changed. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onTimelineChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, @https://developer.android.com/reference/androidx/media3/common/Player.TimelineChangeReason int reason )` Called when the timeline changed. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onTracksChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.Tracks)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/common/Tracks tracks)` Called when the tracks change. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onUpstreamDiscarded(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.source.MediaLoadData)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData mediaLoadData )` Called when data is removed from the back of a media buffer, typically so that it can be re-buffered in a different format. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onVideoDecoderInitialized(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/java/lang/String.html decoderName, long initializedTimestampMs, long initializationDurationMs )` Called when a video renderer creates a decoder. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onVideoDecoderReleased(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/java/lang/String.html decoderName )` Called when a video renderer releases a decoder. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onVideoDisabled(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.DecoderCounters)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/exoplayer/DecoderCounters decoderCounters )` Called when a video renderer is disabled. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onVideoEnabled(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.DecoderCounters)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/exoplayer/DecoderCounters decoderCounters )` Called when a video renderer is enabled. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onVideoInputFormatChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.Format,androidx.media3.exoplayer.DecoderReuseEvaluation)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/common/Format format, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/DecoderReuseEvaluation decoderReuseEvaluation )` Called when the format of the media being consumed by a video renderer changes. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onVideoSizeChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.VideoSize)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/common/VideoSize videoSize )` 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. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#onVolumeChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,float)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, float volume)` Called when the volume changes. |

| ### Protected methods |
|---|---|
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#logd(java.lang.String)(https://developer.android.com/reference/java/lang/String.html msg)` Logs a debug message. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#loge(java.lang.String)(https://developer.android.com/reference/java/lang/String.html msg)` Logs an error message. |

### Inherited Constants

From [androidx.media3.exoplayer.analytics.AnalyticsListener](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener) `static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_ATTRIBUTES_CHANGED() = 20`

Audio attributes changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_CODEC_ERROR() = 1029`

The audio codec encountered an error.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_DECODER_INITIALIZED() = 1008`

An audio renderer created a decoder.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_DECODER_RELEASED() = 1012`

An audio renderer released a decoder.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_DISABLED() = 1013`

An audio renderer was disabled.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_ENABLED() = 1007`

An audio renderer was enabled.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_INPUT_FORMAT_CHANGED() = 1009`

The format consumed by an audio renderer changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_POSITION_ADVANCING() = 1010`

The audio position has increased for the first time since the last pause or position reset.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_SESSION_ID() = 21`

An audio session id was set.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_SINK_ERROR() = 1014`

The audio sink encountered a non-fatal error.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_TRACK_INITIALIZED() = 1031`

An audio track has been initialized.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_TRACK_RELEASED() = 1032`

An audio track has been released.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AUDIO_UNDERRUN() = 1011`

An audio underrun occurred.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_AVAILABLE_COMMANDS_CHANGED() = 13`

`https://developer.android.com/reference/androidx/media3/common/Player#getAvailableCommands()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_BANDWIDTH_ESTIMATE() = 1006`

The bandwidth estimate has been updated.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_CUES() = 27`

`https://developer.android.com/reference/androidx/media3/common/Player#getCurrentCues()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_DEVICE_INFO_CHANGED() = 29`

`https://developer.android.com/reference/androidx/media3/common/Player#getDeviceInfo()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_DEVICE_VOLUME_CHANGED() = 30`

`https://developer.android.com/reference/androidx/media3/common/Player#getDeviceVolume()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_DOWNSTREAM_FORMAT_CHANGED() = 1004`

The downstream format sent to renderers changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_DRM_KEYS_LOADED() = 1023`

DRM keys were loaded.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_DRM_KEYS_REMOVED() = 1026`

DRM keys were removed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_DRM_KEYS_RESTORED() = 1025`

DRM keys were restored.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_DRM_SESSION_ACQUIRED() = 1022`

A DRM session has been acquired.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_DRM_SESSION_MANAGER_ERROR() = 1024`

A non-fatal DRM session manager error occurred.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_DRM_SESSION_RELEASED() = 1027`

A DRM session has been released.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_DROPPED_SEEKS_WHILE_SCRUBBING() = 1034`

Seeks have been dropped when scrubbing.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_DROPPED_VIDEO_FRAMES() = 1018`

Video frames have been dropped.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_IS_LOADING_CHANGED() = 3`

`https://developer.android.com/reference/androidx/media3/common/Player#isLoading()` ()} changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_IS_PLAYING_CHANGED() = 7`

`https://developer.android.com/reference/androidx/media3/common/Player#isPlaying()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_LOAD_CANCELED() = 1002`

A source canceled loading data.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_LOAD_COMPLETED() = 1001`

A source started completed loading data.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_LOAD_ERROR() = 1003`

A source had a non-fatal error loading data.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_LOAD_STARTED() = 1000`

A source started loading data.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED() = 18`

`https://developer.android.com/reference/androidx/media3/common/Player#getMaxSeekToPreviousPosition()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_MEDIA_ITEM_TRANSITION() = 1`

`https://developer.android.com/reference/androidx/media3/common/Player#getCurrentMediaItem()` changed or the player started repeating the current item.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_MEDIA_METADATA_CHANGED() = 14`

`https://developer.android.com/reference/androidx/media3/common/Player#getMediaMetadata()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_METADATA() = 28`

Metadata associated with the current playback time was reported.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_PLAYBACK_PARAMETERS_CHANGED() = 12`

`https://developer.android.com/reference/androidx/media3/common/Player#getPlaybackParameters()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_PLAYBACK_STATE_CHANGED() = 4`

`https://developer.android.com/reference/androidx/media3/common/Player#getPlaybackState()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED() = 6`

`https://developer.android.com/reference/androidx/media3/common/Player#getPlaybackSuppressionReason()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_PLAYER_ERROR() = 10`

`https://developer.android.com/reference/androidx/media3/common/Player#getPlayerError()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_PLAYER_RELEASED() = 1028`

The player was released.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_PLAYLIST_METADATA_CHANGED() = 15`

`https://developer.android.com/reference/androidx/media3/common/Player#getPlaylistMetadata()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_PLAY_WHEN_READY_CHANGED() = 5`

`https://developer.android.com/reference/androidx/media3/common/Player#getPlayWhenReady()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_POSITION_DISCONTINUITY() = 11`

A position discontinuity occurred.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_RENDERED_FIRST_FRAME() = 26`

The first frame has been rendered since setting the surface, since the renderer was reset or since the stream changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_RENDERER_READY_CHANGED() = 1033`

A renderer changed its readiness for playback.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_REPEAT_MODE_CHANGED() = 8`

`https://developer.android.com/reference/androidx/media3/common/Player#getRepeatMode()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_SEEK_BACK_INCREMENT_CHANGED() = 16`

`https://developer.android.com/reference/androidx/media3/common/Player#getSeekBackIncrement()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_SEEK_FORWARD_INCREMENT_CHANGED() = 17`

`https://developer.android.com/reference/androidx/media3/common/Player#getSeekForwardIncrement()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_SHUFFLE_MODE_ENABLED_CHANGED() = 9`

`https://developer.android.com/reference/androidx/media3/common/Player#getShuffleModeEnabled()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_SKIP_SILENCE_ENABLED_CHANGED() = 23`

Skipping silences was enabled or disabled in the audio stream.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_SURFACE_SIZE_CHANGED() = 24`

The surface size changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_TIMELINE_CHANGED() = 0`

`https://developer.android.com/reference/androidx/media3/common/Player#getCurrentTimeline()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_TRACKS_CHANGED() = 2`

`https://developer.android.com/reference/androidx/media3/common/Player#getCurrentTracks()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_TRACK_SELECTION_PARAMETERS_CHANGED() = 19`

`https://developer.android.com/reference/androidx/media3/common/Player#getTrackSelectionParameters()` changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_UPSTREAM_DISCARDED() = 1005`

Data was removed from the end of the media buffer.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_VIDEO_CODEC_ERROR() = 1030`

The video codec encountered an error.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_VIDEO_DECODER_INITIALIZED() = 1016`

A video renderer created a decoder.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_VIDEO_DECODER_RELEASED() = 1019`

A video renderer released a decoder.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_VIDEO_DISABLED() = 1020`

A video renderer was disabled.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_VIDEO_ENABLED() = 1015`

A video renderer was enabled.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_VIDEO_FRAME_PROCESSING_OFFSET() = 1021`

Video frame processing offset data has been reported.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_VIDEO_INPUT_FORMAT_CHANGED() = 1017`

The format consumed by a video renderer changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_VIDEO_SIZE_CHANGED() = 25`

The video size changed.
`static final int` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#EVENT_VOLUME_CHANGED() = 22`

The volume changed.

### Inherited methods

From [androidx.media3.exoplayer.analytics.AnalyticsListener](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener) `void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onAudioCodecError(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.Exception)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/java/lang/Exception.html audioCodecError

)`

Called when an audio decoder encounters an error.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[onAudioDecoderInitialized](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onAudioDecoderInitialized(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String,long))(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/java/lang/String.html decoderName,

long initializationDurationMs

)`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onAudioDecoderInitialized(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)`.

<br />

`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onAudioSinkError(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.Exception)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/java/lang/Exception.html audioSinkError

)`

Called when `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink` has encountered an error.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onAvailableCommandsChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.Player.Commands)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/androidx/media3/common/Player.Commands availableCommands

)`

Called when the player's available commands changed.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onBandwidthEstimate(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int,long,long)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

int totalLoadTimeMs,

long totalBytesLoaded,

long bitrateEstimate

)`

Called when the bandwidth estimate for the current data source has been updated.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onCues(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.text.CueGroup)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/androidx/media3/common/text/CueGroup cueGroup)`

Called when there is a change in the `https://developer.android.com/reference/androidx/media3/common/text/CueGroup`.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[onCues](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onCues(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.util.List<androidx.media3.common.text.Cue>))(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/common/text/Cue> cues)`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onCues(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.text.CueGroup)` instead.

<br />

`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onDeviceInfoChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.DeviceInfo)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/androidx/media3/common/DeviceInfo deviceInfo

)`

Called when the device information changes
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onDeviceVolumeChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int,boolean)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

int volume,

boolean muted

)`

Called when the device volume or mute state changes.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[onDrmKeysLoaded](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onDrmKeysLoaded(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime))(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime)`

**This method is deprecated.**

Implement `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onDrmKeysLoaded(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.drm.KeyRequestInfo)` instead.

<br />

`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[onDrmSessionAcquired](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onDrmSessionAcquired(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime))(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime)`

**This method is deprecated.**

Implement `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onDrmSessionAcquired(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int)` instead.

<br />

`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onEvents(androidx.media3.common.Player,androidx.media3.exoplayer.analytics.AnalyticsListener.Events)(https://developer.android.com/reference/androidx/media3/common/Player player, https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.Events events)`

Called after one or more events occurred.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onLoadCanceled(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.source.LoadEventInfo,androidx.media3.exoplayer.source.MediaLoadData)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/androidx/media3/exoplayer/source/LoadEventInfo loadEventInfo,

https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData mediaLoadData

)`

Called when a media source canceled loading data.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onLoadCompleted(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.source.LoadEventInfo,androidx.media3.exoplayer.source.MediaLoadData)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/androidx/media3/exoplayer/source/LoadEventInfo loadEventInfo,

https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData mediaLoadData

)`

Called when a media source completed loading data.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[onLoadStarted](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onLoadStarted(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.source.LoadEventInfo,androidx.media3.exoplayer.source.MediaLoadData))(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/androidx/media3/exoplayer/source/LoadEventInfo loadEventInfo,

https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData mediaLoadData

)`

**This method is deprecated.**

Implement `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onLoadStarted(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.source.LoadEventInfo,androidx.media3.exoplayer.source.MediaLoadData,int)` instead, and check for `retryCount == 0` for equivalent behavior.

<br />

`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onLoadStarted(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.exoplayer.source.LoadEventInfo,androidx.media3.exoplayer.source.MediaLoadData,int)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/androidx/media3/exoplayer/source/LoadEventInfo loadEventInfo,

https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData mediaLoadData,

int retryCount

)`

Called when a media source started loading data.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[onLoadingChanged](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onLoadingChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,boolean))(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

boolean isLoading

)`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onIsLoadingChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,boolean)` instead.

<br />

`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onMaxSeekToPreviousPositionChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,long)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

long maxSeekToPreviousPositionMs

)`

Called when the maximum position for which `https://developer.android.com/reference/androidx/media3/common/Player#seekToPrevious()` seeks to the previous window changes.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onMediaMetadataChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.MediaMetadata)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/androidx/media3/common/MediaMetadata mediaMetadata

)`

Called when the combined `https://developer.android.com/reference/androidx/media3/common/MediaMetadata` changes.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onPlayerErrorChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.PlaybackException)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/PlaybackException error

)`

Called when the `https://developer.android.com/reference/androidx/media3/common/PlaybackException` returned by `https://developer.android.com/reference/androidx/media3/common/Player#getPlayerError()` changes.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onPlayerReleased(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime)`

Called when the `https://developer.android.com/reference/androidx/media3/common/Player` is released.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[onPlayerStateChanged](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onPlayerStateChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,boolean,int))(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

boolean playWhenReady,

@https://developer.android.com/reference/androidx/media3/common/Player.State int playbackState

)`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onPlaybackStateChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int)` and `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onPlayWhenReadyChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,boolean,int)` instead.

<br />

`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onPlaylistMetadataChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.MediaMetadata)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/androidx/media3/common/MediaMetadata playlistMetadata

)`

Called when the playlist `https://developer.android.com/reference/androidx/media3/common/MediaMetadata` changes.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[onPositionDiscontinuity](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onPositionDiscontinuity(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int))(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

@https://developer.android.com/reference/androidx/media3/common/Player.DiscontinuityReason int reason

)`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onPositionDiscontinuity(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.Player.PositionInfo,androidx.media3.common.Player.PositionInfo,int)` instead.

<br />

`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onSeekBackIncrementChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,long)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

long seekBackIncrementMs

)`

Called when the seek back increment changed.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onSeekForwardIncrementChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,long)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

long seekForwardIncrementMs

)`

Called when the seek forward increment changed.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[onSeekStarted](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onSeekStarted(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime))(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime)`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onPositionDiscontinuity(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.Player.PositionInfo,androidx.media3.common.Player.PositionInfo,int)` instead, listening to changes with `https://developer.android.com/reference/androidx/media3/common/Player#DISCONTINUITY_REASON_SEEK()`.

<br />

`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onTrackSelectionParametersChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.TrackSelectionParameters)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters

)`

Called when track selection parameters change.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onVideoCodecError(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.Exception)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/java/lang/Exception.html videoCodecError

)`

Called when a video decoder encounters an error.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[onVideoDecoderInitialized](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onVideoDecoderInitialized(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String,long))(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

https://developer.android.com/reference/java/lang/String.html decoderName,

long initializationDurationMs

)`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onVideoDecoderInitialized(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)`.

<br />

`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onVideoFrameProcessingOffset(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,long,int)(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

long totalProcessingOffsetUs,

int frameCount

)`

Called when there is an update to the video frame processing offset reported by a video renderer.
`void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[onVideoSizeChanged](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onVideoSizeChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int,int,int,float))(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime,

int width,

int height,

int unappliedRotationDegrees,

float pixelWidthHeightRatio

)`

**This method is deprecated.**

Implement `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#onVideoSizeChanged(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,androidx.media3.common.VideoSize)` instead.

<br />

## Public constructors

### EventLogger

```
public EventLogger()
```

Creates an instance.

### EventLogger

```
public EventLogger(String tag)
```

Creates an instance.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html tag` | The tag used for logging. |

### EventLogger

```
@UnstableApi
public [EventLogger](https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#EventLogger(androidx.media3.exoplayer.trackselection.MappingTrackSelector))(@Nullable MappingTrackSelector trackSelector)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#EventLogger()`

Creates an instance.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector trackSelector` | This parameter is ignored. |

### EventLogger

```
@UnstableApi
public [EventLogger](https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#EventLogger(androidx.media3.exoplayer.trackselection.MappingTrackSelector,java.lang.String))(@Nullable MappingTrackSelector trackSelector, String tag)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/util/EventLogger#EventLogger(java.lang.String)`

Creates an instance.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector trackSelector` | This parameter is ignored. |
| `https://developer.android.com/reference/java/lang/String.html tag` | The tag used for logging. |

## Public methods

### onAudioAttributesChanged

```
@UnstableApi
public void onAudioAttributesChanged(
    AnalyticsListener.EventTime eventTime,
    AudioAttributes audioAttributes
)
```

Called when the audio attributes change.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/common/AudioAttributes audioAttributes` | The audio attributes. |

### onAudioDecoderInitialized

```
@UnstableApi
public void onAudioDecoderInitialized(
    AnalyticsListener.EventTime eventTime,
    String decoderName,
    long initializedTimestampMs,
    long initializationDurationMs
)
```

Called when an audio renderer creates a decoder.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/java/lang/String.html decoderName` | The decoder that was created. |
| `long initializedTimestampMs` | `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()` when initialization finished. |
| `long initializationDurationMs` | The time taken to initialize the decoder in milliseconds. |

### onAudioDecoderReleased

```
@UnstableApi
public void onAudioDecoderReleased(
    AnalyticsListener.EventTime eventTime,
    String decoderName
)
```

Called when an audio renderer releases a decoder.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/java/lang/String.html decoderName` | The decoder that was released. |

### onAudioDisabled

```
@UnstableApi
public void onAudioDisabled(
    AnalyticsListener.EventTime eventTime,
    DecoderCounters decoderCounters
)
```

Called when an audio renderer is disabled.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/DecoderCounters decoderCounters` | `https://developer.android.com/reference/androidx/media3/exoplayer/DecoderCounters` that were updated by the renderer. |

### onAudioEnabled

```
@UnstableApi
public void onAudioEnabled(
    AnalyticsListener.EventTime eventTime,
    DecoderCounters decoderCounters
)
```

Called when an audio renderer is enabled.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/DecoderCounters decoderCounters` | `https://developer.android.com/reference/androidx/media3/exoplayer/DecoderCounters` that will be updated by the renderer for as long as it remains enabled. |

### onAudioInputFormatChanged

```
@UnstableApi
public void onAudioInputFormatChanged(
    AnalyticsListener.EventTime eventTime,
    Format format,
    @Nullable DecoderReuseEvaluation decoderReuseEvaluation
)
```

Called when the format of the media being consumed by an audio renderer changes.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/common/Format format` | The new format. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/DecoderReuseEvaluation decoderReuseEvaluation` | The result of the evaluation to determine whether an existing decoder instance can be reused for the new format, or `null` if the renderer did not have a decoder. |

### onAudioPositionAdvancing

```
@UnstableApi
public void onAudioPositionAdvancing(
    AnalyticsListener.EventTime eventTime,
    long playoutStartSystemTimeMs
)
```

Called when the audio position has increased for the first time since the last pause or position reset.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `long playoutStartSystemTimeMs` | The approximate derived `https://developer.android.com/reference/java/lang/System.html#currentTimeMillis()` at which playout started. |

### onAudioSessionIdChanged

```
@UnstableApi
public void onAudioSessionIdChanged(
    AnalyticsListener.EventTime eventTime,
    int audioSessionId
)
```

Called when the audio session ID changes.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `int audioSessionId` | The audio session ID. |

### onAudioTrackInitialized

```
@UnstableApi
public void onAudioTrackInitialized(
    AnalyticsListener.EventTime eventTime,
    AudioSink.AudioTrackConfig audioTrackConfig
)
```

Called when an `https://developer.android.com/reference/android/media/AudioTrack.html` has been initialized.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.AudioTrackConfig audioTrackConfig` | The `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.AudioTrackConfig` of the initialized `https://developer.android.com/reference/android/media/AudioTrack.html`. |

### onAudioTrackReleased

```
@UnstableApi
public void onAudioTrackReleased(
    AnalyticsListener.EventTime eventTime,
    AudioSink.AudioTrackConfig audioTrackConfig
)
```

Called when an `https://developer.android.com/reference/android/media/AudioTrack.html` has been released.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.AudioTrackConfig audioTrackConfig` | The `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.AudioTrackConfig` of the released `https://developer.android.com/reference/android/media/AudioTrack.html`. |

### onAudioUnderrun

```
@UnstableApi
public void onAudioUnderrun(
    AnalyticsListener.EventTime eventTime,
    int bufferSize,
    long bufferSizeMs,
    long elapsedSinceLastFeedMs
)
```

Called when an audio underrun occurs.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `int bufferSize` | The size of the audio output buffer, in bytes. |
| `long bufferSizeMs` | The size of the audio output buffer, in milliseconds, if it contains PCM encoded audio. `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if the output buffer contains non-PCM encoded audio. |
| `long elapsedSinceLastFeedMs` | The time since audio was last written to the output buffer. |

### onDownstreamFormatChanged

```
@UnstableApi
public void onDownstreamFormatChanged(
    AnalyticsListener.EventTime eventTime,
    MediaLoadData mediaLoadData
)
```

Called when the downstream format sent to the renderers changed.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData mediaLoadData` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData` defining the newly selected media data. |

### onDrmKeysLoaded

```
@UnstableApi
public void onDrmKeysLoaded(
    AnalyticsListener.EventTime eventTime,
    KeyRequestInfo keyRequestInfo
)
```

Called each time drm keys are loaded.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/KeyRequestInfo keyRequestInfo` | information for any required load operation, null if none |

### onDrmKeysRemoved

```
@UnstableApi
public void onDrmKeysRemoved(AnalyticsListener.EventTime eventTime)
```

Called each time offline drm keys are removed.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |

### onDrmKeysRestored

```
@UnstableApi
public void onDrmKeysRestored(AnalyticsListener.EventTime eventTime)
```

Called each time offline drm keys are restored.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |

### onDrmSessionAcquired

```
@UnstableApi
public void onDrmSessionAcquired(
    AnalyticsListener.EventTime eventTime,
    @DrmSession.State int state
)
```

Called each time a drm session is acquired.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSession.State int state` | The `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSession.State` of the session when the acquisition completed. |

### onDrmSessionManagerError

```
@UnstableApi
public void onDrmSessionManagerError(
    AnalyticsListener.EventTime eventTime,
    Exception error
)
```

Called when a drm error occurs.

This method being called does not indicate that playback has failed, or that it will fail. The player may be able to recover from the error. Hence applications should *not* implement this method to display a user visible error or initiate an application level retry. `https://developer.android.com/reference/androidx/media3/common/Player.Listener#onPlayerError(androidx.media3.common.PlaybackException)` is the appropriate place to implement such behavior. This method is called to provide the application with an opportunity to log the error if it wishes to do so.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/java/lang/Exception.html error` | The error. |

### onDrmSessionReleased

```
@UnstableApi
public void onDrmSessionReleased(AnalyticsListener.EventTime eventTime)
```

Called each time a drm session is released.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |

### onDroppedSeeksWhileScrubbing

```
@UnstableApi
public void onDroppedSeeksWhileScrubbing(
    AnalyticsListener.EventTime eventTime,
    int droppedSeeks
)
```

Called when seeks have been dropped while in `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer#setScrubbingModeEnabled(boolean)`.

Seeks are dropped in scrubbing mode when at least two calls are made to `https://developer.android.com/reference/androidx/media3/common/Player#seekTo(long)` while an earlier call to `https://developer.android.com/reference/androidx/media3/common/Player#seekTo(long)` is still being processed (i.e. the resulting frame hasn't been rendered/released yet). The most recent seek is queued to process later and any intermediate seeks are dropped.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `int droppedSeeks` | The number of dropped seeks since the last call to this method. |

### onDroppedVideoFrames

```
@UnstableApi
public void onDroppedVideoFrames(
    AnalyticsListener.EventTime eventTime,
    int droppedFrames,
    long elapsedMs
)
```

Called after video frames have been dropped.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `int droppedFrames` | The number of dropped frames since the last call to this method. |
| `long elapsedMs` | The duration in milliseconds over which the frames were dropped. This duration is timed from when the renderer was started or from when dropped frames were last reported (whichever was more recent), and not from when the first of the reported drops occurred. |

### onIsLoadingChanged

```
@UnstableApi
public void onIsLoadingChanged(
    AnalyticsListener.EventTime eventTime,
    boolean isLoading
)
```

Called when the player starts or stops loading data from a source.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `boolean isLoading` | Whether the player is loading. |

### onIsPlayingChanged

```
@UnstableApi
public void onIsPlayingChanged(
    AnalyticsListener.EventTime eventTime,
    boolean isPlaying
)
```

Called when the player starts or stops playing.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `boolean isPlaying` | Whether the player is playing. |

### onLoadError

```
@UnstableApi
public void onLoadError(
    AnalyticsListener.EventTime eventTime,
    LoadEventInfo loadEventInfo,
    MediaLoadData mediaLoadData,
    IOException error,
    boolean wasCanceled
)
```

Called when a media source loading error occurred.

This method being called does not indicate that playback has failed, or that it will fail. The player may be able to recover from the error. Hence applications should *not* implement this method to display a user visible error or initiate an application level retry. `https://developer.android.com/reference/androidx/media3/common/Player.Listener#onPlayerError(androidx.media3.common.PlaybackException)` is the appropriate place to implement such behavior. This method is called to provide the application with an opportunity to log the error if it wishes to do so.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/LoadEventInfo loadEventInfo` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/LoadEventInfo` defining the load event. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData mediaLoadData` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData` defining the data being loaded. |
| `https://developer.android.com/reference/java/io/IOException.html error` | The load error. |
| `boolean wasCanceled` | Whether the load was canceled as a result of the error. |

### onMediaItemTransition

```
@UnstableApi
public void onMediaItemTransition(
    AnalyticsListener.EventTime eventTime,
    @Nullable MediaItem mediaItem,
    int reason
)
```

Called when playback transitions to a different media item.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem` | The media item. |
| `int reason` | The reason for the media item transition. |

### onMetadata

```
@UnstableApi
public void onMetadata(AnalyticsListener.EventTime eventTime, Metadata metadata)
```

Called when there is `https://developer.android.com/reference/androidx/media3/common/Metadata` associated with the current playback time.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/common/Metadata metadata` | The metadata. |

### onPlayWhenReadyChanged

```
@UnstableApi
public void onPlayWhenReadyChanged(
    AnalyticsListener.EventTime eventTime,
    boolean playWhenReady,
    @Player.PlayWhenReadyChangeReason int reason
)
```

Called when the value changed that indicates whether playback will proceed when ready.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `boolean playWhenReady` | Whether playback will proceed when ready. |
| `@https://developer.android.com/reference/androidx/media3/common/Player.PlayWhenReadyChangeReason int reason` | The `https://developer.android.com/reference/androidx/media3/common/Player.PlayWhenReadyChangeReason` of the change. |

### onPlaybackParametersChanged

```
@UnstableApi
public void onPlaybackParametersChanged(
    AnalyticsListener.EventTime eventTime,
    PlaybackParameters playbackParameters
)
```

Called when the playback parameters changed.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/common/PlaybackParameters playbackParameters` | The new playback parameters. |

### onPlaybackStateChanged

```
@UnstableApi
public void onPlaybackStateChanged(
    AnalyticsListener.EventTime eventTime,
    @Player.State int state
)
```

Called when the playback state changed.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `@https://developer.android.com/reference/androidx/media3/common/Player.State int state` | The new `https://developer.android.com/reference/androidx/media3/common/Player.State`. |

### onPlaybackSuppressionReasonChanged

```
@UnstableApi
public void onPlaybackSuppressionReasonChanged(
    AnalyticsListener.EventTime eventTime,
    @Player.PlaybackSuppressionReason int playbackSuppressionReason
)
```

Called when playback suppression reason changed.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `@https://developer.android.com/reference/androidx/media3/common/Player.PlaybackSuppressionReason int playbackSuppressionReason` | The new `https://developer.android.com/reference/androidx/media3/common/Player.PlaybackSuppressionReason`. |

### onPlayerError

```
@UnstableApi
public void onPlayerError(
    AnalyticsListener.EventTime eventTime,
    PlaybackException error
)
```

Called when a fatal player error occurred.

Implementations of `https://developer.android.com/reference/androidx/media3/common/Player` may pass an instance of a subclass of `https://developer.android.com/reference/androidx/media3/common/PlaybackException` to this method in order to include more information about the error.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/common/PlaybackException error` | The error. |

### onPositionDiscontinuity

```
@UnstableApi
public void onPositionDiscontinuity(
    AnalyticsListener.EventTime eventTime,
    Player.PositionInfo oldPosition,
    Player.PositionInfo newPosition,
    @Player.DiscontinuityReason int reason
)
```

Called when a position discontinuity occurred.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/common/Player.PositionInfo oldPosition` | The position before the discontinuity. |
| `https://developer.android.com/reference/androidx/media3/common/Player.PositionInfo newPosition` | The position after the discontinuity. |
| `@https://developer.android.com/reference/androidx/media3/common/Player.DiscontinuityReason int reason` | The reason for the position discontinuity. |

### onRenderedFirstFrame

```
@UnstableApi
public void onRenderedFirstFrame(
    AnalyticsListener.EventTime eventTime,
    Object output,
    long renderTimeMs
)
```

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.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/java/lang/Object.html output` | The output to which a frame has been rendered. Normally a `https://developer.android.com/reference/android/view/Surface.html`, however may also be other output types (e.g., a `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoDecoderOutputBufferRenderer`). |
| `long renderTimeMs` | `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()` when the first frame was rendered. |

### onRendererReadyChanged

```
@UnstableApi
public void onRendererReadyChanged(
    AnalyticsListener.EventTime eventTime,
    int rendererIndex,
    @C.TrackType int rendererTrackType,
    boolean isRendererReady
)
```

Called each time a renderer starts or stops allowing playback to be ready.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `int rendererIndex` | The index of the renderer in the `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer` instance. |
| `@https://developer.android.com/reference/androidx/media3/common/C.TrackType int rendererTrackType` | The `https://developer.android.com/reference/androidx/media3/common/C.TrackType` of the renderer. |
| `boolean isRendererReady` | Whether the renderer allows playback to be ready. |

### onRepeatModeChanged

```
@UnstableApi
public void onRepeatModeChanged(
    AnalyticsListener.EventTime eventTime,
    @Player.RepeatMode int repeatMode
)
```

Called when the repeat mode changed.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `@https://developer.android.com/reference/androidx/media3/common/Player.RepeatMode int repeatMode` | The new repeat mode. |

### onShuffleModeChanged

```
@UnstableApi
public void onShuffleModeChanged(
    AnalyticsListener.EventTime eventTime,
    boolean shuffleModeEnabled
)
```

Called when the shuffle mode changed.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `boolean shuffleModeEnabled` | Whether the shuffle mode is enabled. |

### onSkipSilenceEnabledChanged

```
@UnstableApi
public void onSkipSilenceEnabledChanged(
    AnalyticsListener.EventTime eventTime,
    boolean skipSilenceEnabled
)
```

Called when skipping silences is enabled or disabled in the audio stream.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `boolean skipSilenceEnabled` | Whether skipping silences in the audio stream is enabled. |

### onSurfaceSizeChanged

```
@UnstableApi
public void onSurfaceSizeChanged(
    AnalyticsListener.EventTime eventTime,
    int width,
    int height
)
```

Called when the output surface size changed.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `int width` | The surface width in pixels. May be `https://developer.android.com/reference/androidx/media3/common/C#LENGTH_UNSET()` if unknown, or 0 if the video is not rendered onto a surface. |
| `int height` | The surface height in pixels. May be `https://developer.android.com/reference/androidx/media3/common/C#LENGTH_UNSET()` if unknown, or 0 if the video is not rendered onto a surface. |

### onTimelineChanged

```
@UnstableApi
public void onTimelineChanged(
    AnalyticsListener.EventTime eventTime,
    @Player.TimelineChangeReason int reason
)
```

Called when the timeline changed.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `@https://developer.android.com/reference/androidx/media3/common/Player.TimelineChangeReason int reason` | The reason for the timeline change. |

### onTracksChanged

```
@UnstableApi
public void onTracksChanged(AnalyticsListener.EventTime eventTime, Tracks tracks)
```

Called when the tracks change.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/common/Tracks tracks` | The tracks. Never null, but may be of length zero. |

### onUpstreamDiscarded

```
@UnstableApi
public void onUpstreamDiscarded(
    AnalyticsListener.EventTime eventTime,
    MediaLoadData mediaLoadData
)
```

Called when data is removed from the back of a media buffer, typically so that it can be re-buffered in a different format.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData mediaLoadData` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaLoadData` defining the media being discarded. |

### onVideoDecoderInitialized

```
@UnstableApi
public void onVideoDecoderInitialized(
    AnalyticsListener.EventTime eventTime,
    String decoderName,
    long initializedTimestampMs,
    long initializationDurationMs
)
```

Called when a video renderer creates a decoder.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/java/lang/String.html decoderName` | The decoder that was created. |
| `long initializedTimestampMs` | `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()` when initialization finished. |
| `long initializationDurationMs` | The time taken to initialize the decoder in milliseconds. |

### onVideoDecoderReleased

```
@UnstableApi
public void onVideoDecoderReleased(
    AnalyticsListener.EventTime eventTime,
    String decoderName
)
```

Called when a video renderer releases a decoder.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/java/lang/String.html decoderName` | The decoder that was released. |

### onVideoDisabled

```
@UnstableApi
public void onVideoDisabled(
    AnalyticsListener.EventTime eventTime,
    DecoderCounters decoderCounters
)
```

Called when a video renderer is disabled.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/DecoderCounters decoderCounters` | `https://developer.android.com/reference/androidx/media3/exoplayer/DecoderCounters` that were updated by the renderer. |

### onVideoEnabled

```
@UnstableApi
public void onVideoEnabled(
    AnalyticsListener.EventTime eventTime,
    DecoderCounters decoderCounters
)
```

Called when a video renderer is enabled.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/DecoderCounters decoderCounters` | `https://developer.android.com/reference/androidx/media3/exoplayer/DecoderCounters` that will be updated by the renderer for as long as it remains enabled. |

### onVideoInputFormatChanged

```
@UnstableApi
public void onVideoInputFormatChanged(
    AnalyticsListener.EventTime eventTime,
    Format format,
    @Nullable DecoderReuseEvaluation decoderReuseEvaluation
)
```

Called when the format of the media being consumed by a video renderer changes.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/common/Format format` | The new format. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/DecoderReuseEvaluation decoderReuseEvaluation` | The result of the evaluation to determine whether an existing decoder instance can be reused for the new format, or `null` if the renderer did not have a decoder. |

### onVideoSizeChanged

```
@UnstableApi
public void onVideoSizeChanged(
    AnalyticsListener.EventTime eventTime,
    VideoSize videoSize
)
```

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.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `https://developer.android.com/reference/androidx/media3/common/VideoSize videoSize` | The new size of the video. |

### onVolumeChanged

```
@UnstableApi
public void onVolumeChanged(AnalyticsListener.EventTime eventTime, float volume)
```

Called when the volume changes.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time. |
| `float volume` | The new volume, with 0 being silence and 1 being unity gain. |

## Protected methods

### logd

```
@UnstableApi
protected void logd(String msg)
```

Logs a debug message.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html msg` | The message to log. |

### loge

```
@UnstableApi
protected void loge(String msg)
```

Logs an error message.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html msg` | The message to log. |