Logging debug

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]