From 3dff9fbe36e9632f3d203509efa58b2a711776e4 Mon Sep 17 00:00:00 2001 From: ibaker Date: Fri, 29 Apr 2022 16:01:38 +0100 Subject: [PATCH] Allow users of the stable API to register an EventLogger Overriding any methods of AnalyticsListener requires using the unstable API. In future we can incrementally add AnalyticsListener methods to the stable API. PiperOrigin-RevId: 445420361 --- .../androidx/media3/exoplayer/ExoPlayer.java | 2 - .../analytics/AnalyticsListener.java | 202 +++++++++++++----- .../media3/exoplayer/util/EventLogger.java | 51 ++++- 3 files changed, 194 insertions(+), 61 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java index 52849a580f..4dc3f66026 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java @@ -1175,7 +1175,6 @@ public interface ExoPlayer extends Player { * * @param listener The listener to be added. */ - @UnstableApi void addAnalyticsListener(AnalyticsListener listener); /** @@ -1183,7 +1182,6 @@ public interface ExoPlayer extends Player { * * @param listener The listener to be removed. */ - @UnstableApi void removeAnalyticsListener(AnalyticsListener listener); /** Returns the number of renderers. */ diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/analytics/AnalyticsListener.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/analytics/AnalyticsListener.java index 31ea116b57..2c9345409f 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/analytics/AnalyticsListener.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/analytics/AnalyticsListener.java @@ -81,10 +81,10 @@ import java.util.List; * #onIsPlayingChanged(EventTime, boolean)}) or {@link #onEvents(Player, Events)}, which is called * after one or more events occurred together. */ -@UnstableApi public interface AnalyticsListener { /** A set of {@link EventFlags}. */ + @UnstableApi final class Events { private final FlagSet flags; @@ -164,6 +164,7 @@ public interface AnalyticsListener { */ // @Target list includes both 'default' targets and TYPE_USE, to ensure backwards compatibility // with Kotlin usages from before TYPE_USE was added. + @UnstableApi @Documented @Retention(RetentionPolicy.SOURCE) @Target({FIELD, METHOD, PARAMETER, LOCAL_VARIABLE, TYPE_USE}) @@ -233,140 +234,146 @@ public interface AnalyticsListener { }) @interface EventFlags {} /** {@link Player#getCurrentTimeline()} changed. */ - int EVENT_TIMELINE_CHANGED = Player.EVENT_TIMELINE_CHANGED; + @UnstableApi int EVENT_TIMELINE_CHANGED = Player.EVENT_TIMELINE_CHANGED; /** * {@link Player#getCurrentMediaItem()} changed or the player started repeating the current item. */ - int EVENT_MEDIA_ITEM_TRANSITION = Player.EVENT_MEDIA_ITEM_TRANSITION; + @UnstableApi int EVENT_MEDIA_ITEM_TRANSITION = Player.EVENT_MEDIA_ITEM_TRANSITION; /** {@link Player#getCurrentTracks()} changed. */ - int EVENT_TRACKS_CHANGED = Player.EVENT_TRACKS_CHANGED; + @UnstableApi int EVENT_TRACKS_CHANGED = Player.EVENT_TRACKS_CHANGED; /** {@link Player#isLoading()} ()} changed. */ - int EVENT_IS_LOADING_CHANGED = Player.EVENT_IS_LOADING_CHANGED; + @UnstableApi int EVENT_IS_LOADING_CHANGED = Player.EVENT_IS_LOADING_CHANGED; /** {@link Player#getPlaybackState()} changed. */ - int EVENT_PLAYBACK_STATE_CHANGED = Player.EVENT_PLAYBACK_STATE_CHANGED; + @UnstableApi int EVENT_PLAYBACK_STATE_CHANGED = Player.EVENT_PLAYBACK_STATE_CHANGED; /** {@link Player#getPlayWhenReady()} changed. */ - int EVENT_PLAY_WHEN_READY_CHANGED = Player.EVENT_PLAY_WHEN_READY_CHANGED; + @UnstableApi int EVENT_PLAY_WHEN_READY_CHANGED = Player.EVENT_PLAY_WHEN_READY_CHANGED; /** {@link Player#getPlaybackSuppressionReason()} changed. */ + @UnstableApi int EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED = Player.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED; /** {@link Player#isPlaying()} changed. */ - int EVENT_IS_PLAYING_CHANGED = Player.EVENT_IS_PLAYING_CHANGED; + @UnstableApi int EVENT_IS_PLAYING_CHANGED = Player.EVENT_IS_PLAYING_CHANGED; /** {@link Player#getRepeatMode()} changed. */ - int EVENT_REPEAT_MODE_CHANGED = Player.EVENT_REPEAT_MODE_CHANGED; + @UnstableApi int EVENT_REPEAT_MODE_CHANGED = Player.EVENT_REPEAT_MODE_CHANGED; /** {@link Player#getShuffleModeEnabled()} changed. */ - int EVENT_SHUFFLE_MODE_ENABLED_CHANGED = Player.EVENT_SHUFFLE_MODE_ENABLED_CHANGED; + @UnstableApi int EVENT_SHUFFLE_MODE_ENABLED_CHANGED = Player.EVENT_SHUFFLE_MODE_ENABLED_CHANGED; /** {@link Player#getPlayerError()} changed. */ - int EVENT_PLAYER_ERROR = Player.EVENT_PLAYER_ERROR; + @UnstableApi int EVENT_PLAYER_ERROR = Player.EVENT_PLAYER_ERROR; /** * A position discontinuity occurred. See {@link * Player.Listener#onPositionDiscontinuity(Player.PositionInfo, Player.PositionInfo, int)}. */ - int EVENT_POSITION_DISCONTINUITY = Player.EVENT_POSITION_DISCONTINUITY; + @UnstableApi int EVENT_POSITION_DISCONTINUITY = Player.EVENT_POSITION_DISCONTINUITY; /** {@link Player#getPlaybackParameters()} changed. */ - int EVENT_PLAYBACK_PARAMETERS_CHANGED = Player.EVENT_PLAYBACK_PARAMETERS_CHANGED; + @UnstableApi int EVENT_PLAYBACK_PARAMETERS_CHANGED = Player.EVENT_PLAYBACK_PARAMETERS_CHANGED; /** {@link Player#getAvailableCommands()} changed. */ - int EVENT_AVAILABLE_COMMANDS_CHANGED = Player.EVENT_AVAILABLE_COMMANDS_CHANGED; + @UnstableApi int EVENT_AVAILABLE_COMMANDS_CHANGED = Player.EVENT_AVAILABLE_COMMANDS_CHANGED; /** {@link Player#getMediaMetadata()} changed. */ - int EVENT_MEDIA_METADATA_CHANGED = Player.EVENT_MEDIA_METADATA_CHANGED; + @UnstableApi int EVENT_MEDIA_METADATA_CHANGED = Player.EVENT_MEDIA_METADATA_CHANGED; /** {@link Player#getPlaylistMetadata()} changed. */ - int EVENT_PLAYLIST_METADATA_CHANGED = Player.EVENT_PLAYLIST_METADATA_CHANGED; + @UnstableApi int EVENT_PLAYLIST_METADATA_CHANGED = Player.EVENT_PLAYLIST_METADATA_CHANGED; /** {@link Player#getSeekBackIncrement()} changed. */ - int EVENT_SEEK_BACK_INCREMENT_CHANGED = Player.EVENT_SEEK_BACK_INCREMENT_CHANGED; + @UnstableApi int EVENT_SEEK_BACK_INCREMENT_CHANGED = Player.EVENT_SEEK_BACK_INCREMENT_CHANGED; /** {@link Player#getSeekForwardIncrement()} changed. */ + @UnstableApi int EVENT_SEEK_FORWARD_INCREMENT_CHANGED = Player.EVENT_SEEK_FORWARD_INCREMENT_CHANGED; /** {@link Player#getMaxSeekToPreviousPosition()} changed. */ + @UnstableApi int EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED = Player.EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED; /** {@link Player#getTrackSelectionParameters()} changed. */ + @UnstableApi int EVENT_TRACK_SELECTION_PARAMETERS_CHANGED = Player.EVENT_TRACK_SELECTION_PARAMETERS_CHANGED; /** Audio attributes changed. */ - int EVENT_AUDIO_ATTRIBUTES_CHANGED = Player.EVENT_AUDIO_ATTRIBUTES_CHANGED; + @UnstableApi int EVENT_AUDIO_ATTRIBUTES_CHANGED = Player.EVENT_AUDIO_ATTRIBUTES_CHANGED; /** An audio session id was set. */ - int EVENT_AUDIO_SESSION_ID = Player.EVENT_AUDIO_SESSION_ID; + @UnstableApi int EVENT_AUDIO_SESSION_ID = Player.EVENT_AUDIO_SESSION_ID; /** The volume changed. */ - int EVENT_VOLUME_CHANGED = Player.EVENT_VOLUME_CHANGED; + @UnstableApi int EVENT_VOLUME_CHANGED = Player.EVENT_VOLUME_CHANGED; /** Skipping silences was enabled or disabled in the audio stream. */ - int EVENT_SKIP_SILENCE_ENABLED_CHANGED = Player.EVENT_SKIP_SILENCE_ENABLED_CHANGED; + @UnstableApi int EVENT_SKIP_SILENCE_ENABLED_CHANGED = Player.EVENT_SKIP_SILENCE_ENABLED_CHANGED; /** The surface size changed. */ - int EVENT_SURFACE_SIZE_CHANGED = Player.EVENT_SURFACE_SIZE_CHANGED; + @UnstableApi int EVENT_SURFACE_SIZE_CHANGED = Player.EVENT_SURFACE_SIZE_CHANGED; /** The video size changed. */ - int EVENT_VIDEO_SIZE_CHANGED = Player.EVENT_VIDEO_SIZE_CHANGED; + @UnstableApi int EVENT_VIDEO_SIZE_CHANGED = Player.EVENT_VIDEO_SIZE_CHANGED; /** * The first frame has been rendered since setting the surface, since the renderer was reset or * since the stream changed. */ - int EVENT_RENDERED_FIRST_FRAME = Player.EVENT_RENDERED_FIRST_FRAME; + @UnstableApi int EVENT_RENDERED_FIRST_FRAME = Player.EVENT_RENDERED_FIRST_FRAME; /** Metadata associated with the current playback time was reported. */ - int EVENT_METADATA = Player.EVENT_METADATA; + @UnstableApi int EVENT_METADATA = Player.EVENT_METADATA; /** {@link Player#getCurrentCues()} changed. */ - int EVENT_CUES = Player.EVENT_CUES; + @UnstableApi int EVENT_CUES = Player.EVENT_CUES; /** {@link Player#getDeviceInfo()} changed. */ - int EVENT_DEVICE_INFO_CHANGED = Player.EVENT_DEVICE_INFO_CHANGED; + @UnstableApi int EVENT_DEVICE_INFO_CHANGED = Player.EVENT_DEVICE_INFO_CHANGED; /** {@link Player#getDeviceVolume()} changed. */ - int EVENT_DEVICE_VOLUME_CHANGED = Player.EVENT_DEVICE_VOLUME_CHANGED; + @UnstableApi int EVENT_DEVICE_VOLUME_CHANGED = Player.EVENT_DEVICE_VOLUME_CHANGED; /** A source started loading data. */ + @UnstableApi int EVENT_LOAD_STARTED = 1000; // Intentional gap to leave space for new Player events /** A source started completed loading data. */ - int EVENT_LOAD_COMPLETED = 1001; + @UnstableApi int EVENT_LOAD_COMPLETED = 1001; /** A source canceled loading data. */ - int EVENT_LOAD_CANCELED = 1002; + @UnstableApi int EVENT_LOAD_CANCELED = 1002; /** A source had a non-fatal error loading data. */ - int EVENT_LOAD_ERROR = 1003; + @UnstableApi int EVENT_LOAD_ERROR = 1003; /** The downstream format sent to renderers changed. */ - int EVENT_DOWNSTREAM_FORMAT_CHANGED = 1004; + @UnstableApi int EVENT_DOWNSTREAM_FORMAT_CHANGED = 1004; /** Data was removed from the end of the media buffer. */ - int EVENT_UPSTREAM_DISCARDED = 1005; + @UnstableApi int EVENT_UPSTREAM_DISCARDED = 1005; /** The bandwidth estimate has been updated. */ - int EVENT_BANDWIDTH_ESTIMATE = 1006; + @UnstableApi int EVENT_BANDWIDTH_ESTIMATE = 1006; /** An audio renderer was enabled. */ - int EVENT_AUDIO_ENABLED = 1007; + @UnstableApi int EVENT_AUDIO_ENABLED = 1007; /** An audio renderer created a decoder. */ - int EVENT_AUDIO_DECODER_INITIALIZED = 1008; + @UnstableApi int EVENT_AUDIO_DECODER_INITIALIZED = 1008; /** The format consumed by an audio renderer changed. */ - int EVENT_AUDIO_INPUT_FORMAT_CHANGED = 1009; + @UnstableApi int EVENT_AUDIO_INPUT_FORMAT_CHANGED = 1009; /** The audio position has increased for the first time since the last pause or position reset. */ - int EVENT_AUDIO_POSITION_ADVANCING = 1010; + @UnstableApi int EVENT_AUDIO_POSITION_ADVANCING = 1010; /** An audio underrun occurred. */ - int EVENT_AUDIO_UNDERRUN = 1011; + @UnstableApi int EVENT_AUDIO_UNDERRUN = 1011; /** An audio renderer released a decoder. */ - int EVENT_AUDIO_DECODER_RELEASED = 1012; + @UnstableApi int EVENT_AUDIO_DECODER_RELEASED = 1012; /** An audio renderer was disabled. */ - int EVENT_AUDIO_DISABLED = 1013; + @UnstableApi int EVENT_AUDIO_DISABLED = 1013; /** The audio sink encountered a non-fatal error. */ - int EVENT_AUDIO_SINK_ERROR = 1014; + @UnstableApi int EVENT_AUDIO_SINK_ERROR = 1014; /** A video renderer was enabled. */ - int EVENT_VIDEO_ENABLED = 1015; + @UnstableApi int EVENT_VIDEO_ENABLED = 1015; /** A video renderer created a decoder. */ - int EVENT_VIDEO_DECODER_INITIALIZED = 1016; + @UnstableApi int EVENT_VIDEO_DECODER_INITIALIZED = 1016; /** The format consumed by a video renderer changed. */ - int EVENT_VIDEO_INPUT_FORMAT_CHANGED = 1017; + @UnstableApi int EVENT_VIDEO_INPUT_FORMAT_CHANGED = 1017; /** Video frames have been dropped. */ - int EVENT_DROPPED_VIDEO_FRAMES = 1018; + @UnstableApi int EVENT_DROPPED_VIDEO_FRAMES = 1018; /** A video renderer released a decoder. */ - int EVENT_VIDEO_DECODER_RELEASED = 1019; + @UnstableApi int EVENT_VIDEO_DECODER_RELEASED = 1019; /** A video renderer was disabled. */ - int EVENT_VIDEO_DISABLED = 1020; + @UnstableApi int EVENT_VIDEO_DISABLED = 1020; /** Video frame processing offset data has been reported. */ - int EVENT_VIDEO_FRAME_PROCESSING_OFFSET = 1021; + @UnstableApi int EVENT_VIDEO_FRAME_PROCESSING_OFFSET = 1021; /** A DRM session has been acquired. */ - int EVENT_DRM_SESSION_ACQUIRED = 1022; + @UnstableApi int EVENT_DRM_SESSION_ACQUIRED = 1022; /** DRM keys were loaded. */ - int EVENT_DRM_KEYS_LOADED = 1023; + @UnstableApi int EVENT_DRM_KEYS_LOADED = 1023; /** A non-fatal DRM session manager error occurred. */ - int EVENT_DRM_SESSION_MANAGER_ERROR = 1024; + @UnstableApi int EVENT_DRM_SESSION_MANAGER_ERROR = 1024; /** DRM keys were restored. */ - int EVENT_DRM_KEYS_RESTORED = 1025; + @UnstableApi int EVENT_DRM_KEYS_RESTORED = 1025; /** DRM keys were removed. */ - int EVENT_DRM_KEYS_REMOVED = 1026; + @UnstableApi int EVENT_DRM_KEYS_REMOVED = 1026; /** A DRM session has been released. */ - int EVENT_DRM_SESSION_RELEASED = 1027; + @UnstableApi int EVENT_DRM_SESSION_RELEASED = 1027; /** The player was released. */ - int EVENT_PLAYER_RELEASED = 1028; + @UnstableApi int EVENT_PLAYER_RELEASED = 1028; /** The audio codec encountered an error. */ - int EVENT_AUDIO_CODEC_ERROR = 1029; + @UnstableApi int EVENT_AUDIO_CODEC_ERROR = 1029; /** The video codec encountered an error. */ - int EVENT_VIDEO_CODEC_ERROR = 1030; + @UnstableApi int EVENT_VIDEO_CODEC_ERROR = 1030; /** Time information of an event. */ + @UnstableApi final class EventTime { /** @@ -515,6 +522,7 @@ public interface AnalyticsListener { * @deprecated Use {@link #onPlaybackStateChanged(EventTime, int)} and {@link * #onPlayWhenReadyChanged(EventTime, boolean, int)} instead. */ + @UnstableApi @Deprecated default void onPlayerStateChanged( EventTime eventTime, boolean playWhenReady, @Player.State int playbackState) {} @@ -525,6 +533,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param state The new {@link Player.State playback state}. */ + @UnstableApi default void onPlaybackStateChanged(EventTime eventTime, @Player.State int state) {} /** @@ -534,6 +543,7 @@ public interface AnalyticsListener { * @param playWhenReady Whether playback will proceed when ready. * @param reason The {@link Player.PlayWhenReadyChangeReason reason} of the change. */ + @UnstableApi default void onPlayWhenReadyChanged( EventTime eventTime, boolean playWhenReady, @Player.PlayWhenReadyChangeReason int reason) {} @@ -543,6 +553,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param playbackSuppressionReason The new {@link PlaybackSuppressionReason}. */ + @UnstableApi default void onPlaybackSuppressionReasonChanged( EventTime eventTime, @PlaybackSuppressionReason int playbackSuppressionReason) {} @@ -552,6 +563,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param isPlaying Whether the player is playing. */ + @UnstableApi default void onIsPlayingChanged(EventTime eventTime, boolean isPlaying) {} /** @@ -560,6 +572,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param reason The reason for the timeline change. */ + @UnstableApi default void onTimelineChanged(EventTime eventTime, @TimelineChangeReason int reason) {} /** @@ -569,6 +582,7 @@ public interface AnalyticsListener { * @param mediaItem The media item. * @param reason The reason for the media item transition. */ + @UnstableApi default void onMediaItemTransition( EventTime eventTime, @Nullable MediaItem mediaItem, @@ -578,6 +592,7 @@ public interface AnalyticsListener { * @deprecated Use {@link #onPositionDiscontinuity(EventTime, Player.PositionInfo, * Player.PositionInfo, int)} instead. */ + @UnstableApi @Deprecated default void onPositionDiscontinuity(EventTime eventTime, @DiscontinuityReason int reason) {} @@ -589,6 +604,7 @@ public interface AnalyticsListener { * @param newPosition The position after the discontinuity. * @param reason The reason for the position discontinuity. */ + @UnstableApi default void onPositionDiscontinuity( EventTime eventTime, Player.PositionInfo oldPosition, @@ -600,6 +616,7 @@ public interface AnalyticsListener { * Player.PositionInfo, int)} instead, listening to changes with {@link * Player#DISCONTINUITY_REASON_SEEK}. */ + @UnstableApi @Deprecated default void onSeekStarted(EventTime eventTime) {} @@ -607,6 +624,7 @@ public interface AnalyticsListener { * @deprecated Seeks are processed without delay. Use {@link #onPositionDiscontinuity(EventTime, * int)} with reason {@link Player#DISCONTINUITY_REASON_SEEK} instead. */ + @UnstableApi @Deprecated default void onSeekProcessed(EventTime eventTime) {} @@ -616,6 +634,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param playbackParameters The new playback parameters. */ + @UnstableApi default void onPlaybackParametersChanged( EventTime eventTime, PlaybackParameters playbackParameters) {} @@ -625,6 +644,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param seekBackIncrementMs The seek back increment, in milliseconds. */ + @UnstableApi default void onSeekBackIncrementChanged(EventTime eventTime, long seekBackIncrementMs) {} /** @@ -633,6 +653,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param seekForwardIncrementMs The seek forward increment, in milliseconds. */ + @UnstableApi default void onSeekForwardIncrementChanged(EventTime eventTime, long seekForwardIncrementMs) {} /** @@ -642,6 +663,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param maxSeekToPreviousPositionMs The maximum seek to previous position, in milliseconds. */ + @UnstableApi default void onMaxSeekToPreviousPositionChanged( EventTime eventTime, long maxSeekToPreviousPositionMs) {} @@ -651,6 +673,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param repeatMode The new repeat mode. */ + @UnstableApi default void onRepeatModeChanged(EventTime eventTime, @Player.RepeatMode int repeatMode) {} /** @@ -659,6 +682,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param shuffleModeEnabled Whether the shuffle mode is enabled. */ + @UnstableApi default void onShuffleModeChanged(EventTime eventTime, boolean shuffleModeEnabled) {} /** @@ -667,11 +691,13 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param isLoading Whether the player is loading. */ + @UnstableApi default void onIsLoadingChanged(EventTime eventTime, boolean isLoading) {} /** * @deprecated Use {@link #onIsLoadingChanged(EventTime, boolean)} instead. */ + @UnstableApi @Deprecated default void onLoadingChanged(EventTime eventTime, boolean isLoading) {} @@ -681,6 +707,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param availableCommands The available commands. */ + @UnstableApi default void onAvailableCommandsChanged(EventTime eventTime, Player.Commands availableCommands) {} /** @@ -692,6 +719,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param error The error. */ + @UnstableApi default void onPlayerError(EventTime eventTime, PlaybackException error) {} /** @@ -703,6 +731,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param error The new error, or null if the error is being cleared. */ + @UnstableApi default void onPlayerErrorChanged(EventTime eventTime, @Nullable PlaybackException error) {} /** @@ -711,6 +740,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param tracks The tracks. Never null, but may be of length zero. */ + @UnstableApi default void onTracksChanged(EventTime eventTime, Tracks tracks) {} /** @@ -719,6 +749,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param trackSelectionParameters The new {@link TrackSelectionParameters}. */ + @UnstableApi default void onTrackSelectionParametersChanged( EventTime eventTime, TrackSelectionParameters trackSelectionParameters) {} @@ -732,6 +763,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param mediaMetadata The combined {@link MediaMetadata}. */ + @UnstableApi default void onMediaMetadataChanged(EventTime eventTime, MediaMetadata mediaMetadata) {} /** @@ -740,6 +772,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param playlistMetadata The playlist {@link MediaMetadata}. */ + @UnstableApi default void onPlaylistMetadataChanged(EventTime eventTime, MediaMetadata playlistMetadata) {} /** @@ -749,6 +782,7 @@ public interface AnalyticsListener { * @param loadEventInfo The {@link LoadEventInfo} defining the load event. * @param mediaLoadData The {@link MediaLoadData} defining the data being loaded. */ + @UnstableApi default void onLoadStarted( EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {} @@ -759,6 +793,7 @@ public interface AnalyticsListener { * @param loadEventInfo The {@link LoadEventInfo} defining the load event. * @param mediaLoadData The {@link MediaLoadData} defining the data being loaded. */ + @UnstableApi default void onLoadCompleted( EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {} @@ -769,6 +804,7 @@ public interface AnalyticsListener { * @param loadEventInfo The {@link LoadEventInfo} defining the load event. * @param mediaLoadData The {@link MediaLoadData} defining the data being loaded. */ + @UnstableApi default void onLoadCanceled( EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {} @@ -788,6 +824,7 @@ public interface AnalyticsListener { * @param error The load error. * @param wasCanceled Whether the load was canceled as a result of the error. */ + @UnstableApi default void onLoadError( EventTime eventTime, LoadEventInfo loadEventInfo, @@ -801,6 +838,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param mediaLoadData The {@link MediaLoadData} defining the newly selected media data. */ + @UnstableApi default void onDownstreamFormatChanged(EventTime eventTime, MediaLoadData mediaLoadData) {} /** @@ -810,6 +848,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param mediaLoadData The {@link MediaLoadData} defining the media being discarded. */ + @UnstableApi default void onUpstreamDiscarded(EventTime eventTime, MediaLoadData mediaLoadData) {} /** @@ -820,6 +859,7 @@ public interface AnalyticsListener { * @param totalBytesLoaded The total bytes loaded this update is based on. * @param bitrateEstimate The bandwidth estimate, in bits per second. */ + @UnstableApi default void onBandwidthEstimate( EventTime eventTime, int totalLoadTimeMs, long totalBytesLoaded, long bitrateEstimate) {} @@ -829,6 +869,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param metadata The metadata. */ + @UnstableApi default void onMetadata(EventTime eventTime, Metadata metadata) {} /** @@ -840,12 +881,14 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param cues The {@link Cue Cues}. May be empty. */ + @UnstableApi default void onCues(EventTime eventTime, List cues) {} /** * @deprecated Use {@link #onAudioEnabled} and {@link #onVideoEnabled} instead. */ @Deprecated + @UnstableApi default void onDecoderEnabled( EventTime eventTime, int trackType, DecoderCounters decoderCounters) {} @@ -853,6 +896,7 @@ public interface AnalyticsListener { * @deprecated Use {@link #onAudioDecoderInitialized} and {@link #onVideoDecoderInitialized} * instead. */ + @UnstableApi @Deprecated default void onDecoderInitialized( EventTime eventTime, int trackType, String decoderName, long initializationDurationMs) {} @@ -861,12 +905,14 @@ public interface AnalyticsListener { * @deprecated Use {@link #onAudioInputFormatChanged(EventTime, Format, DecoderReuseEvaluation)} * and {@link #onVideoInputFormatChanged(EventTime, Format, DecoderReuseEvaluation)}. instead. */ + @UnstableApi @Deprecated default void onDecoderInputFormatChanged(EventTime eventTime, int trackType, Format format) {} /** * @deprecated Use {@link #onAudioDisabled} and {@link #onVideoDisabled} instead. */ + @UnstableApi @Deprecated default void onDecoderDisabled( EventTime eventTime, int trackType, DecoderCounters decoderCounters) {} @@ -878,6 +924,7 @@ public interface AnalyticsListener { * @param decoderCounters {@link DecoderCounters} that will be updated by the renderer for as long * as it remains enabled. */ + @UnstableApi default void onAudioEnabled(EventTime eventTime, DecoderCounters decoderCounters) {} /** @@ -889,6 +936,7 @@ public interface AnalyticsListener { * finished. * @param initializationDurationMs The time taken to initialize the decoder in milliseconds. */ + @UnstableApi default void onAudioDecoderInitialized( EventTime eventTime, String decoderName, @@ -898,6 +946,7 @@ public interface AnalyticsListener { /** * @deprecated Use {@link #onAudioDecoderInitialized(EventTime, String, long, long)}. */ + @UnstableApi @Deprecated default void onAudioDecoderInitialized( EventTime eventTime, String decoderName, long initializationDurationMs) {} @@ -905,6 +954,7 @@ public interface AnalyticsListener { /** * @deprecated Use {@link #onAudioInputFormatChanged(EventTime, Format, DecoderReuseEvaluation)}. */ + @UnstableApi @Deprecated default void onAudioInputFormatChanged(EventTime eventTime, Format format) {} @@ -917,6 +967,7 @@ public interface AnalyticsListener { * decoder instance can be reused for the new format, or {@code null} if the renderer did not * have a decoder. */ + @UnstableApi default void onAudioInputFormatChanged( EventTime eventTime, Format format, @@ -930,6 +981,7 @@ public interface AnalyticsListener { * @param playoutStartSystemTimeMs The approximate derived {@link System#currentTimeMillis()} at * which playout started. */ + @UnstableApi default void onAudioPositionAdvancing(EventTime eventTime, long playoutStartSystemTimeMs) {} /** @@ -941,6 +993,7 @@ public interface AnalyticsListener { * encoded audio. {@link C#TIME_UNSET} if the output buffer contains non-PCM encoded audio. * @param elapsedSinceLastFeedMs The time since audio was last written to the output buffer. */ + @UnstableApi default void onAudioUnderrun( EventTime eventTime, int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {} @@ -950,6 +1003,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param decoderName The decoder that was released. */ + @UnstableApi default void onAudioDecoderReleased(EventTime eventTime, String decoderName) {} /** @@ -958,6 +1012,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param decoderCounters {@link DecoderCounters} that were updated by the renderer. */ + @UnstableApi default void onAudioDisabled(EventTime eventTime, DecoderCounters decoderCounters) {} /** @@ -966,6 +1021,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param audioSessionId The audio session ID. */ + @UnstableApi default void onAudioSessionIdChanged(EventTime eventTime, int audioSessionId) {} /** @@ -974,6 +1030,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param audioAttributes The audio attributes. */ + @UnstableApi default void onAudioAttributesChanged(EventTime eventTime, AudioAttributes audioAttributes) {} /** @@ -982,6 +1039,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param skipSilenceEnabled Whether skipping silences in the audio stream is enabled. */ + @UnstableApi default void onSkipSilenceEnabledChanged(EventTime eventTime, boolean skipSilenceEnabled) {} /** @@ -999,6 +1057,7 @@ public interface AnalyticsListener { * AudioSink.InitializationException}, a {@link AudioSink.WriteException}, or an {@link * AudioSink.UnexpectedDiscontinuityException}. */ + @UnstableApi default void onAudioSinkError(EventTime eventTime, Exception audioSinkError) {} /** @@ -1015,6 +1074,7 @@ public interface AnalyticsListener { * @param audioCodecError The error. Typically a {@link CodecException} if the renderer uses * {@link MediaCodec}, or a {@link DecoderException} if the renderer uses a software decoder. */ + @UnstableApi default void onAudioCodecError(EventTime eventTime, Exception audioCodecError) {} /** @@ -1023,6 +1083,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param volume The new volume, with 0 being silence and 1 being unity gain. */ + @UnstableApi default void onVolumeChanged(EventTime eventTime, float volume) {} /** @@ -1031,6 +1092,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param deviceInfo The new {@link DeviceInfo}. */ + @UnstableApi default void onDeviceInfoChanged(EventTime eventTime, DeviceInfo deviceInfo) {} /** @@ -1040,6 +1102,7 @@ public interface AnalyticsListener { * @param volume The new device volume, with 0 being silence and 1 being unity gain. * @param muted Whether the device is muted. */ + @UnstableApi default void onDeviceVolumeChanged(EventTime eventTime, int volume, boolean muted) {} /** @@ -1049,6 +1112,7 @@ public interface AnalyticsListener { * @param decoderCounters {@link DecoderCounters} that will be updated by the renderer for as long * as it remains enabled. */ + @UnstableApi default void onVideoEnabled(EventTime eventTime, DecoderCounters decoderCounters) {} /** @@ -1060,6 +1124,7 @@ public interface AnalyticsListener { * finished. * @param initializationDurationMs The time taken to initialize the decoder in milliseconds. */ + @UnstableApi default void onVideoDecoderInitialized( EventTime eventTime, String decoderName, @@ -1069,6 +1134,7 @@ public interface AnalyticsListener { /** * @deprecated Use {@link #onVideoDecoderInitialized(EventTime, String, long, long)}. */ + @UnstableApi @Deprecated default void onVideoDecoderInitialized( EventTime eventTime, String decoderName, long initializationDurationMs) {} @@ -1076,6 +1142,7 @@ public interface AnalyticsListener { /** * @deprecated Use {@link #onVideoInputFormatChanged(EventTime, Format, DecoderReuseEvaluation)}. */ + @UnstableApi @Deprecated default void onVideoInputFormatChanged(EventTime eventTime, Format format) {} @@ -1088,6 +1155,7 @@ public interface AnalyticsListener { * decoder instance can be reused for the new format, or {@code null} if the renderer did not * have a decoder. */ + @UnstableApi default void onVideoInputFormatChanged( EventTime eventTime, Format format, @@ -1102,6 +1170,7 @@ public interface AnalyticsListener { * 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. */ + @UnstableApi default void onDroppedVideoFrames(EventTime eventTime, int droppedFrames, long elapsedMs) {} /** @@ -1110,6 +1179,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param decoderName The decoder that was released. */ + @UnstableApi default void onVideoDecoderReleased(EventTime eventTime, String decoderName) {} /** @@ -1118,6 +1188,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param decoderCounters {@link DecoderCounters} that were updated by the renderer. */ + @UnstableApi default void onVideoDisabled(EventTime eventTime, DecoderCounters decoderCounters) {} /** @@ -1135,6 +1206,7 @@ public interface AnalyticsListener { * rendered since the last call to this method. * @param frameCount The number to samples included in {@code totalProcessingOffsetUs}. */ + @UnstableApi default void onVideoFrameProcessingOffset( EventTime eventTime, long totalProcessingOffsetUs, int frameCount) {} @@ -1152,6 +1224,7 @@ public interface AnalyticsListener { * @param videoCodecError The error. Typically a {@link CodecException} if the renderer uses * {@link MediaCodec}, or a {@link DecoderException} if the renderer uses a software decoder. */ + @UnstableApi default void onVideoCodecError(EventTime eventTime, Exception videoCodecError) {} /** @@ -1163,6 +1236,7 @@ public interface AnalyticsListener { * however may also be other output types (e.g., a {@link VideoDecoderOutputBufferRenderer}). * @param renderTimeMs {@link SystemClock#elapsedRealtime()} when the first frame was rendered. */ + @UnstableApi default void onRenderedFirstFrame(EventTime eventTime, Object output, long renderTimeMs) {} /** @@ -1172,11 +1246,13 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param videoSize The new size of the video. */ + @UnstableApi default void onVideoSizeChanged(EventTime eventTime, VideoSize videoSize) {} /** * @deprecated Implement {@link #onVideoSizeChanged(EventTime eventTime, VideoSize)} instead. */ + @UnstableApi @Deprecated default void onVideoSizeChanged( EventTime eventTime, @@ -1194,11 +1270,13 @@ public interface AnalyticsListener { * @param height The surface height in pixels. May be {@link C#LENGTH_UNSET} if unknown, or 0 if * the video is not rendered onto a surface. */ + @UnstableApi default void onSurfaceSizeChanged(EventTime eventTime, int width, int height) {} /** * @deprecated Implement {@link #onDrmSessionAcquired(EventTime, int)} instead. */ + @UnstableApi @Deprecated default void onDrmSessionAcquired(EventTime eventTime) {} @@ -1208,6 +1286,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param state The {@link DrmSession.State} of the session when the acquisition completed. */ + @UnstableApi default void onDrmSessionAcquired(EventTime eventTime, @DrmSession.State int state) {} /** @@ -1215,6 +1294,7 @@ public interface AnalyticsListener { * * @param eventTime The event time. */ + @UnstableApi default void onDrmKeysLoaded(EventTime eventTime) {} /** @@ -1230,6 +1310,7 @@ public interface AnalyticsListener { * @param eventTime The event time. * @param error The error. */ + @UnstableApi default void onDrmSessionManagerError(EventTime eventTime, Exception error) {} /** @@ -1237,6 +1318,7 @@ public interface AnalyticsListener { * * @param eventTime The event time. */ + @UnstableApi default void onDrmKeysRestored(EventTime eventTime) {} /** @@ -1244,6 +1326,7 @@ public interface AnalyticsListener { * * @param eventTime The event time. */ + @UnstableApi default void onDrmKeysRemoved(EventTime eventTime) {} /** @@ -1251,6 +1334,7 @@ public interface AnalyticsListener { * * @param eventTime The event time. */ + @UnstableApi default void onDrmSessionReleased(EventTime eventTime) {} /** @@ -1258,6 +1342,7 @@ public interface AnalyticsListener { * * @param eventTime The event time. */ + @UnstableApi default void onPlayerReleased(EventTime eventTime) {} /** @@ -1287,5 +1372,6 @@ public interface AnalyticsListener { * @param player The {@link Player}. * @param events The {@link Events} that occurred in this iteration. */ + @UnstableApi default void onEvents(Player player, Events events) {} } diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/util/EventLogger.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/util/EventLogger.java index 88986f4e1d..effe728080 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/util/EventLogger.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/util/EventLogger.java @@ -49,7 +49,6 @@ import java.util.Locale; /** Logs events from {@link Player} and other core components using {@link Log}. */ @SuppressWarnings("UngroupedOverloads") -@UnstableApi public class EventLogger implements AnalyticsListener { private static final String DEFAULT_TAG = "EventLogger"; @@ -91,6 +90,7 @@ public class EventLogger implements AnalyticsListener { * @param trackSelector This parameter is ignored. * @deprecated Use {@link EventLogger()} */ + @UnstableApi @Deprecated public EventLogger(@Nullable MappingTrackSelector trackSelector) { this(DEFAULT_TAG); @@ -103,6 +103,7 @@ public class EventLogger implements AnalyticsListener { * @param tag The tag used for logging. * @deprecated Use {@link EventLogger(String)} */ + @UnstableApi @Deprecated public EventLogger(@Nullable MappingTrackSelector trackSelector, String tag) { this(tag); @@ -110,16 +111,19 @@ public class EventLogger implements AnalyticsListener { // AnalyticsListener + @UnstableApi @Override public void onIsLoadingChanged(EventTime eventTime, boolean isLoading) { logd(eventTime, "loading", Boolean.toString(isLoading)); } + @UnstableApi @Override public void onPlaybackStateChanged(EventTime eventTime, @Player.State int state) { logd(eventTime, "state", getStateString(state)); } + @UnstableApi @Override public void onPlayWhenReadyChanged( EventTime eventTime, boolean playWhenReady, @Player.PlayWhenReadyChangeReason int reason) { @@ -129,6 +133,7 @@ public class EventLogger implements AnalyticsListener { playWhenReady + ", " + getPlayWhenReadyChangeReasonString(reason)); } + @UnstableApi @Override public void onPlaybackSuppressionReasonChanged( EventTime eventTime, @PlaybackSuppressionReason int playbackSuppressionReason) { @@ -138,21 +143,25 @@ public class EventLogger implements AnalyticsListener { getPlaybackSuppressionReasonString(playbackSuppressionReason)); } + @UnstableApi @Override public void onIsPlayingChanged(EventTime eventTime, boolean isPlaying) { logd(eventTime, "isPlaying", Boolean.toString(isPlaying)); } + @UnstableApi @Override public void onRepeatModeChanged(EventTime eventTime, @Player.RepeatMode int repeatMode) { logd(eventTime, "repeatMode", getRepeatModeString(repeatMode)); } + @UnstableApi @Override public void onShuffleModeChanged(EventTime eventTime, boolean shuffleModeEnabled) { logd(eventTime, "shuffleModeEnabled", Boolean.toString(shuffleModeEnabled)); } + @UnstableApi @Override public void onPositionDiscontinuity( EventTime eventTime, @@ -200,12 +209,14 @@ public class EventLogger implements AnalyticsListener { logd(eventTime, "positionDiscontinuity", builder.toString()); } + @UnstableApi @Override public void onPlaybackParametersChanged( EventTime eventTime, PlaybackParameters playbackParameters) { logd(eventTime, "playbackParameters", playbackParameters.toString()); } + @UnstableApi @Override public void onTimelineChanged(EventTime eventTime, @Player.TimelineChangeReason int reason) { int periodCount = eventTime.timeline.getPeriodCount(); @@ -244,6 +255,7 @@ public class EventLogger implements AnalyticsListener { logd("]"); } + @UnstableApi @Override public void onMediaItemTransition( EventTime eventTime, @Nullable MediaItem mediaItem, int reason) { @@ -255,11 +267,13 @@ public class EventLogger implements AnalyticsListener { + "]"); } + @UnstableApi @Override public void onPlayerError(EventTime eventTime, PlaybackException error) { loge(eventTime, "playerFailed", error); } + @UnstableApi @Override public void onTracksChanged(EventTime eventTime, Tracks tracks) { logd("tracks [" + getEventTimeString(eventTime)); @@ -303,6 +317,7 @@ public class EventLogger implements AnalyticsListener { logd("]"); } + @UnstableApi @Override public void onMetadata(EventTime eventTime, Metadata metadata) { logd("metadata [" + getEventTimeString(eventTime)); @@ -310,23 +325,27 @@ public class EventLogger implements AnalyticsListener { logd("]"); } + @UnstableApi @Override public void onAudioEnabled(EventTime eventTime, DecoderCounters decoderCounters) { logd(eventTime, "audioEnabled"); } + @UnstableApi @Override public void onAudioDecoderInitialized( EventTime eventTime, String decoderName, long initializationDurationMs) { logd(eventTime, "audioDecoderInitialized", decoderName); } + @UnstableApi @Override public void onAudioInputFormatChanged( EventTime eventTime, Format format, @Nullable DecoderReuseEvaluation decoderReuseEvaluation) { logd(eventTime, "audioInputFormat", Format.toLogString(format)); } + @UnstableApi @Override public void onAudioUnderrun( EventTime eventTime, int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) { @@ -337,21 +356,25 @@ public class EventLogger implements AnalyticsListener { /* throwable= */ null); } + @UnstableApi @Override public void onAudioDecoderReleased(EventTime eventTime, String decoderName) { logd(eventTime, "audioDecoderReleased", decoderName); } + @UnstableApi @Override public void onAudioDisabled(EventTime eventTime, DecoderCounters decoderCounters) { logd(eventTime, "audioDisabled"); } + @UnstableApi @Override public void onAudioSessionIdChanged(EventTime eventTime, int audioSessionId) { logd(eventTime, "audioSessionId", Integer.toString(audioSessionId)); } + @UnstableApi @Override public void onAudioAttributesChanged(EventTime eventTime, AudioAttributes audioAttributes) { logd( @@ -366,64 +389,76 @@ public class EventLogger implements AnalyticsListener { + audioAttributes.allowedCapturePolicy); } + @UnstableApi @Override public void onSkipSilenceEnabledChanged(EventTime eventTime, boolean skipSilenceEnabled) { logd(eventTime, "skipSilenceEnabled", Boolean.toString(skipSilenceEnabled)); } + @UnstableApi @Override public void onVolumeChanged(EventTime eventTime, float volume) { logd(eventTime, "volume", Float.toString(volume)); } + @UnstableApi @Override public void onVideoEnabled(EventTime eventTime, DecoderCounters decoderCounters) { logd(eventTime, "videoEnabled"); } + @UnstableApi @Override public void onVideoDecoderInitialized( EventTime eventTime, String decoderName, long initializationDurationMs) { logd(eventTime, "videoDecoderInitialized", decoderName); } + @UnstableApi @Override public void onVideoInputFormatChanged( EventTime eventTime, Format format, @Nullable DecoderReuseEvaluation decoderReuseEvaluation) { logd(eventTime, "videoInputFormat", Format.toLogString(format)); } + @UnstableApi @Override public void onDroppedVideoFrames(EventTime eventTime, int droppedFrames, long elapsedMs) { logd(eventTime, "droppedFrames", Integer.toString(droppedFrames)); } + @UnstableApi @Override public void onVideoDecoderReleased(EventTime eventTime, String decoderName) { logd(eventTime, "videoDecoderReleased", decoderName); } + @UnstableApi @Override public void onVideoDisabled(EventTime eventTime, DecoderCounters decoderCounters) { logd(eventTime, "videoDisabled"); } + @UnstableApi @Override public void onRenderedFirstFrame(EventTime eventTime, Object output, long renderTimeMs) { logd(eventTime, "renderedFirstFrame", String.valueOf(output)); } + @UnstableApi @Override public void onVideoSizeChanged(EventTime eventTime, VideoSize videoSize) { logd(eventTime, "videoSize", videoSize.width + ", " + videoSize.height); } + @UnstableApi @Override public void onLoadStarted( EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) { // Do nothing. } + @UnstableApi @Override public void onLoadError( EventTime eventTime, @@ -434,64 +469,76 @@ public class EventLogger implements AnalyticsListener { printInternalError(eventTime, "loadError", error); } + @UnstableApi @Override public void onLoadCanceled( EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) { // Do nothing. } + @UnstableApi @Override public void onLoadCompleted( EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) { // Do nothing. } + @UnstableApi @Override public void onBandwidthEstimate( EventTime eventTime, int totalLoadTimeMs, long totalBytesLoaded, long bitrateEstimate) { // Do nothing. } + @UnstableApi @Override public void onSurfaceSizeChanged(EventTime eventTime, int width, int height) { logd(eventTime, "surfaceSize", width + ", " + height); } + @UnstableApi @Override public void onUpstreamDiscarded(EventTime eventTime, MediaLoadData mediaLoadData) { logd(eventTime, "upstreamDiscarded", Format.toLogString(mediaLoadData.trackFormat)); } + @UnstableApi @Override public void onDownstreamFormatChanged(EventTime eventTime, MediaLoadData mediaLoadData) { logd(eventTime, "downstreamFormat", Format.toLogString(mediaLoadData.trackFormat)); } + @UnstableApi @Override public void onDrmSessionAcquired(EventTime eventTime, @DrmSession.State int state) { logd(eventTime, "drmSessionAcquired", "state=" + state); } + @UnstableApi @Override public void onDrmSessionManagerError(EventTime eventTime, Exception error) { printInternalError(eventTime, "drmSessionManagerError", error); } + @UnstableApi @Override public void onDrmKeysRestored(EventTime eventTime) { logd(eventTime, "drmKeysRestored"); } + @UnstableApi @Override public void onDrmKeysRemoved(EventTime eventTime) { logd(eventTime, "drmKeysRemoved"); } + @UnstableApi @Override public void onDrmKeysLoaded(EventTime eventTime) { logd(eventTime, "drmKeysLoaded"); } + @UnstableApi @Override public void onDrmSessionReleased(EventTime eventTime) { logd(eventTime, "drmSessionReleased"); @@ -502,6 +549,7 @@ public class EventLogger implements AnalyticsListener { * * @param msg The message to log. */ + @UnstableApi protected void logd(String msg) { Log.d(tag, msg); } @@ -511,6 +559,7 @@ public class EventLogger implements AnalyticsListener { * * @param msg The message to log. */ + @UnstableApi protected void loge(String msg) { Log.e(tag, msg); }