Oberflächentypen

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 Videos
  • video_decoder_gl_surface_view (VideoDecoderGLSurfaceView): Videorendering mit Erweiterungs-Renderern
  • none – 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:

Es gibt keinen Typ none, da dies dem Ausschließen des PlayerSurface aus dem UI-Baum der Compose-App entsprechen würde.