Tipi di superfici

Questa pagina descrive i diversi tipi di superfici che possono essere utilizzati per la riproduzione video con Media3 e come scegliere il tipo giusto per il tuo caso d'uso. Per scoprire di più sugli oggetti Surface in Android, leggi questa documentazione sulla grafica.

Impostare la superficie

Esistono quattro punti di accesso per Player per collegare l'uscita video a un Surface:

Esistono anche diversi modi per cancellarla:

Scegli un tipo di superficie per PlayerView

L'attributo surface_type di PlayerView consente di impostare il tipo di superficie utilizzata per la riproduzione video. I valori consentiti sono:

  • surface_view (SurfaceView)
  • texture_view (TextureView)
  • spherical_gl_surface_view (SphericalGLSurfaceView) - per la riproduzione di video sferici
  • video_decoder_gl_surface_view (VideoDecoderGLSurfaceView) - rendering video utilizzando i renderer delle estensioni
  • none, che serve solo per la riproduzione audio e deve essere utilizzato per evitare di dover creare una superficie, perché può essere costoso.

Se la visualizzazione è per la normale riproduzione video, devono essere utilizzati surface_view o texture_view. SurfaceView offre una serie di vantaggi rispetto a TextureView per la riproduzione video:

  • Consumo energetico notevolmente inferiore su molti dispositivi.
  • Maggiore precisione nella sincronizzazione dei frame, per una riproduzione video più fluida.
  • Supporto per l'output video HDR di qualità superiore sui dispositivi idonei.
  • Supporto dell'output sicuro durante la riproduzione di contenuti protetti da DRM.
  • La possibilità di eseguire il rendering dei contenuti video alla risoluzione completa del display sui dispositivi Android TV che aumentano la risoluzione del livello UI.

Pertanto, SurfaceView deve essere preferito a TextureView, se possibile. TextureView deve essere utilizzato solo se SurfaceView non soddisfa le tue esigenze. Un esempio è quello in cui sono richieste animazioni fluide o lo scorrimento della superficie video prima di Android 7.0 (livello API 24), come descritto nelle note seguenti. In questo caso, è preferibile utilizzare TextureView solo quando SDK_INT è inferiore a 24 (Android 7.0) e SurfaceView altrimenti.

Scegliere un tipo di superficie in Crea

In Compose, la soluzione di interoperabilità utilizza il componibile AndroidView per eseguire il wrapping di SurfaceView e TextureView. I due composable corrispondenti sono AndroidExternalSurface e AndroidEmbeddedExternalSurface di androidx.compose.foundation. Tuttavia, queste classi proxy forniscono una superficie API che limita l'accesso alle visualizzazioni sottostanti. Queste visualizzazioni sono necessarie al Player per gestire un ciclo di vita completo della superficie (creazione e aggiornamenti delle dimensioni).

Nel modulo media3-ui-compose, puoi trovare i composable ContentFrame e PlayerSurface che collegano Player a un Surface in modo consapevole del ciclo di vita. I tipi di superficie in questo caso sono:

  • androidx.media3.ui.compose.SURFACE_TYPE_SURFACE_VIEW
  • androidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW

Non esiste il tipo none, poiché corrisponderebbe a non includere il componente componibile nell'albero dell'interfaccia utente di Compose.