1
1
package uk.co.sentinelweb.cuer.app.ui.exoplayer
2
2
3
- import android.util.Log
4
3
import androidx.media3.common.*
5
4
import androidx.media3.common.text.Cue
6
5
import androidx.media3.common.text.CueGroup
7
6
import androidx.media3.common.util.UnstableApi
7
+ import uk.co.sentinelweb.cuer.core.wrapper.LogWrapper
8
8
9
9
@UnstableApi
10
- class LoggingPlayerListener (
11
- private val tag : String = " LoggingPlayerListener "
10
+ class ExoLoggingPlayerListener (
11
+ private val log : LogWrapper
12
12
) : Player.Listener {
13
+ init {
14
+ log.tag(this )
15
+ }
13
16
14
17
override fun onEvents (player : Player , events : Player .Events ) {
15
18
val eventNames = buildString {
@@ -45,32 +48,32 @@ class LoggingPlayerListener(
45
48
if (events.contains(Player .EVENT_DEVICE_INFO_CHANGED )) append(" DEVICE_INFO_CHANGED " )
46
49
if (events.contains(Player .EVENT_DEVICE_VOLUME_CHANGED )) append(" DEVICE_VOLUME_CHANGED " )
47
50
}
48
- Log .d(tag, " onEvents: [$eventNames ]" )
51
+ log .d(" onEvents: [$eventNames ]" )
49
52
50
53
}
51
54
52
55
override fun onTimelineChanged (timeline : Timeline , reason : Int ) {
53
- Log .d(tag, " onTimelineChanged: timeline=$timeline , reason=$reason " )
56
+ log .d(" onTimelineChanged: timeline=$timeline , reason=$reason " )
54
57
}
55
58
56
59
override fun onMediaItemTransition (mediaItem : MediaItem ? , reason : Int ) {
57
- Log .d(tag, " onMediaItemTransition: mediaItem=$mediaItem , reason=$reason " )
60
+ log .d(" onMediaItemTransition: mediaItem=$mediaItem , reason=$reason " )
58
61
}
59
62
60
63
override fun onTracksChanged (tracks : Tracks ) {
61
- Log .d(tag, " onTracksChanged: tracks=$tracks " )
64
+ log .d(" onTracksChanged: tracks=$tracks " )
62
65
}
63
66
64
67
override fun onMediaMetadataChanged (mediaMetadata : MediaMetadata ) {
65
- Log .d(tag, " onMediaMetadataChanged: metadata=$mediaMetadata " )
68
+ log .d(" onMediaMetadataChanged: metadata=$mediaMetadata " )
66
69
}
67
70
68
71
override fun onPlaylistMetadataChanged (mediaMetadata : MediaMetadata ) {
69
- Log .d(tag, " onPlaylistMetadataChanged: metadata=$mediaMetadata " )
72
+ log .d(" onPlaylistMetadataChanged: metadata=$mediaMetadata " )
70
73
}
71
74
72
75
override fun onIsLoadingChanged (isLoading : Boolean ) {
73
- Log .d(tag, " onIsLoadingChanged: isLoading=$isLoading " )
76
+ log .d(" onIsLoadingChanged: isLoading=$isLoading " )
74
77
}
75
78
76
79
override fun onAvailableCommandsChanged (availableCommands : Player .Commands ) {
@@ -107,7 +110,7 @@ class LoggingPlayerListener(
107
110
if (availableCommands.contains(Player .COMMAND_SET_TRACK_SELECTION_PARAMETERS )) append(" SET_TRACK_SELECTION " )
108
111
if (availableCommands.contains(Player .COMMAND_SET_AUDIO_ATTRIBUTES )) append(" SET_AUDIO_ATTRIBUTES " )
109
112
}
110
- Log .d(tag, " onAvailableCommandsChanged: [$commandNames ]" )
113
+ log .d(" onAvailableCommandsChanged: [$commandNames ]" )
111
114
}
112
115
113
116
@@ -119,19 +122,19 @@ class LoggingPlayerListener(
119
122
Player .STATE_ENDED -> " STATE_ENDED"
120
123
else -> " UNKNOWN"
121
124
}
122
- Log .d(tag, " onPlaybackStateChanged: state=$state ($playbackState )" )
125
+ log .d(" onPlaybackStateChanged: state=$state ($playbackState )" )
123
126
}
124
127
125
128
override fun onPlayWhenReadyChanged (playWhenReady : Boolean , reason : Int ) {
126
- Log .d(tag, " onPlayWhenReadyChanged: playWhenReady=$playWhenReady , reason=$reason " )
129
+ log .d(" onPlayWhenReadyChanged: playWhenReady=$playWhenReady , reason=$reason " )
127
130
}
128
131
129
132
override fun onPlaybackSuppressionReasonChanged (playbackSuppressionReason : Int ) {
130
- Log .d(tag, " onPlaybackSuppressionReasonChanged: reason=$playbackSuppressionReason " )
133
+ log .d(" onPlaybackSuppressionReasonChanged: reason=$playbackSuppressionReason " )
131
134
}
132
135
133
136
override fun onIsPlayingChanged (isPlaying : Boolean ) {
134
- Log .d(tag, " onIsPlayingChanged: isPlaying=$isPlaying " )
137
+ log .d(" onIsPlayingChanged: isPlaying=$isPlaying " )
135
138
}
136
139
137
140
override fun onRepeatModeChanged (repeatMode : Int ) {
@@ -141,82 +144,123 @@ class LoggingPlayerListener(
141
144
Player .REPEAT_MODE_ALL -> " REPEAT_MODE_ALL"
142
145
else -> " UNKNOWN"
143
146
}
144
- Log .d(tag, " onRepeatModeChanged: mode=$mode ($repeatMode )" )
147
+ log .d(" onRepeatModeChanged: mode=$mode ($repeatMode )" )
145
148
}
146
149
147
150
override fun onShuffleModeEnabledChanged (shuffleModeEnabled : Boolean ) {
148
- Log .d(tag, " onShuffleModeEnabledChanged: enabled=$shuffleModeEnabled " )
151
+ log .d(" onShuffleModeEnabledChanged: enabled=$shuffleModeEnabled " )
149
152
}
150
153
151
154
override fun onPlayerError (error : PlaybackException ) {
152
- Log .e(tag, " onPlayerError: " , error)
155
+ log.e(" Player error:" , error)
156
+ // You can also log specific error details
157
+ log.e(" Error code: ${error.errorCode} " )
158
+ log.e(" Cause: ${error.cause} " )
159
+
160
+ // If you want to get more detailed error information
161
+ val errorName = when (error.errorCode) {
162
+ PlaybackException .ERROR_CODE_IO_UNSPECIFIED -> " ERROR_CODE_IO_UNSPECIFIED"
163
+ PlaybackException .ERROR_CODE_IO_NETWORK_CONNECTION_FAILED -> " ERROR_CODE_IO_NETWORK_CONNECTION_FAILED"
164
+ PlaybackException .ERROR_CODE_IO_NETWORK_CONNECTION_TIMEOUT -> " ERROR_CODE_IO_NETWORK_CONNECTION_TIMEOUT"
165
+ PlaybackException .ERROR_CODE_IO_INVALID_HTTP_CONTENT_TYPE -> " ERROR_CODE_IO_INVALID_HTTP_CONTENT_TYPE"
166
+ PlaybackException .ERROR_CODE_IO_BAD_HTTP_STATUS -> " ERROR_CODE_IO_BAD_HTTP_STATUS"
167
+ PlaybackException .ERROR_CODE_IO_FILE_NOT_FOUND -> " ERROR_CODE_IO_FILE_NOT_FOUND"
168
+ PlaybackException .ERROR_CODE_IO_NO_PERMISSION -> " ERROR_CODE_IO_NO_PERMISSION"
169
+ PlaybackException .ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED -> " ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED"
170
+ PlaybackException .ERROR_CODE_DECODER_INIT_FAILED -> " ERROR_CODE_DECODER_INIT_FAILED"
171
+ PlaybackException .ERROR_CODE_DECODER_QUERY_FAILED -> " ERROR_CODE_DECODER_QUERY_FAILED"
172
+ PlaybackException .ERROR_CODE_DECODING_FAILED -> " ERROR_CODE_DECODING_FAILED"
173
+ PlaybackException .ERROR_CODE_DECODING_FORMAT_EXCEEDS_CAPABILITIES -> " ERROR_CODE_DECODING_FORMAT_EXCEEDS_CAPABILITIES"
174
+ PlaybackException .ERROR_CODE_AUDIO_TRACK_INIT_FAILED -> " ERROR_CODE_AUDIO_TRACK_INIT_FAILED"
175
+ PlaybackException .ERROR_CODE_AUDIO_TRACK_WRITE_FAILED -> " ERROR_CODE_AUDIO_TRACK_WRITE_FAILED"
176
+ PlaybackException .ERROR_CODE_DRM_UNSPECIFIED -> " ERROR_CODE_DRM_UNSPECIFIED"
177
+ PlaybackException .ERROR_CODE_DRM_SCHEME_UNSUPPORTED -> " ERROR_CODE_DRM_SCHEME_UNSUPPORTED"
178
+ PlaybackException .ERROR_CODE_DRM_PROVISIONING_FAILED -> " ERROR_CODE_DRM_PROVISIONING_FAILED"
179
+ PlaybackException .ERROR_CODE_DRM_CONTENT_ERROR -> " ERROR_CODE_DRM_CONTENT_ERROR"
180
+ PlaybackException .ERROR_CODE_DRM_LICENSE_ACQUISITION_FAILED -> " ERROR_CODE_DRM_LICENSE_ACQUISITION_FAILED"
181
+ PlaybackException .ERROR_CODE_DRM_DISALLOWED_OPERATION -> " ERROR_CODE_DRM_DISALLOWED_OPERATION"
182
+ PlaybackException .ERROR_CODE_DRM_SYSTEM_ERROR -> " ERROR_CODE_DRM_SYSTEM_ERROR"
183
+ PlaybackException .ERROR_CODE_DRM_DEVICE_REVOKED -> " ERROR_CODE_DRM_DEVICE_REVOKED"
184
+ PlaybackException .ERROR_CODE_DRM_LICENSE_EXPIRED -> " ERROR_CODE_DRM_LICENSE_EXPIRED"
185
+ PlaybackException .ERROR_CODE_REMOTE_ERROR -> " ERROR_CODE_REMOTE_ERROR"
186
+ PlaybackException .ERROR_CODE_BEHIND_LIVE_WINDOW -> " ERROR_CODE_BEHIND_LIVE_WINDOW"
187
+ PlaybackException .ERROR_CODE_TIMEOUT -> " ERROR_CODE_TIMEOUT"
188
+ PlaybackException .ERROR_CODE_PARSING_CONTAINER_MALFORMED -> " ERROR_CODE_PARSING_CONTAINER_MALFORMED"
189
+ PlaybackException .ERROR_CODE_PARSING_MANIFEST_MALFORMED -> " ERROR_CODE_PARSING_MANIFEST_MALFORMED"
190
+ PlaybackException .ERROR_CODE_UNSPECIFIED -> " ERROR_CODE_UNSPECIFIED"
191
+ else -> " UNKNOWN_ERROR_CODE"
192
+ }
193
+ log.e(" Error code: ${errorName} " )
194
+ log.e(" Message: ${error.message} " )
195
+
153
196
}
154
197
198
+
155
199
override fun onPlayerErrorChanged (error : PlaybackException ? ) {
156
- Log .e(tag, " onPlayerErrorChanged: " , error)
200
+ log .e(" onPlayerErrorChanged: " , error)
157
201
}
158
202
159
203
override fun onPositionDiscontinuity (
160
204
oldPosition : Player .PositionInfo ,
161
205
newPosition : Player .PositionInfo ,
162
206
reason : Int
163
207
) {
164
- Log .d(tag, " onPositionDiscontinuity: oldPosition=$oldPosition , newPosition=$newPosition , reason=$reason " )
208
+ log .d(" onPositionDiscontinuity: oldPosition=$oldPosition , newPosition=$newPosition , reason=$reason " )
165
209
}
166
210
167
211
override fun onPlaybackParametersChanged (playbackParameters : PlaybackParameters ) {
168
- Log .d(tag, " onPlaybackParametersChanged: parameters=$playbackParameters " )
212
+ log .d(" onPlaybackParametersChanged: parameters=$playbackParameters " )
169
213
}
170
214
171
215
override fun onSeekBackIncrementChanged (seekBackIncrementMs : Long ) {
172
- Log .d(tag, " onSeekBackIncrementChanged: incrementMs=$seekBackIncrementMs " )
216
+ log .d(" onSeekBackIncrementChanged: incrementMs=$seekBackIncrementMs " )
173
217
}
174
218
175
219
override fun onSeekForwardIncrementChanged (seekForwardIncrementMs : Long ) {
176
- Log .d(tag, " onSeekForwardIncrementChanged: incrementMs=$seekForwardIncrementMs " )
220
+ log .d(" onSeekForwardIncrementChanged: incrementMs=$seekForwardIncrementMs " )
177
221
}
178
222
179
223
override fun onMaxSeekToPreviousPositionChanged (maxSeekToPreviousPositionMs : Long ) {
180
- Log .d(tag, " onMaxSeekToPreviousPositionChanged: maxPositionMs=$maxSeekToPreviousPositionMs " )
224
+ log .d(" onMaxSeekToPreviousPositionChanged: maxPositionMs=$maxSeekToPreviousPositionMs " )
181
225
}
182
226
183
227
override fun onAudioSessionIdChanged (audioSessionId : Int ) {
184
- Log .d(tag, " onAudioSessionIdChanged: id=$audioSessionId " )
228
+ log .d(" onAudioSessionIdChanged: id=$audioSessionId " )
185
229
}
186
230
187
231
override fun onAudioAttributesChanged (audioAttributes : AudioAttributes ) {
188
- Log .d(tag, " onAudioAttributesChanged: attributes=$audioAttributes " )
232
+ log .d(" onAudioAttributesChanged: attributes=$audioAttributes " )
189
233
}
190
234
191
235
override fun onVolumeChanged (volume : Float ) {
192
- Log .d(tag, " onVolumeChanged: volume=$volume " )
236
+ log .d(" onVolumeChanged: volume=$volume " )
193
237
}
194
238
195
239
override fun onDeviceInfoChanged (deviceInfo : DeviceInfo ) {
196
- Log .d(tag, " onDeviceInfoChanged: info=$deviceInfo " )
240
+ log .d(" onDeviceInfoChanged: info=$deviceInfo " )
197
241
}
198
242
199
243
override fun onDeviceVolumeChanged (volume : Int , muted : Boolean ) {
200
- Log .d(tag, " onDeviceVolumeChanged: volume=$volume , muted=$muted " )
244
+ log .d(" onDeviceVolumeChanged: volume=$volume , muted=$muted " )
201
245
}
202
246
203
247
override fun onSkipSilenceEnabledChanged (skipSilenceEnabled : Boolean ) {
204
- Log .d(tag, " onSkipSilenceEnabledChanged: enabled=$skipSilenceEnabled " )
248
+ log .d(" onSkipSilenceEnabledChanged: enabled=$skipSilenceEnabled " )
205
249
}
206
250
207
251
override fun onSurfaceSizeChanged (width : Int , height : Int ) {
208
- Log .d(tag, " onSurfaceSizeChanged: width=$width , height=$height " )
252
+ log .d(" onSurfaceSizeChanged: width=$width , height=$height " )
209
253
}
210
254
211
255
override fun onRenderedFirstFrame () {
212
- Log .d(tag, " onRenderedFirstFrame" )
256
+ log .d(" onRenderedFirstFrame" )
213
257
}
214
258
215
259
override fun onCues (cues : MutableList <Cue >) {
216
- Log .d(tag, " onCues: count=${cues.size} " )
260
+ log .d(" onCues: count=${cues.size} " )
217
261
}
218
262
219
263
override fun onCues (cues : CueGroup ) {
220
- Log .d(tag, " onCues: count=${cues.cues.size} ${cues.presentationTimeUs} " )
264
+ log .d(" onCues: count=${cues.cues.size} ${cues.presentationTimeUs} " )
221
265
}
222
266
}
0 commit comments