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.

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 protetto 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 eseguono l'upscaling del livello UI.

Pertanto, SurfaceView dovrebbe 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 in caso contrario.

Scegliere un tipo di superficie in Compose

In Compose, la soluzione di interoperabilità utilizza il composable AndroidView per eseguire il wrapping di SurfaceView e TextureView. I due composable corrispondenti sono AndroidExternalSurface e AndroidEmbeddedExternalSurface.

Il modulo Media3 ui-compose fornisce un elemento componibile PlayerSurface che collega l'Player a un Surface in modo consapevole del ciclo di vita. I tipi di superficie in questo caso sono:

Non esiste il tipo none, in quanto corrisponderebbe a non includere PlayerSurface nell'albero della UI di Compose.