Tests OEM

ExoPlayer est utilisé par un grand nombre d'applications Android. En tant qu'OEM, important de vous assurer qu'ExoPlayer fonctionne correctement sur les nouveaux appareils et sur de nouvelles plateformes pour les appareils existants. Cette page décrit la compatibilité tests que nous recommandons d'exécuter avant d'expédier une OTA de l'appareil ou de la plate-forme certains des modes de défaillance courants rencontrés lors de leur exécution.

Exécuter les tests

Pour exécuter les tests de lecture d'ExoPlayer, commencez par vérifier la dernière version de ExoPlayer sur GitHub Vous pouvez ensuite exécuter les tests à partir de la ligne de commande ou Android Studio

Ligne de commande

À partir du répertoire racine, créez et installez les tests de lecture:

./gradlew :test-exoplayer-playback:installDebug

Exécutez ensuite les tests de lecture dans le package 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

Les résultats du test s'affichent dans STDOUT.

Android Studio

Ouvrez le projet ExoPlayer, accédez au module playbacktests et effectuez un clic droit. dans le dossier gts et exécuter les tests. Les résultats des tests s'affichent dans le Fenêtre d'exécution.

Modes de défaillance courants

Voici quelques-uns des modes de défaillance courants rencontrés lors de l'exécution de la lecture d'ExoPlayer sont décrits ci-dessous, ainsi que l'origine probable de chaque cas. Mer seront ajoutés à cette liste au fur et à mesure que d'autres modes de défaillance seront découverts.

Code temporel de présentation inattendu de la mémoire tampon de la vidéo

Logcat contiendra une erreur semblable à celle-ci:

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

Cet échec est généralement dû à une erreur du décodeur vidéo testé supprimer, insérer ou réorganiser des tampons. Dans l'exemple ci-dessus, le test devrait retirer la file d'attente d'un tampon avec le code temporel de présentation 134766000 de MediaCodec.dequeueOutputBuffer, mais a constaté qu'il avait retiré la file d'attente d'un tampon avec le code temporel de présentation 134733000 à la place. Nous vous recommandons de consulter du décodeur en cas d'échec, en particulier si gère correctement les changements de résolution adaptatives sans supprimer les tampons.

Trop de tampons perdus

Logcat contiendra une erreur semblable à celle-ci:

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

Cet échec est un problème de performances : le décodeur vidéo testé le décodage tardif d'un grand nombre de tampons. Dans l'exemple ci-dessus, ExoPlayer a abandonné 200 tampons, car ils étaient en retard au moment de leur retrait de la file d'attente, pour un test qui impose une limite de 25. La cause la plus évidente est que le décodeur vidéo le décodage des tampons est trop lent. Si les échecs ne se produisent que pour le sous-ensemble de tests qui lisent du contenu protégé par Widevine, il est probable que le fonctionnement pour le déchiffrement du tampon sont trop lents. Nous vous recommandons de vérifier les performances ces composants, et chercher à déterminer s'il est possible d'optimiser et de les activer.

Impossible d'authentifier la fenêtre native

Logcat contiendra une erreur semblable à celle-ci:

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

Cela peut indiquer que la plate-forme n'a pas correctement configuré de bits.

Le test a expiré

Logcat contiendra une erreur semblable à celle-ci:

AssertionFailedError: Test timed out after 300000 ms.

Cet échec est généralement dû à une mauvaise connectivité réseau lors du test exécuter. Si l'appareil semble avoir une bonne connectivité réseau, il est possible que le test se bloque lors de l'appel d'un composant de plate-forme (tel que MediaCodec, MediaDrm ou AudioTrack). Inspectez les piles d'appels du dans le processus de test pour déterminer si tel est le cas.