OEM-Tests

ExoPlayer wird von einer großen Anzahl von Android-Apps verwendet. Als OEM ist es wichtig, dass ExoPlayer sowohl auf neuen Geräten als auch auf neuen Plattform-Builds für bestehende Geräte ordnungsgemäß funktioniert. Auf dieser Seite werden die Kompatibilitätstests beschrieben, die wir vor dem Versand eines Geräts oder einer Plattform per Over-the-air-Update ausführen empfehlen, sowie einige der häufigsten Fehlermodi, die dabei auftreten können.

Tests ausführen

Wenn du die Wiedergabetests von ExoPlayer ausführen möchtest, lade zuerst die neueste Version von ExoPlayer von GitHub herunter. Sie können die Tests dann über die Befehlszeile oder Android Studio

Befehlszeile

Erstelle und installiere die Wiedergabetests aus dem Stammverzeichnis:

./gradlew :test-exoplayer-playback:installDebug

Führen Sie als Nächstes die Wiedergabetests im GTS-Paket aus:

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

Die Testergebnisse werden in STDOUT angezeigt.

Android Studio

Öffnen Sie das ExoPlayer-Projekt, gehen Sie zum Modul playbacktests und klicken Sie mit der rechten Maustaste im Ordner gts und führen Sie die Tests aus. Die Testergebnisse werden im Fenster „Ausführen“ von Android Studio angezeigt.

Häufige Fehlerszenarien

Im Folgenden werden einige der häufigsten Fehlermodi beschrieben, die beim Ausführen der Wiedergabetests von ExoPlayer auftreten, zusammen mit der wahrscheinlichen Ursache in jedem Fall. Sobald weitere Fehlerarten entdeckt werden, werden sie dieser Liste hinzugefügt.

Unerwarteter Zeitstempel für Präsentation des Videopuffers

Logcat enthält einen Fehler wie diesen:

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

Dieser Fehler wird meistens dadurch verursacht, dass der getestete Videodecoder falsch ist. das Verwerfen, Einfügen oder Neuanordnen von Zwischenspeichern. Im Beispiel oben sollte im Test ein Puffer mit dem Präsentationszeitstempel 134766000 aus MediaCodec.dequeueOutputBuffer entfernt werden. Stattdessen wurde jedoch ein Puffer mit dem Präsentationszeitstempel 134733000 entfernt. Wir empfehlen, die Implementierung des Decoders zu überprüfen, wenn dieser Fehler auftritt. Insbesondere sollte er adaptive Auflösungswechsel korrekt verarbeiten, ohne Puffer zu verwerfen.

Zu viele abgebrochene Zwischenspeicher

Logcat enthält einen Fehler wie diesen:

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

Dieser Fehler ist ein Leistungsproblem, bei dem der getestete Videodecoder eine große Anzahl von Puffern zu spät decodiert hat. Im obigen Beispiel hat ExoPlayer 200 Puffer, da sie zu spät gekommen sind, als sie aus der Warteschlange entfernt wurden, mit einem Grenzwert von 25. Die offensichtlichste Ursache ist, dass der Video-Decoder zu langsam Puffer decodiert. Wenn die Fehler nur bei einer Teilmenge der Tests auftreten, bei denen Widevine-geschützte Inhalte wiedergegeben werden, sind die Plattformvorgänge für die Pufferentschlüsselung wahrscheinlich zu langsam. Wir empfehlen, die Leistung dieser Komponenten zu prüfen und zu sehen, ob sie optimiert werden können, um sie zu beschleunigen.

Das native Fenster konnte nicht authentifiziert werden

Logcat enthält einen Fehler wie diesen:

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

Dieser Fehler weist darauf hin, dass das Secure Bit-Flag auf der Plattform nicht richtig festgelegt wurde.

Zeitüberschreitung beim Test

Logcat enthält einen Fehler wie diesen:

AssertionFailedError: Test timed out after 300000 ms.

Dieser Fehler wird meistens durch eine schlechte Netzwerkverbindung während des Tests verursacht. ausführen. Wenn das Gerät offenbar eine gute Netzwerkverbindung hat, hängt der Test möglicherweise beim Aufruf einer Plattformkomponente (z. B. MediaCodec, MediaDrm oder AudioTrack) fest. Prüfen Sie die Aufrufstacks der Threads im Testprozess, um dies festzustellen.