Esta página descreve os diferentes tipos de superfícies que podem ser usadas para reprodução de vídeo 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 PlayerView
O atributo surface_type
de PlayerView
permite definir o tipo de
superfície usada para 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ãonone
, que é apenas para reprodução de áudio e deve ser usado para evitar a criação de uma superfície, já que 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 reprodução de vídeo:
- Reduz significativamente o consumo de energia em muitos dispositivos.
- Melhor precisão de tempo de frame, resultando em uma reprodução de vídeo mais suave.
- Suporte para saída de vídeo HDR de alta 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, SurfaceView
deve ser preferido em vez de TextureView
sempre que possível.
TextureView
só deve ser usado se SurfaceView
não atender às suas necessidades. Um exemplo é quando animações suaves ou rolagem da superfície de 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
somente quando SDK_INT
for menor que 24 (Android 7.0) e SurfaceView
caso contrário.
Escolher um tipo de superfície no Compose
No Compose, a solução de interoperabilidade usa o elemento combinável AndroidView
para encapsular
SurfaceView
e TextureView
. Os dois elementos combináveis correspondentes são AndroidExternalSurface
e AndroidEmbeddedExternalSurface
.
O módulo ui-compose
do Media3 oferece 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
(efetivamenteAndroidExternalSurface
)SURFACE_TYPE_TEXTURE_VIEW
(efetivamenteAndroidEmbeddedExternalSurface
)
Não há um tipo none
, já que isso corresponderia a não incluir o
PlayerSurface
na sua árvore de interface do Compose.