Tipos de plataforma

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érico
  • video_decoder_gl_surface_view (VideoDecoderGLSurfaceView): renderização de vídeo usando renderizadores de extensão
  • none, 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:

Não há um tipo none, já que isso corresponderia a não incluir o PlayerSurface na sua árvore de interface do Compose.