Logging debug

Secara default, ExoPlayer hanya mencatat error. Untuk mencatat peristiwa pemain ke dalam log, class EventLogger dapat digunakan. Logging tambahan yang disediakan dapat berguna untuk memahami apa yang dilakukan pemain, serta untuk men-debug masalah pemutaran. EventLogger mengimplementasikan AnalyticsListener, sehingga mendaftarkan instance dengan ExoPlayer adalah hal yang mudah:

Kotlin

player.addAnalyticsListener(EventLogger())

Java

player.addAnalyticsListener(new EventLogger());

Cara termudah untuk mengamati log adalah dengan menggunakan tab logcat Android Studio. Anda dapat memilih aplikasi sebagai proses yang dapat di-debug berdasarkan nama paket ( androidx.media3.demo.main jika menggunakan aplikasi demo) dan memberi tahu tab logcat agar hanya mencatat log aplikasi tersebut dengan memilih show only selected application. Anda dapat memfilter logging lebih lanjut dengan ekspresi EventLogger|ExoPlayerImpl, untuk hanya mendapatkan logging dari EventLogger dan pemain itu sendiri.

Alternatif untuk menggunakan tab logcat Android Studio adalah dengan menggunakan konsol. Contoh:

adb logcat EventLogger:* ExoPlayerImpl:* *:s

Informasi pemain

Class ExoPlayerImpl memberikan dua baris penting tentang versi pemain, perangkat dan OS tempat aplikasi berjalan, serta modul ExoPlayer yang telah dimuat:

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]

Status pemutaran

Perubahan status pemutar dicatat dalam baris seperti ini:

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]

Dalam contoh ini, pemutaran dimulai 0,93 detik setelah pemutar disiapkan. Pengguna menjeda pemutaran setelah 9,4 detik, dan melanjutkan pemutaran satu detik kemudian pada 10,4 detik. Pemutaran berakhir sepuluh detik kemudian pada 20,4 detik. Elemen yang umum di dalam tanda kurung siku adalah:

  • [eventTime=float]: Waktu jam dinding sejak pembuatan pemain.
  • [mediaPos=float]: Posisi pemutaran saat ini.
  • [window=int]: Indeks jendela saat ini.
  • [period=int]: Periode saat ini di periode tersebut.

Elemen akhir di setiap baris menunjukkan nilai status yang dilaporkan.

Trek media

Informasi jalur dicatat saat trek yang tersedia atau dipilih berubah. Hal ini terjadi setidaknya sekali pada awal pemutaran. Contoh di bawah ini menunjukkan logging trek untuk streaming adaptif:

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: ]

Dalam contoh ini, pemutar telah memilih empat dari lima trek video yang tersedia. Trek video kelima tidak dipilih karena melebihi kemampuan perangkat, seperti yang ditunjukkan oleh supported=NO_EXCEEDS_CAPABILITIES. Pemutar akan beradaptasi di antara trek video yang dipilih selama pemutaran. Saat pemain beradaptasi dari satu trek ke trek lainnya, pemain akan mencatatnya dalam baris seperti di bawah ini:

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]

Baris log ini menunjukkan bahwa pemutar beralih ke trek video beresolusi 640x360 yang diputar selama tiga detik ke media.

Pilihan decoder

Pada umumnya, ExoPlayer merender media menggunakan MediaCodec yang diperoleh dari platform dasar. Saat decoder diinisialisasi, log ini akan dicatat dalam baris seperti berikut:

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]