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