Secara default, ExoPlayer hanya mencatat error. Untuk mencatat peristiwa pemutar, class EventLogger
dapat digunakan. Pencatatan tambahan yang diberikannya dapat membantu memahami tindakan pemain, serta untuk men-debug masalah pemutaran. EventLogger mengimplementasikan AnalyticsListener, sehingga mendaftarkan instance
dengan ExoPlayer menjadi 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
untuk mencatat hanya untuk 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
pemutar 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 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 jangka waktu tersebut.
Elemen terakhir di setiap baris menunjukkan nilai status yang dilaporkan.
Trek media
Informasi trek dicatat saat trek yang tersedia atau dipilih berubah. Hal ini terjadi setidaknya sekali di awal pemutaran. Contoh di bawah ini menunjukkan pencatatan log trek untuk aliran 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 melampaui 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, hal ini 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 beresolusi 640x360 tiga detik setelah media dimulai.
Pemilihan dekoder
Dalam sebagian besar kasus, ExoPlayer merender media menggunakan MediaCodec yang diperoleh dari platform yang mendasarinya. Saat decoder diinisialisasi, hal ini 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]