Test OEM

ExoPlayer è utilizzato da un gran numero di app Android. In qualità di OEM, è importante assicurarti che ExoPlayer funzioni correttamente sia sui nuovi dispositivi sia sulle nuove build della piattaforma per i dispositivi esistenti. In questa pagina viene descritta la compatibilità test che consigliamo di eseguire prima di spedire un OTA per dispositivo o piattaforma; e alcune delle modalità di errore più comuni che si verificano durante l'esecuzione.

Esecuzione dei test

Per eseguire i test di riproduzione di ExoPlayer, controlla innanzitutto l'ultima release di ExoPlayer da GitHub. Puoi quindi eseguire i test dalla riga di comando o da Android Studio.

Riga di comando

Dalla directory principale, crea e installa i test di riproduzione:

./gradlew :test-exoplayer-playback:installDebug

Poi, esegui i test di riproduzione nel pacchetto 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

I risultati del test vengono visualizzati in STDOUT.

Android Studio

Apri il progetto ExoPlayer, vai al modulo playbacktests, fai clic con il tasto destro del mouse sulla cartella gts ed esegui i test. I risultati del test vengono visualizzati nella Finestra Esegui.

Modalità di errore comuni

Di seguito sono descritte alcune delle modalità di errore comuni riscontrate durante l'esecuzione dei test di riproduzione di ExoPlayer, insieme alla probabile causa principale in ogni caso. Aggiungeremo altri elementi a questo elenco man mano che vengono scoperte ulteriori modalità di errore.

Timestamp della presentazione del buffer video imprevisto

Logcat conterrà un errore simile al seguente:

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

Questo errore è causato molto spesso dal fatto che il decodificatore video in test elimina, inserisce o riordina in modo errato i buffer. Nell'esempio precedente, il test si aspettava di rimuovere dalla coda un buffer con timestamp di presentazione 134766000 da MediaCodec.dequeueOutputBuffer, ma ha rilevato che è stato rimosso dalla coda un buffer con timestamp di presentazione 134733000. Ti consigliamo di controllare decoder quando si verifica questo errore, in particolare il fatto gestisce correttamente i sensori di risoluzione adattiva senza scartare i buffer.

Troppi buffer eliminati

Logcat conterrà un errore simile al seguente:

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

Questo errore è un problema di prestazioni, in cui il decodificatore video oggetto del test la decodifica tardiva di un grande numero di buffer. Nell'esempio precedente, ExoPlayer ha perso 200 buffer perché erano in ritardo al momento dell'estrazione dalla coda, per un test che impone un limite di 25. La causa più ovvia è che il decoder video è troppo lento per i buffer. Se gli errori si verificano solo per il sottoinsieme di test che riproduce contenuti protetti da Widevine, è probabile che le operazioni della piattaforma per la decrittografia del buffer siano troppo lente. Ti consigliamo di controllare il rendimento questi componenti e valutando se sia possibile ottimizzare la velocità e seleziono.

Impossibile autenticare la finestra nativa

Logcat conterrà un errore simile al seguente:

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

Questo errore indica che la piattaforma non imposta correttamente il token sicuro flag bit.

Timeout del test

Logcat conterrà un errore simile al seguente:

AssertionFailedError: Test timed out after 300000 ms.

Questo errore è causato molto spesso da una scarsa connettività di rete durante il test vengono eseguiti tutti i test delle unità. Se il dispositivo ha una buona connettività di rete, è possibile che la chiamata sia bloccata su un componente della piattaforma (come MediaCodec, MediaDrm o AudioTrack). Controlla gli stack di chiamate thread durante il processo di test per stabilire se questo è il caso.