ExoPlayer wird von einer großen Anzahl von Android-Apps verwendet. Als OEM ist es dass ExoPlayer sowohl auf neuen Geräten als auch auf neue Plattform-Builds für bestehende Geräte. Auf dieser Seite wird die Kompatibilität beschrieben. Tests, die wir empfehlen, bevor Sie ein Gerät oder eine Plattform-OTA versenden, und einige der häufigsten Fehlermodi, die beim Ausführen auftreten.
Tests ausführen
Um die Wiedergabetests von ExoPlayer auszuführen, musst du dir zuerst die neueste Version von ExoPlayer von GitHub. Sie können die Tests dann über die Befehlszeile oder Android Studio
Befehlszeile
Erstellen und installieren Sie im Stammverzeichnis die Wiedergabetests:
./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 erscheinen in der
Ausführungsfenster.
Häufige Fehlermodi
Einige der häufigsten Fehlermodi, die beim Ausführen der ExoPlayer-Wiedergabe auftreten Die Tests werden nachfolgend zusammen mit der wahrscheinlichen Ursache für jeden Fall beschrieben. Mi. wird dieser Liste hinzugefügt, sobald weitere Fehlermodi erkannt werden.
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 hat der Test
Es wurde erwartet, dass ein Zwischenspeicher mit dem Präsentationszeitstempel 134766000
aus der Warteschlange entfernt wird von
MediaCodec.dequeueOutputBuffer
hat aber festgestellt, dass ein Zwischenspeicher mit folgendem Inhalt aus der Warteschlange entfernt wurde:
Präsentationszeitstempel 134733000
. Wir empfehlen Ihnen, die
Decoder-Implementierung beim Auftreten dieses Fehlers, insbesondere wenn es
bei der Auswahl von adaptiven Auflösungen richtig verarbeitet, 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 stellt ein Leistungsproblem dar, bei dem der getestete Videodecoder späten Decodierung einer großen Anzahl von Puffern. 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 die Decodierung von Zwischenspeichern zu langsam ist. Wenn die Fehler nur bei einer Teilmenge der Tests auftreten die geschützte Inhalte von Widevine wiedergeben, für die Pufferentschlüsselung langsam sind. Wir empfehlen, die Leistung der und zu prüfen, ob Optimierungen möglich sind, sie nach oben bringen.
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 die Plattform die sichere Bit-Flag.
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 eine gute Netzwerkverbindung hat,
dass der Test beim Aufrufen einer Plattformkomponente (z. B.
MediaCodec
, MediaDrm
oder AudioTrack
). Überprüfen Sie die Aufrufstacks der
Threads im Testprozess, um festzustellen, ob dies der Fall ist.