OEM testi

ExoPlayer, çok sayıda Android uygulaması tarafından kullanılır. Bir OEM olarak, ExoPlayer'ın hem yeni cihazlarda hem de mevcut cihazlar için yeni platform derlemelerinde düzgün bir şekilde çalıştığından emin olmak önemlidir. Bu sayfada, bir cihazı veya platform OTA'yı göndermeden önce çalıştırmadan önce çalıştırmanızı önerdiğimiz uyumluluk testleri ve bu testler çalıştırılırken karşılaşılan bazı yaygın hata modları açıklanmaktadır.

Testleri çalıştırma

ExoPlayer'ın oynatma testlerini çalıştırmak için öncelikle GitHub'daki ExoPlayer'ın son sürümüne göz atın. Daha sonra testleri komut satırından veya Android Studio'dan çalıştırabilirsiniz.

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, gts klasörünü sağ tıklayın ve testleri çalıştırın. Test sonuçları Android Studio'nun Çalıştır penceresinde görünür.

Yaygın hata modları

ExoPlayer'ın oynatma testlerini çalıştırırken sık karşılaşılan hata modlarından bazıları aşağıda, her durumun olası temel nedeniyle birlikte açıklanmıştır. Başka hata modları keşfedildikçe bu listeye eklenecektir.

Beklenmeyen video arabelleği sunumu zaman damgası

Logcat, şuna 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 arabellekleri yanlış bir şekilde silmesi, eklemesi veya yeniden sıralamasından kaynaklanır. Yukarıdaki örnekte, testte MediaCodec.dequeueOutputBuffer sunum zaman damgası 134766000 olan bir tamponu kuyruğa ayırması beklenirken 134733000 sunum zaman damgasına sahip bir tamponu kuyruğa soktuğunu tespit etmiştir. Bu hatayla karşılaştığınızda kod çözücü uygulamasını, özellikle de arabellekleri atmadan uyarlanabilir çözünürlük anahtarlarını doğru bir şekilde işlediğini kontrol etmenizi öneririz.

Çok fazla atlanmış arabellek var

Logcat, şuna 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 arabelleğin kodunu çözdüğü bir performans sorunudur. Yukarıdaki örnekte ExoPlayer, 25'lik bir sınır uygulayan bir test için sıraya alındığı sırada geciktiği için 200 tampon düşürmüştür. En bariz neden, video kod çözücünün arabelleklerin kod çözücüsün çok yavaş olmasıdır. Hatalar yalnızca Widevine korumalı içeriği oynatan testlerin alt kümesi için ortaya çıkıyorsa muhtemelen arabellek şifre çözme için platform işlemleri çok yavaştır. Bu bileşenlerin performansını kontrol etmenizi ve bunları hızlandırmak için optimizasyon yapılıp yapılamayacağını kontrol etmenizi öneririz.

Yerel pencerenin kimliği doğrulanamadı

Logcat, şuna 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 bit bayrağını doğru şekilde ayarlayamadığını gösterir.

Test zaman aşımına uğradı

Logcat, şuna benzer bir hata içerir:

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 test, MediaCodec, MediaDrm veya AudioTrack gibi bir platform bileşenine çağrıda takılıp kalıyor olabilir. Durumun bu olup olmadığını belirlemek için test sürecinde iş parçacıklarının çağrı yığınlarını inceleyin.