Varsayılan olarak ExoPlayer yalnızca hataları günlüğe kaydeder. Oyuncu etkinliklerini günlüğe kaydetmek için EventLogger sınıfı kullanılabilir. Sağladığı ek günlük kaydı, oynatıcının ne yaptığını anlamanın yanı sıra oynatma sorunlarında hata ayıklama için de yararlı olabilir. EventLogger, AnalyticsListener'i uygular. Bu sayede bir örneği ExoPlayer ile kaydedebilirsiniz:
Kotlin
player.addAnalyticsListener(EventLogger())
Java
player.addAnalyticsListener(new EventLogger());
Günlüğü incelemek için Android Studio'nun logcat sekmesini kullanın. Uygulamanızı paket adına göre (demo uygulamasını kullanıyorsanız androidx.media3.demo.main) hata ayıklanabilir işlem olarak seçebilir ve yalnızca seçili uygulamayı göster'i seçerek logcat sekmesine yalnızca bu uygulama için günlük kaydı yapmasını söyleyebilirsiniz. Yalnızca EventLogger ve oynatıcıdan günlük kaydı almak için EventLogger|ExoPlayerImpl ifadesiyle günlük kaydını daha fazla filtreleyebilirsiniz.
Android Studio'nun logcat sekmesini kullanmaya alternatif olarak konsolu kullanabilirsiniz. Örneğin:
adb logcat EventLogger:* ExoPlayerImpl:* *:s
Oyuncu bilgileri
ExoPlayerImpl sınıfı; oynatıcı sürümü, uygulamanın çalıştığı cihaz ve OS, etkin özellik bayrakları ve 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] [Canary:ON]
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, oynatıcı hazırlandıktan 0,93 saniye sonra oynatma işlemi başlar. Kullanıcı, oynatmayı 9,4 saniye sonra duraklatır ve bir saniye sonra 10,4 saniyede devam ettirir. Oynatma on saniye sonra, 20,4 saniyede sona erer. Köşeli parantez içindeki yaygın öğeler şunlardır:
[eventTime=float]: Oynatıcı oluşturulduktan sonra geçen gerçek zaman.[mediaPos=float]: Mevcut oynatma konumu.[window=int]: Geçerli pencere dizini.[period=int]: Bu penceredeki geçerli dönem.
Her satırdaki son öğeler, raporlanan durumun değerini gösterir.
Medya kanalları
Mevcut veya seçili parçalar değiştiğinde parça bilgileri günlüğe kaydedilir. Bu, oynatmanın başında en az bir kez gerçekleşir. Aşağıdaki örnekte, uyarlanabilir bir akış için parça günlüğü 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 kapasitesini aştığı için seçilmez.
Oynatıcı, oynatma sırasında seçilen video parçaları arasında uyum sağlar. Oynatıcı bir parçadan diğerine geçtiğinde aşağıdaki gibi bir satır 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 medyanın üçüncü saniyesinde 640x360 çözünürlüklü video parçasına geçtiğini gösterir.
Kod çözücü seçimi
Çoğu durumda ExoPlayer, temel platformdan alınan bir MediaCodec kullanarak medya oluşturur. Bir kod çözücü başlatıldığında bu durum 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]