Esta página descreve os diferentes tipos de plataformas que podem ser usadas para a reprodução de vídeos com o Media3 e como escolher o tipo certo para seu caso de uso. Para saber mais sobre objetos de superfície no Android, leia esta documentação de gráficos.
Escolher um tipo de superfície para o PlayerView
O atributo surface_type
de PlayerView
permite definir o tipo de
superfície usada para a reprodução de vídeo. Os valores permitidos são:
surface_view
(SurfaceView
)texture_view
(TextureView
)spherical_gl_surface_view
(SphericalGLSurfaceView
) para reprodução de vídeo esféricovideo_decoder_gl_surface_view
(VideoDecoderGLSurfaceView
): renderização de vídeo usando renderizadores de extensão.none
: é usado apenas para reprodução de áudio e deve ser usado para evitar a necessidade de criar uma plataforma, porque isso pode ser caro.
Se a visualização for para reprodução de vídeo normal, use surface_view
ou texture_view
. O SurfaceView
tem vários benefícios em relação ao
TextureView
para a reprodução de vídeo:
- Consumo de energia menor em muitos dispositivos.
- Tempo de frame mais preciso, resultando em uma reprodução de vídeo mais suave.
- Suporte para saída de vídeo HDR de maior qualidade em dispositivos compatíveis.
- Suporte para saída segura ao reproduzir conteúdo protegido por DRM.
- A capacidade de renderizar conteúdo de vídeo na resolução total da tela em dispositivos Android TV que aumentam a camada da interface.
Portanto, dê preferência a SurfaceView
em vez de TextureView
, sempre que possível.
O TextureView
só deve ser usado se o SurfaceView
não atender às suas necessidades. Um
exemplo é quando animações suaves ou rolagem da superfície do vídeo são necessárias
antes do Android 7.0 (nível 24 da API), conforme descrito nas notas a seguir. Nesse
caso, é preferível usar TextureView
apenas quando SDK_INT
for menor
que 24 (Android 7.0) e SurfaceView
, caso contrário.
Escolher um tipo de plataforma no Compose
No Compose, a solução de interoperabilidade usa o elemento combinável AndroidView
para agrupar
SurfaceView
e TextureView
. Os dois elementos combináveis que correspondem a
isso são AndroidExternalSurface
e AndroidEmbeddedExternalSurface
.
O módulo ui-compose
do Media3 fornece um elemento combinável PlayerSurface
que vincula
o Player
a um Surface
considerando o ciclo de vida. Os tipos de superfície
neste caso são:
SURFACE_TYPE_SURFACE_VIEW
(eficazmenteAndroidExternalSurface
)SURFACE_TYPE_TEXTURE_VIEW
(eficazmenteAndroidEmbeddedExternalSurface
)
Não há um tipo none
, já que isso corresponderia a não incluir o
PlayerSurface
na árvore da interface do Compose.