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ériquesvideo_decoder_gl_surface_view
(VideoDecoderGLSurfaceView
) : rendu vidéo à l'aide de renderers d'extensionnone
, 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 :
SURFACE_TYPE_SURFACE_VIEW
(soitAndroidExternalSurface
)SURFACE_TYPE_TEXTURE_VIEW
(en réalité,AndroidEmbeddedExternalSurface
)
Il n'existe pas de type none
, car cela correspondrait à ne pas inclure PlayerSurface
dans votre arborescence d'UI Compose.