# ReleaseListener

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

*** ** * ** ***


```
@UnstableApi
public final class ReleaseListener implements AnalyticsListener
```

<br />

*** ** * ** ***

A shared `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener` implementation for waiting until `https://developer.android.com/reference/androidx/media3/test/utils/ReleaseListener#onPlayerReleased(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime)` is called and all background events have been delivered.

## Summary

| ### Public fields |
|---|---|
| `boolean` | `https://developer.android.com/reference/androidx/media3/test/utils/ReleaseListener#isReleased()` |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/test/utils/ReleaseListener#ReleaseListener()()` |

| ### Public methods |
|---|---|
| `boolean` | `https://developer.android.com/reference/androidx/media3/test/utils/ReleaseListener#isReleased()()` Returns whether the player release callback has been received. |
| `void` | `https://developer.android.com/reference/androidx/media3/test/utils/ReleaseListener#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. |

| ### 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#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/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#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/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#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/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 https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#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 [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 https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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 [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#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/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#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/analytics/AnalyticsListener#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/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 https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#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 [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#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, @https://developer.android.com/reference/androidx/media3/common/Player.MediaItemTransitionReason 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/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#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/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 [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#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/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#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/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#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/analytics/AnalyticsListener#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/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#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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/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 https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#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/analytics/AnalyticsListener#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 [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 /> | | `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener#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. | |

## Public fields

### isReleased

```
public boolean isReleased
```

## Public constructors

### ReleaseListener

```
public ReleaseListener()
```

## Public methods

### isReleased

```
public boolean isReleased()
```

Returns whether the player release callback has been received.

### onPlayerReleased

```
public void onPlayerReleased(AnalyticsListener.EventTime eventTime)
```

Called when the `https://developer.android.com/reference/androidx/media3/common/Player` is released.

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