Tipos de plataforma

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érico
  • video_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:

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