Testy OEM

Z ExoPlayer korzysta wiele aplikacji na Androida. Dla producenta OEM należy zapewnić prawidłowe działanie ExoPlayer zarówno na nowych urządzeniach, nowych platform dla istniejących urządzeń. Na tej stronie znajdziesz informacje o zgodności testy, które zalecamy przeprowadzić przed wysłaniem aktualizacji OTA urządzenia lub platformy; kilka typowych błędów występujących podczas ich uruchamiania.

Przeprowadzanie testów

Aby przeprowadzić testy odtwarzania w odtwarzaczu ExoPlayer, najpierw zapoznaj się z najnowszą wersją ExoPlayer z GitHub. Następnie możesz uruchomić testy z poziomu wiersza poleceń lub Android Studio.

Wiersz poleceń

W katalogu głównym utwórz i zainstaluj testy odtwarzania:

./gradlew :test-exoplayer-playback:installDebug

Następnie uruchom testy odtwarzania w pakiecie GTS:

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

Wyniki testu pojawią się w STDOUT.

Android Studio,

Otwórz projekt ExoPlayer, przejdź do modułu playbacktests i kliknij prawym przyciskiem myszy w folderze gts i uruchom testy. Wyniki testów są wyświetlane w Okno uruchamiania.

Typowe tryby awarii

Najczęstsze błędy występujące podczas odtwarzania za pomocą odtwarzacza ExoPlayer testy opisane poniżej, wraz z prawdopodobną główną przyczyną każdego przypadku. Śr będzie się pojawiać na tej liście w miarę wykrywania kolejnych trybów awarii.

Nieoczekiwana sygnatura czasowa prezentacji bufora filmu

Logcat będzie zawierać błąd podobny do tego:

Caused by: java.lang.IllegalStateException: Expected to dequeue video buffer
with presentation timestamp: 134766000. Instead got: 134733000 (Processed
buffers since last flush: 2242).

Najczęstszą przyczyną tej awarii jest nieprawidłowy test dekodera wideo. nie dodawać buforów, wstawiać je lub zmieniać ich kolejność. W tym przykładzie test spodziewane usunięcie z kolejki bufora z sygnaturą czasową prezentacji 134766000 od MediaCodec.dequeueOutputBuffer, ale odkryliśmy, że został usunięty z kolejki bufor o nazwie sygnatura czasowa prezentacji 134733000. Zalecamy sprawdzenie implementacji dekodera w przypadku wystąpienia tego błędu. W szczególności prawidłowo obsługuje przełączniki rozdzielczości adaptacyjnej bez odrzucania buforów.

Zbyt wiele utraconych buforów

Logcat będzie zawierać błąd podobny do tego:

junit.framework.AssertionFailedError: Codec(DashTest:Video) was late decoding:
200 buffers. Limit: 25.

Wiąże się to z problemem z wydajnością, w którym testowany dekoder wideo zbyt długie dekodowanie dużej liczby buforów. W powyższym przykładzie ExoPlayer pominął 200 buforów, ponieważ były opóźnione przed usunięciem z kolejki, na potrzeby testu nakładającego limit 25. Najbardziej oczywistą przyczyną jest to, że dekoder wideo zbyt wolne bufory dekodowania. Błędy występują tylko w przypadku części testów które odtwarzają treści chronione przez Widevine, prawdopodobnie platforma działająca odszyfrowywania bufora zbyt wolno. Zalecamy sprawdzenie skuteczności tych elementów oraz czy można wprowadzić jakieś optymalizacje, aby przyspieszyć ich zwiększyć.

Nie udało się uwierzytelnić okna natywnego

Logcat będzie zawierać błąd podobny do tego:

SurfaceUtils: native window could not be authenticated
ExoPlayerImplInternal: Internal runtime error.
ExoPlayerImplInternal: android.media.MediaCodec$CodecException: Error 0xffffffff

Ten błąd oznacza, że platforma nie ustawił prawidłowo zabezpieczeń flagi bitowej.

Przekroczono limit czasu testu

Logcat będzie zawierać błąd podobny do tego:

AssertionFailedError: Test timed out after 300000 ms.

Ta awaria jest najczęściej spowodowana niską jakością połączenia sieciowego podczas testu bieganie. Jeśli urządzenie ma dobre połączenie sieciowe, jest to możliwe. że test blokuje się wywoływaniem komponentu platformy (np. MediaCodec, MediaDrm lub AudioTrack). Sprawdź stosy wywołań funkcji wątków w procesie testowym, aby ustalić, czy tak jest.