Secara default, ExoPlayer hanya mencatat error. Untuk mencatat log peristiwa pemain, EventLogger
dapat digunakan. Pencatatan log tambahan yang
disediakan olehnya dapat membantu
memahami apa yang dilakukan pemutar, serta untuk proses debug pemutaran
masalah performa. EventLogger
mengimplementasikan AnalyticsListener
. Jadi, mendaftarkan instance
dengan ExoPlayer
itu mudah:
Kotlin
player.addAnalyticsListener(EventLogger())
Java
player.addAnalyticsListener(new EventLogger());
Cara termudah untuk mengamati log adalah menggunakan tab logcat Android Studio. Anda
dapat memilih aplikasi Anda sebagai proses yang dapat di-debug berdasarkan nama paket (
androidx.media3.demo.main
jika menggunakan aplikasi demo) dan memberi tahu logcat
untuk membuat log aplikasi tersebut saja dengan memilih tampilkan hanya aplikasi yang dipilih. Penting
memfilter lebih lanjut pencatatan log dengan
EventLogger|ExoPlayerImpl
, untuk mendapatkan logging dari EventLogger
dan
pada pemutar video Anda.
Alternatif untuk menggunakan tab logcat Android Studio adalah dengan menggunakan konsol. Contoh:
adb logcat EventLogger:* ExoPlayerImpl:* *:s
Informasi pemutar
Class ExoPlayerImpl
mengirimkan dua baris penting tentang versi pemutar,
perangkat dan OS tempat aplikasi berjalan, dan modul ExoPlayer yang memiliki
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. Tujuan pengguna menjeda pemutaran setelah 9,4 detik, dan melanjutkan pemutaran satu detik kemudian 10,4 detik. Pemutaran akan berakhir sepuluh detik kemudian pada detik ke-20,4. Hal yang umum elemen 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 dalam periode tersebut.
Elemen akhir di setiap baris menunjukkan nilai status yang dilaporkan.
Trek media
Informasi trek akan dicatat saat trek yang tersedia atau yang dipilih berubah. Ini terjadi minimal sekali saat pemutaran dimulai. Contoh di bawah ini menunjukkan jalur logging 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 video yang tersedia
lagu. Trek video kelima tidak dipilih karena melebihi
kemampuan perangkat, seperti yang ditunjukkan oleh supported=NO_EXCEEDS_CAPABILITIES
.
Pemutar akan menyesuaikan antara trek video yang dipilih selama pemutaran. Kapan
pemain beradaptasi dari satu trek ke trek lainnya, itu dicatat dalam baris seperti ini
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 video beresolusi 640x360 tiga detik ke media.
Pemilihan decoder
Pada umumnya, ExoPlayer merender media menggunakan MediaCodec
yang diperoleh dari
platform dasar. Ketika decoder diinisialisasi, baris ini akan dicatat dalam log seperti
berikut 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]