ExoPlayer, çok sayıda Android uygulaması tarafından kullanılır. OEM olarak, Hem yeni cihazlarda hem de diğer cihazlarda ExoPlayer'ın doğru çalışmasını mevcut cihazlar için yeni platform derlemeleri bulunuyor. Bu sayfada uyumluluk açıklanmaktadır bir cihaz veya platform OTA'sını göndermeden önce gerçekleştirmeyi önerdiğimiz testler ve çalışırken karşılaşılan yaygın hata modlarından bazılarını aşağıda bulabilirsiniz.
Testleri uygulama
ExoPlayer'ın oynatma testlerini çalıştırmak için öncelikle GitHub'da ExoPlayer'ın en son sürümüne göz atın. Daha sonra testleri komut satırından veya Android Studio'ya gidin.
Komut satırı
Kök dizinden oynatma testlerini oluşturun ve yükleyin:
./gradlew :test-exoplayer-playback:installDebug
Ardından, GTS paketinde oynatma testlerini çalıştırın:
adb shell am instrument -w -r -e debug false \ -e package androidx.media3.test.exoplayer.playback.gts \ androidx.media3.test.exoplayer.playback.test/androidx.test.runner.AndroidJUnitRunner
Test sonuçları STDOUT içinde görünür.
Android Studio
ExoPlayer projesini açın, playbacktests
modülüne gidin ve sağ tıklayın
bu gts
klasöründe de görüntüleyebilir ve testleri çalıştırabilirsiniz. Test sonuçları Android Studio'nun
Çalıştır penceresi.
Sık karşılaşılan hata modları
ExoPlayer'ın oynatma testleri çalıştırıldığında karşılaşılan yaygın hata modlarından bazıları, her durumdaki olası temel nedenle birlikte aşağıda açıklanmıştır. Biz yeni hata modları keşfedildikçe bu listeye eklenecektir.
Beklenmeyen video arabellek sunumu zaman damgası
Logcat, aşağıdakine benzer bir hata içerir:
Caused by: java.lang.IllegalStateException: Expected to dequeue video buffer
with presentation timestamp: 134766000. Instead got: 134733000 (Processed
buffers since last flush: 2242).
Bu hata genellikle test edilen video kod çözücünün yanlış olmasından kaynaklanır.
tamponları silmek, eklemek veya yeniden sıralamak. Yukarıdaki örnekte, testin MediaCodec.dequeueOutputBuffer
kaynağından 134766000
sunum zaman damgasına sahip bir arabelleğin sırasını kaldırması beklenirken bunun yerine 134733000
sunum zaman damgasına sahip bir arabelleğin sırasının kaldırıldığı tespit edilmiştir. Bu hatayla karşılaştığınızda kod çözücü uygulamasını, özellikle de arabellekleri atlamadan uyarlanabilir çözünürlük geçişlerini doğru şekilde işleyip işlemediğini kontrol etmenizi öneririz.
Çok fazla atlanan tampon var
Logcat'te aşağıdakine benzer bir hata bulunur:
junit.framework.AssertionFailedError: Codec(DashTest:Video) was late decoding:
200 buffers. Limit: 25.
Bu hata, test edilen video kod çözücünün. çok sayıda tamponun kodunu çözmeyi öğretiyor. Yukarıdaki örnekte, ExoPlayer, 200 tampon, bir test için kuyruğa alınmadan önce geciktiler bu sınır 25'tir. Bunun en bariz nedeni, video kod çözücünün arabelleklerin kodu çözme işlemi çok yavaştır. Hatalar yalnızca testlerin alt kümesi için oluşursa Widevine korumalı içeriği oynatıyorsa platformun açık kaynaklı çok yavaş olduğunu varsayalım. Kampanyalarınızın performansını kontrol etmenizi ve hız üzerinde optimizasyon yapılıp yapılamayacağını kaldırın.
Yerel pencerenin kimliği doğrulanamadı
Logcat'te aşağıdakine benzer bir hata bulunur:
SurfaceUtils: native window could not be authenticated
ExoPlayerImplInternal: Internal runtime error.
ExoPlayerImplInternal: android.media.MediaCodec$CodecException: Error 0xffffffff
Bu hata, platformun güvenli reklam ayarlarını doğru şekilde yapamadığını gösterir. bit işaretidir.
Test zaman aşımına uğradı
Logcat'te aşağıdakine benzer bir hata bulunur:
AssertionFailedError: Test timed out after 300000 ms.
Bu hata genellikle test çalıştırması sırasında zayıf ağ bağlantısından kaynaklanır. Cihazın ağ bağlantısı iyi görünüyorsa muhtemelen
testin, platform bileşenine (ör.
MediaCodec
, MediaDrm
veya AudioTrack
). Şunu inceleyin:
test sürecinde ileti dizileri oluşturur.