Hata ayıklama günlük kaydı

Varsayılan olarak, ExoPlayer yalnızca hataları günlüğe kaydeder. Oyuncu etkinliklerini günlüğe kaydetmek için EventLogger kullanılabilir. Sağladığı ek günlük kaydı, oynatıcının ne yaptığını anlamanın yanı sıra oynatma hatalarını ayıklama sorunları. EventLogger, AnalyticsListener yöntemini uyguladığından bir örnek kaydeder ExoPlayer kullanmak çok kolay:

Kotlin

player.addAnalyticsListener(EventLogger())

Java

player.addAnalyticsListener(new EventLogger());

Günlüğü gözlemlemenin en kolay yolu Android Studio'nun logcat sekmesini kullanmaktır. Siz uygulamanızı paket adına ( androidx.media3.demo.main) ve logcat'e bildirin sekmesinden yalnızca seçili uygulamayı göster öğesini seçebilirsiniz. İnsanların günlük kaydını EventLogger|ExoPlayerImpl, yalnızca EventLogger ve oynatıcısını kullanıyor.

Android Studio'nun logcat sekmesini kullanmaya alternatif olarak konsolu da kullanabilirsiniz. Örneğin, örnek:

adb logcat EventLogger:* ExoPlayerImpl:* *:s

Oynatıcı bilgileri

ExoPlayerImpl sınıfı, oynatıcı sürümüyle ilgili iki önemli satır sağlar: uygulamanın çalıştığı cihaz ve işletim sistemi ile uyumlu olan ExoPlayer modüllerini yüklendi:

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. İlgili içeriği oluşturmak için kullanılan Kullanıcı 9, 4 saniye sonra oynatmayı duraklatır ve bir saniye sonra şu saatte devam ettirir: 10,4 saniye. Oynatma, on saniye sonra 20,4.saniyede sona erer. Yaygın köşeli parantez içindeki öğeler şunlardır:

  • [eventTime=float]: Oyuncunun oluşturulmasından bu yana geçen gerçek süre.
  • [mediaPos=float]: Geçerli oynatma konumu.
  • [window=int]: Geçerli pencere dizini.
  • [period=int]: Bu aralıktaki geçerli dönem.

Her satırdaki son öğeler, bildirilen durumun değerini belirtir.

Medya kanalları

Kullanılabilir veya seçilen parçalar değiştiğinde parkur bilgileri kaydedilir. Bu oynatmanın başında en az bir kez gerçekleşir. Aşağıdaki örnekte, parçanın günlük kaydı oluşturma:

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ş videodan dördünü seçmiştir. izler. Beşinci video parçası, şu eşiği aştığı için seçilmedi: supported=NO_EXCEEDS_CAPABILITIES tarafından belirtildiği şekliyle cihazın özellikleri. Oynatıcı, oynatma sırasında seçili video parçaları arasında uyum sağlar. Zaman Oyuncu bir pistten diğerine geçerken, bir pistteki gibi bir satıra giriş yapılır. aşağıda bulabilirsiniz:

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 640x360 çözünürlüklü videoya geçiş yaptığını gösterir medyaya kaç saniye kaldığını anlamaya çalışırım.

Kod çözücü seçimi

Çoğu durumda, ExoPlayer medyayı,MediaCodec temel platform üzerinde çalışıyoruz. Kod çözücü başlatıldığında şunun gibi satırlara giriş yapılır: şunlardır:

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]