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 doğru şekilde çalıştığından emin olmanız önemlidir. Bu sayfada, bir cihazı veya platformu OTA olarak göndermeden önce çalıştırmanızı önerdiğimiz uyumluluk testleri ve bunları çalıştırı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'dan ExoPlayer'ın en son sürümünü indirin. Ardından 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'ta 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 Run (Çalıştır) penceresinde gösterilir.

Sık karşılaşılan arıza modları

ExoPlayer'ın oynatma testleri çalıştırılırken karşılaşılan bazı yaygın hata modları ve her bir durumda olası temel neden aşağıda açıklanmıştır. Başka arıza modları keşfedildikçe bu listeye eklemeler yapacağız.

Beklenmeyen video arabelleği sunumu zaman damgası

Logcat'te şuna benzer bir hata bulunur:

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 en sık olarak, test edilen video kod çözücünün arabellekleri yanlış şekilde atmasından, eklemesinden veya yeniden sıralamasından kaynaklanır. Yukarıdaki örnekte, testin MediaCodec.dequeueOutputBuffer konumundan 134766000 sunum zaman damgalı bir arabellekten sıraya çıkarma işlemi yapması bekleniyordu ancak bunun yerine 134733000 sunum zaman damgalı bir arabellekten sıraya çıkarma işlemi yaptığı tespit edildi. Bu hatayla karşılaştığınızda kod çözücü uygulamasını kontrol etmenizi, özellikle de arabellekleri atmadan uyarlanabilir çözünürlük geçişlerini doğru şekilde yaptığından emin olmanızı öneririz.

Çok fazla arabellek bırakıldı

Logcat'te şuna 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 arabelleğin kodunu geç çözdüğü bir performans sorunudur. Yukarıdaki örnekte, ExoPlayer, 25 sınırı uygulayan bir test için sıradan çıkarıldıklarında geç kaldıkları gerekçesiyle 200 arabellek bıraktı. En belirgin neden, video kod çözücünün arabellekleri çok yavaş çözmesidir. Hatalar yalnızca Widevine korumalı içeriğin oynatıldığı testlerin alt kümesinde meydana geliyorsa arabellek şifre çözme için platform işlemlerinin çok yavaş olması muhtemeldir. Bu bileşenlerin performansını kontrol etmenizi ve hızlarını artırmak için optimizasyon yapılıp yapılamayacağını incelemenizi öneririz.

Yerel pencere kimliği doğrulanamadı

Logcat'te şuna 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 bit işaretini doğru şekilde ayarlayamadığını gösterir.

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

Logcat'te şuna benzer bir hata bulunur:

AssertionFailedError: Test timed out after 300000 ms.

Bu başarısızlık en çok test çalıştırması sırasında ağ bağlantısının zayıf olmasından kaynaklanır. Cihazın ağ bağlantısı iyi görünüyorsa testin bir platform bileşenine (ör. MediaCodec, MediaDrm veya AudioTrack) çağrı yaparken takılması mümkündür. Bunun böyle olup olmadığını belirlemek için test sürecindeki iş parçacıklarının çağrı yığınlarını inceleyin.