Types de surfaces

Cette page décrit les différents types de surfaces pouvant être utilisés 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 la 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 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 moteurs de rendu d'extension
  • none : réservé à la lecture audio uniquement. Il doit être utilisé pour éviter de créer une surface, car cela peut être coûteux.

Si la vue est destinée à la lecture vidéo standard, surface_view ou texture_view doit être utilisée. SurfaceView présente un certain nombre d'avantages par rapport à TextureView pour la lecture vidéo:

  • Consommation d'énergie considérablement réduite sur de nombreux appareils.
  • Calendrier des images plus précis, ce qui permet une lecture vidéo plus fluide.
  • Prise en charge d'une 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 le contenu vidéo à la résolution complète 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, lorsque des animations fluides ou un défilement de la surface vidéo sont requis 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 y correspondent sont AndroidExternalSurface et AndroidEmbeddedExternalSurface.

Le module ui-compose Media3 fournit un composable PlayerSurface qui lie le Player à un Surface de manière consciente du cycle de vie. Les types de surfaces dans ce cas sont les suivants:

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