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.
Escolha 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, porque isso corresponderia a não incluir o
PlayerSurface na sua árvore de interface do Compose.