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]