OEM testi

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.