Logging debug

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

Kotlin

player.addAnalyticsListener(EventLogger())

Java

player.addAnalyticsListener(new EventLogger());

Cara termudah untuk mengamati log adalah 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 untuk mencatat log hanya untuk aplikasi tersebut dengan memilih hanya tampilkan aplikasi yang dipilih. Anda dapat memfilter logging lebih lanjut dengan ekspresi EventLogger|ExoPlayerImpl, untuk hanya mendapatkan logging dari EventLogger dan pemutar itu sendiri.

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

adb logcat EventLogger:* ExoPlayerImpl:* *:s

Informasi pemain

Class ExoPlayerImpl menampilkan dua baris penting tentang versi pemutar, 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 umum 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 dalam periode tersebut.

Elemen terakhir di setiap baris menunjukkan nilai status yang dilaporkan.

Trek media

Informasi jalur dicatat saat jalur yang tersedia atau dipilih berubah. Hal ini terjadi setidaknya satu kali di awal pemutaran. Contoh di bawah ini menunjukkan logging jalur 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. Jalur 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 pemutar beradaptasi dari satu jalur ke jalur lain, pemutar akan dicatat dalam baris seperti di bawah:

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 resolusi 640x360 tiga detik setelah media dimulai.

Pilihan decoder

Pada umumnya, ExoPlayer merender media menggunakan MediaCodec yang diperoleh dari platform yang mendasarinya. Saat dekoder diinisialisasi, ini akan dicatat ke dalam log dalam baris seperti ini:

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]