ExoPlayer varsayılan olarak yalnızca hataları günlüğe kaydeder. Oyuncu etkinliklerini günlüğe kaydetmek için EventLogger
sınıfı kullanılabilir. Bu ek günlük kaydı, oyuncunun ne yaptığını anlamanın yanı sıra oynatma sorunlarında hata ayıklamak için de faydalı olabilir. EventLogger uygulandığı için ExoPlayer ile bir örneği kaydetmek kolaydır:AnalyticsListener
Kotlin
player.addAnalyticsListener(EventLogger())
Java
player.addAnalyticsListener(new EventLogger());
Günlüğü gözlemlemenin en kolay yolu Android Studio'nun logcat sekmesini kullanmaktır. Uygulamanızı paket adına göre hata ayıklanabilir işlem olarak seçebilir (
androidx.media3.demo.main demo uygulamasını kullanıyorsanız) ve Yalnızca seçili uygulamayı göster'i seçerek logcat sekmesine yalnızca bu uygulama için günlük kaydı tutmasını söyleyebilirsiniz. Yalnızca EventLogger ve oynatıcıdan gelen günlükleri almak için EventLogger|ExoPlayerImpl ifadesiyle günlüğe kaydetme işlemini daha da filtrelemek mümkündür.
Android Studio'nun logcat sekmesini kullanmak yerine konsolu kullanabilirsiniz. Örneğin:
adb logcat EventLogger:* ExoPlayerImpl:* *:s
Oyuncu bilgileri
ExoPlayerImpl sınıfı, oynatıcı sürümü, uygulamanın üzerinde çalıştığı cihaz ve işletim sistemi ile yüklenen ExoPlayer modülleri hakkında iki önemli satır sunar:
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]
Oynatma durumu
Oynatıcı durumu değişiklikleri aşağıdaki gibi satırlara kaydedilir:
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]
Bu örnekte oynatma, oynatıcı hazırlandıktan 0,93 saniye sonra başlıyor. Kullanıcı, 9,4 saniye sonra oynatmayı duraklatır ve bir saniye sonra 10,4 saniyede oynatmaya devam eder. Oynatma, on saniye sonra 20,4 saniyede sona erer. Köşeli parantez içindeki ortak öğeler şunlardır:
[eventTime=float]: Oyuncu oluşturulduğundan bu yana geçen süre.[mediaPos=float]: Mevcut oynatma konumu.[window=int]: Geçerli pencere dizini.[period=int]: Söz konusu penceredeki geçerli dönem.
Her satırdaki son öğeler, bildirilen durumun değerini gösterir.
Medya kanalları
Kullanılabilir veya seçili parçalar değiştiğinde parça bilgileri kaydedilir. Bu durum, oynatma işleminin başında en az bir kez gerçekleşir. Aşağıdaki örnekte, uyarlanabilir bir akış için izleme kaydı gösterilmektedir:
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: ]
Bu örnekte, oynatıcı mevcut beş video parçasından dördünü seçmiştir. Beşinci video parçası, supported=NO_EXCEEDS_CAPABILITIES ile belirtildiği gibi cihazın özelliklerini aştığı için seçilmedi.
Oynatıcı, oynatma sırasında seçilen video parçaları arasında geçiş yapar. Oynatıcı bir parçadan diğerine geçtiğinde bu işlem aşağıdaki gibi bir satırda günlüğe kaydedilir:
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]
Bu günlük satırı, oynatıcının medyada üç saniye sonra 640x360 çözünürlüklü video parçasına geçtiğini gösterir.
Kod çözücü seçimi
Çoğu durumda ExoPlayer, medyayı temel platformdan MediaCodec edinilen bir kullanarak oluşturur. Bir kod çözücü başlatıldığında bu işlem aşağıdaki gibi satırlara kaydedilir:
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]