OEM testi

ExoPlayer, çok sayıda Android uygulaması tarafından kullanılmaktadı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'daki ExoPlayer'ı seçin. Daha sonra testleri komut satırından veya Android Studio'ya gidin.

Komut satırı

Kök dizinde 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 oynatmasını çalıştırırken karşılaşılan yaygın hata modlarından bazıları testleri, her bir durumun olası temel nedeni ile birlikte aşağıda açıklanmaktadı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, sunu zaman damgası 134766000 olan bir arabelleğin sıraya alınması bekleniyor. MediaCodec.dequeueOutputBuffer ancak bunun yerine 134733000 sunu zaman damgası. Lütfen kod çözücü uygulaması, özellikle de hata ile karşılaşıldığında .

Çok fazla atlanan tampon var

Logcat, aşağıdakine benzer bir hata içerir:

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, aşağıdakine benzer bir hata içerir:

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, aşağıdakine benzer bir hata içerir:

AssertionFailedError: Test timed out after 300000 ms.

Bu hata genellikle test sırasındaki kötü ağ bağlantısından kaynaklanır gerekir. 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.