En esta página, se describen los diferentes tipos de superficies que se pueden usar para la reproducción de video con Media3 y cómo elegir el tipo adecuado para tu caso de uso. Para obtener más información sobre los objetos Surface en Android, consulta esta documentación de gráficos.
Elige un tipo de superficie para PlayerView
El atributo surface_type
de PlayerView
te permite establecer el tipo de superficie que se usa para la reproducción de video. Los valores permitidos son los siguientes:
surface_view
(SurfaceView
)texture_view
(TextureView
)spherical_gl_surface_view
(SphericalGLSurfaceView
): Para la reproducción de videos esféricosvideo_decoder_gl_surface_view
(VideoDecoderGLSurfaceView
): Renderización de video con renderizadores de extensionesnone
, que es solo para la reproducción de audio y se debe usar para evitar tener que crear una superficie, ya que esto puede ser costoso.
Si la vista es para la reproducción de video normal, se debe usar surface_view
o texture_view
. SurfaceView
tiene varios beneficios en comparación con TextureView
para la reproducción de video:
- Menor consumo de energía en muchos dispositivos
- Se mejoró la sincronización de fotogramas, lo que permite una reproducción de video más fluida.
- Se agregó compatibilidad con salida de video HDR de mayor calidad en dispositivos aptos.
- Se agregó compatibilidad con la salida segura cuando se reproduce contenido protegido por DRM.
- La capacidad de renderizar contenido de video en la resolución completa de la pantalla en dispositivos Android TV que aumentan la resolución de la capa de IU
Por lo tanto, se debe preferir SurfaceView
en lugar de TextureView
siempre que sea posible.
TextureView
solo debe usarse si SurfaceView
no satisface tus necesidades. Un ejemplo es cuando se requieren animaciones o desplazamientos fluidos de la superficie de video antes de Android 7.0 (nivel de API 24), como se describe en las siguientes notas. En este caso, es preferible usar TextureView
solo cuando SDK_INT
es inferior a 24 (Android 7.0) y SurfaceView
en los demás casos.
Cómo elegir un tipo de superficie en Compose
En Compose, la solución de interoperabilidad usa el elemento AndroidView
componible para unir SurfaceView
y TextureView
. Los dos elementos componibles que corresponden a eso son AndroidExternalSurface
y AndroidEmbeddedExternalSurface
.
El módulo ui-compose
de Media3 proporciona un elemento PlayerSurface
componible que vincula el Player
a un Surface
de manera optimizada para el ciclo de vida. En este caso, los tipos de superficie son los siguientes:
SURFACE_TYPE_SURFACE_VIEW
(AndroidExternalSurface
de manera efectiva)SURFACE_TYPE_TEXTURE_VIEW
(AndroidEmbeddedExternalSurface
de manera efectiva)
No hay un tipo none
, ya que correspondería a no incluir el PlayerSurface
en tu árbol de IU de Compose.