Varsayılan olarak, ExoPlayer yalnızca hataları günlüğe kaydeder. Oynatıcı 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ını gidermek için de yararlı olabilir. EventLogger
, AnalyticsListener
'u uygular. Bu nedenle, bir örneği ExoPlayer
ile kaydetmek kolaydır:
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ıklama işlemi olarak seçebilir (demo uygulamayı kullanıyorsanız androidx.media3.demo.main
) ve yalnızca seçili uygulamayı göster'i seçerek logcat sekmesine yalnızca bu uygulama için günlük kaydetmesini söyleyebilirsiniz. Yalnızca EventLogger
ve oynatıcının günlüklerini almak için günlük kaydını EventLogger|ExoPlayerImpl
ifadesiyle daha da filtreleyebilirsiniz.
Android Studio'nun logcat sekmesini kullanmanın alternatifi konsolu kullanmaktır. Örneğin:
adb logcat EventLogger:* ExoPlayerImpl:* *:s
Oyuncu bilgileri
ExoPlayerImpl
sınıfı, oynatıcı sürümü hakkında iki önemli satır içerir: uygulamanın çalıştığı cihaz, işletim sistemi ve yüklenmiş ExoPlayer modülleri:
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
Oyuncu 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şlar. Kullanıcı, 9,4 saniye sonra oynatmayı duraklatır ve bir saniye sonra, 10,4. saniyede devam ettirir. Oynatma, on saniye sonra 20,4.saniyede sona erer. Köşeli parantez içinde ortak kullanılan öğeler:
[eventTime=float]
: Oynatıcı oluşturulduğundan bu yana geçen saat.[mediaPos=float]
: Mevcut oynatma konumu.[window=int]
: Geçerli pencere dizini.[period=int]
: Bu aralıktaki geçerli dönem.
Her satırdaki son öğeler, raporlanan durumun değerini belirtir.
Medya kanalları
Mevcut veya seçili parçalar değiştiğinde parça bilgileri günlüğe kaydedilir. Bu durum, oynatma işleminin 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, oyuncu mevcut beş video parçasından dördünü seçmiştir. Beşinci video parçası, supported=NO_EXCEEDS_CAPABILITIES
tarafından belirtilen şekilde cihazın
özelliklerini aştığı için seçilmedi.
Oynatma sırasında oynatıcı, seçili video parçaları arasında geçiş yapar. Oynatıcı bir parçadan diğerine geçtiğinde aşağıdaki gibi bir satırla 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 medyaya girmek üzere üç saniye içinde 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 edindiği bir MediaCodec
kullanarak medya oluşturur. Bir kod çözücü ilk 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]