Types de surfaces

Cette page décrit les différents types de surfaces pouvant être utilisées pour la lecture vidéo avec Media3, et explique comment choisir le type adapté à votre cas d'utilisation. Pour en savoir plus sur les objets Surface dans Android, consultez cette documentation sur les graphiques.

Choisir un type de surface pour PlayerView

L'attribut surface_type de PlayerView vous permet de définir le type de surface utilisé pour la lecture de la vidéo. Les valeurs autorisées sont les suivantes :

  • surface_view (SurfaceView)
  • texture_view (TextureView)
  • spherical_gl_surface_view (SphericalGLSurfaceView) : pour la lecture de vidéos sphériques
  • video_decoder_gl_surface_view (VideoDecoderGLSurfaceView) : rendu vidéo à l'aide de renderers d'extension
  • none, qui est réservé à la lecture audio et doit être utilisé pour éviter d'avoir à créer une surface, car cela peut être coûteux.

Si la vue est destinée à la lecture de vidéos classiques, surface_view ou texture_view doivent être utilisés. SurfaceView présente plusieurs avantages par rapport à TextureView pour la lecture de vidéos :

  • Consommation d'énergie nettement inférieure sur de nombreux appareils.
  • Un timing des images plus précis, ce qui permet une lecture plus fluide des vidéos.
  • Prise en charge de la sortie vidéo HDR de meilleure qualité sur les appareils compatibles.
  • Prise en charge de la sortie sécurisée lors de la lecture de contenu protégé par DRM.
  • Possibilité d'afficher du contenu vidéo à la résolution maximale de l'écran sur les appareils Android TV qui mettent à l'échelle la couche d'interface utilisateur.

Dans la mesure du possible, il est donc préférable d'utiliser SurfaceView plutôt que TextureView. TextureView ne doit être utilisé que si SurfaceView ne répond pas à vos besoins. Par exemple, des animations fluides ou le défilement de la surface vidéo sont nécessaires avant Android 7.0 (niveau d'API 24), comme décrit dans les notes suivantes. Dans ce cas, il est préférable d'utiliser TextureView uniquement lorsque SDK_INT est inférieur à 24 (Android 7.0) et SurfaceView dans le cas contraire.

Choisir un type de surface dans Compose

Dans Compose, la solution d'interopérabilité utilise le composable AndroidView pour encapsuler SurfaceView et TextureView. Les deux composables qui correspondent à cela sont AndroidExternalSurface et AndroidEmbeddedExternalSurface.

Le module ui-compose Media3 fournit un composable PlayerSurface qui associe Player à un Surface en tenant compte du cycle de vie. Dans ce cas, les types de surface sont les suivants :

Il n'existe pas de type none, car cela correspondrait à ne pas inclure PlayerSurface dans votre arborescence d'UI Compose.