デバッグログ

デフォルトでは、ExoPlayer はエラーのみをログに記録します。プレーヤー イベントをログに記録するには、EventLogger クラスを使用します。追加のロギングは、プレーヤーの動作を把握したり、再生に関する問題をデバッグしたりするのに役立ちます。EventLoggerAnalyticsListener を実装しているため、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 クラスは、プレーヤーのバージョン、アプリが実行されているデバイスと OS、読み込まれた ExoPlayer のモジュールに関する 2 つの重要な行を返します。

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]: そのウィンドウの現在の期間。

各行の最後の要素は、報告される状態の値を示します。

メディア トラック

使用可能なトラックまたは選択したトラックが変更されると、トラック情報が記録されます。これは、再生の開始時に少なくとも 1 回行われます。次の例は、アダプティブ ストリームのトラック ロギングを示しています。

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 つの動画トラックのうち 4 つを選択しています。supported=NO_EXCEEDS_CAPABILITIES で示されているように、5 番目の動画トラックはデバイスの機能を超過しているため、選択されていません。再生中に、選択した動画トラック間でプレーヤーが適応します。プレーヤーが 1 つのトラックから別のトラックに適応すると、次のような行に記録されます。

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]

このログ行は、プレーヤーがメディアの 3 秒目で 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]