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]