Auf dieser Seite werden die verschiedenen Oberflächen beschrieben, die für die Videowiedergabe mit Media3 verwendet werden können, und wie du den richtigen Typ für deinen Anwendungsfall auswählst. Weitere Informationen zu Surface-Objekten unter Android finden Sie in der Grafikdokumentation.
Oberfläche für PlayerView auswählen
Mit dem Attribut surface_type
von PlayerView
können Sie den für die Videowiedergabe verwendeten Oberflächentyp festlegen. Zulässige Werte:
surface_view
(SurfaceView
)texture_view
(TextureView
)spherical_gl_surface_view
(SphericalGLSurfaceView
): für die Wiedergabe von sphärischen Videosvideo_decoder_gl_surface_view
(VideoDecoderGLSurfaceView
): Videorendering mit Erweiterungs-Renderernnone
– nur für die Audiowiedergabe. Diese Option sollte verwendet werden, um das Erstellen einer Oberfläche zu vermeiden, da dies teuer sein kann.
Wenn die Ansicht für die normale Videowiedergabe gedacht ist, sollte surface_view
oder texture_view
verwendet werden. SurfaceView
bietet gegenüber TextureView
einige Vorteile bei der Videowiedergabe:
- Geringerer Energieverbrauch bei vielen Geräten
- Genaueres Frame-Timing für eine flüssigere Videowiedergabe
- Unterstützung für eine höhere Qualität der HDR-Videoausgabe auf kompatiblen Geräten.
- Unterstützung für sichere Ausgabe bei der Wiedergabe von DRM-geschützten Inhalten
- Die Möglichkeit, Videoinhalte in der vollen Auflösung des Displays auf Android TV-Geräten zu rendern, die die UI-Ebene hochskalieren.
SurfaceView
sollte daher nach Möglichkeit TextureView
vorgezogen werden.
TextureView
sollte nur verwendet werden, wenn SurfaceView
nicht Ihren Anforderungen entspricht. Ein Beispiel hierfür sind flüssige Animationen oder das Scrollen der Videooberfläche vor Android 7.0 (API-Level 24), wie in den folgenden Hinweisen beschrieben. In diesem Fall sollten Sie TextureView
nur verwenden, wenn SDK_INT
kleiner als 24 ist (Android 7.0) und andernfalls SurfaceView
.
In Compose einen Oberflächentyp auswählen
In Compose wird für die Interoperabilitätslösung das AndroidView
-Kompositelement verwendet, um SurfaceView
und TextureView
zu umschließen. Die beiden entsprechenden Composables sind AndroidExternalSurface
und AndroidEmbeddedExternalSurface
.
Das Media3-ui-compose
-Modul bietet ein PlayerSurface
-Komposit, das den Player
lebenszyklusorientiert mit einem Surface
verknüpft. Die Oberflächentypen in diesem Fall sind:
SURFACE_TYPE_SURFACE_VIEW
(effektivAndroidExternalSurface
)SURFACE_TYPE_TEXTURE_VIEW
(effektivAndroidEmbeddedExternalSurface
)
Es gibt keinen Typ none
, da dies dem Ausschließen des PlayerSurface
aus dem UI-Baum der Compose-App entsprechen würde.