默认情况下,ExoPlayer 仅记录错误。为了记录玩家事件,EventLogger
类。它提供的额外日志记录有助于
以及调试播放
问题。EventLogger
会实现 AnalyticsListener
,因此请注册实例
使用 ExoPlayer
非常简单:
Kotlin
player.addAnalyticsListener(EventLogger())
Java
player.addAnalyticsListener(new EventLogger());
观察日志的最简单方法是使用 Android Studio 的 logcat 标签页。您
可以按软件包名称 (
androidx.media3.demo.main
)并告知 logcat
选择仅显示所选应用,以仅记录该应用。时间是
可以使用表达式进一步过滤日志记录,
EventLogger|ExoPlayerImpl
,用于仅获取来自 EventLogger
和
播放器本身
使用 Android Studio 的 logcat 标签页的替代方案是使用控制台。例如:
adb logcat EventLogger:* ExoPlayerImpl:* *:s
播放器信息
ExoPlayerImpl
类提供了关于播放器版本的两行重要代码,
运行应用的设备和操作系统,以及
已加载:
ExoPlayerImpl: Init 59a18ab [AndroidXMedia3/1.0.0-rc02] [flame, Pixel 4, Google, 33]
ExoPlayerImpl: Release 59a18ab [AndroidXMedia3/1.0.0-rc02] [flame, Pixel 4, Google, 33] [media3.common, media3.datasource, media3.ui, media3.exoplayer, media3.decoder, media3.exoplayer.dash, media3.extractor]
播放状态
玩家状态更改会以如下行记录:
EventLogger: playWhenReady [eventTime=0.00, mediaPos=0.00, window=0, true, USER_REQUEST]
EventLogger: state [eventTime=0.01, mediaPos=0.00, window=0, BUFFERING]
EventLogger: state [eventTime=0.93, mediaPos=0.00, window=0, period=0, READY]
EventLogger: isPlaying [eventTime=0.93, mediaPos=0.00, window=0, period=0, true]
EventLogger: playWhenReady [eventTime=9.40, mediaPos=8.40, window=0, period=0, false, USER_REQUEST]
EventLogger: isPlaying [eventTime=9.40, mediaPos=8.40, window=0, period=0, false]
EventLogger: playWhenReady [eventTime=10.40, mediaPos=8.40, window=0, period=0, true, USER_REQUEST]
EventLogger: isPlaying [eventTime=10.40, mediaPos=8.40, window=0, period=0, true]
EventLogger: state [eventTime=20.40, mediaPos=18.40, window=0, period=0, ENDED]
EventLogger: isPlaying [eventTime=20.40, mediaPos=18.40, window=0, period=0, false]
在该示例中,播放器准备就绪后,从 0.93 秒开始播放。通过 用户在 9.4 秒后暂停播放,并在 1 秒后以 10.4 秒。播放会在 10 秒后的 20.4 秒处结束。常见的 方括号内的元素有:
[eventTime=float]
:自创建玩家以来的挂钟时间。[mediaPos=float]
:当前播放位置。[window=int]
:当前窗口索引。[period=int]
:该窗口中的当前时间段。
每行中的最后一个元素表示所报告的状态的值。
Media 跟踪
当可用轨道或所选轨道发生更改时,系统会记录轨道信息。这个 在开始播放时至少发生一次。以下示例显示的是曲目 针对自适应流进行日志记录:
EventLogger: tracks [eventTime=0.30, mediaPos=0.00, window=0, period=0,
EventLogger: group [
EventLogger: [X] Track:0, id=133, mimeType=video/avc, bitrate=261112, codecs=avc1.4d4015, res=426x240, fps=30.0, supported=YES
EventLogger: [X] Track:1, id=134, mimeType=video/avc, bitrate=671331, codecs=avc1.4d401e, res=640x360, fps=30.0, supported=YES
EventLogger: [X] Track:2, id=135, mimeType=video/avc, bitrate=1204535, codecs=avc1.4d401f, res=854x480, fps=30.0, supported=YES
EventLogger: [X] Track:3, id=160, mimeType=video/avc, bitrate=112329, codecs=avc1.4d400c, res=256x144, fps=30.0, supported=YES
EventLogger: [ ] Track:4, id=136, mimeType=video/avc, bitrate=2400538, codecs=avc1.4d401f, res=1280x720, fps=30.0, supported=NO_EXCEEDS_CAPABILITIES
EventLogger: ]
EventLogger: group [
EventLogger: [ ] Track:0, id=139, mimeType=audio/mp4a-latm, bitrate=48582, codecs=mp4a.40.5, channels=2, sample_rate=22050, supported=YES
EventLogger: [X] Track:1, id=140, mimeType=audio/mp4a-latm, bitrate=127868, codecs=mp4a.40.2, channels=2, sample_rate=44100, supported=YES
EventLogger: ]
EventLogger: ]
在该示例中,播放器从当前显示的 5 个视频中
。未选择第五个视频轨道,因为它超出了
设备的功能(以 supported=NO_EXCEEDS_CAPABILITIES
表示)。
播放期间,播放器将在所选的视频轨道之间进行调整。时间
而是会按照上一首
如下:
EventLogger: downstreamFormat [eventTime=3.64, mediaPos=3.00, window=0, period=0, id=134, mimeType=video/avc, bitrate=671331, codecs=avc1.4d401e, res=640x360, fps=30.0]
此日志行表示播放器已切换到 640x360 分辨率的视频 然后向媒体跟踪三秒钟
解码器选择
在大多数情况下,ExoPlayer 使用从MediaCodec
底层平台当解码器初始化时,它会记录在如下行中:
这些:
EventLogger: videoDecoderInitialized [0.77, 0.00, window=0, period=0, video, OMX.qcom.video.decoder.avc]
EventLogger: audioDecoderInitialized [0.79, 0.00, window=0, period=0, audio, OMX.google.aac.decoder]