Test OEM

ExoPlayer è utilizzato da un gran numero di app Android. In qualità di OEM, è importante garantire che ExoPlayer funzioni correttamente sia sui nuovi dispositivi che nuove piattaforme per 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, dai un'occhiata all'ultima release di ExoPlayer di GitHub. Puoi quindi eseguire i test dalla riga di comando Android Studio.

Riga di comando

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

./gradlew :test-exoplayer-playback:installDebug

Esegui quindi 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 e fai clic con il tasto destro del mouse sulla cartella gts ed esegui i test. I risultati del test vengono visualizzati nella console di Android Studio Finestra Esegui.

Modalità di errore comuni

Alcune delle modalità di errore comuni che si verificano durante l'esecuzione della riproduzione di ExoPlayer vengono descritti di seguito, insieme alla probabile causa principale in ciascun caso. Me verranno aggiunte a questo elenco man mano che vengono rilevate altre modalità di errore.

Timestamp della presentazione del buffer video imprevisto

Logcat conterrà un errore simile a:

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 dall'erroneo test del decodificatore video scartare, inserire o riordinare i buffer. Nell'esempio precedente, il test deve rimuovere la coda di un buffer con timestamp di presentazione 134766000 da MediaCodec.dequeueOutputBuffer, ma è stato rilevato che ha rimosso la coda di un buffer con con il timestamp della 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 a:

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

Questo errore rappresenta 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 eliminato 200 buffer perché erano in ritardo quando sono stati rimossi 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 dei test che riproducono contenuti protetti da Widevine, è probabile che la piattaforma per la decrittografia del buffer sono 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 a:

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 a:

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.