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 sfericivideo_decoder_gl_surface_view
(VideoDecoderGLSurfaceView
) - rendering video utilizzando i renderer delle estensioninone
, 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:
SURFACE_TYPE_SURFACE_VIEW
(effettivamenteAndroidExternalSurface
)SURFACE_TYPE_TEXTURE_VIEW
(effettivamenteAndroidEmbeddedExternalSurface
)
Non esiste il tipo none
, in quanto corrisponderebbe a non includere
PlayerSurface
nell'albero della UI di Compose.