Oberflächentypen

Auf dieser Seite werden die verschiedenen Arten von Oberflächen beschrieben, die für die Videowiedergabe mit Media3 verwendet werden können, und es wird erläutert, wie Sie den richtigen Typ für Ihren Anwendungsfall auswählen. Weitere Informationen zu Surface-Objekten in Android

Oberfläche festlegen

Es gibt vier Eingänge für das Player, um die Videoausgabe mit einem Surface zu verbinden:

Es gibt auch verschiedene Möglichkeiten, sie zu entfernen:

Oberflächentyp für PlayerView auswählen

Mit dem Attribut surface_type von PlayerView können Sie den Typ der Oberfläche festlegen, die für die Videowiedergabe verwendet wird. 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 Erweiterungsrenderern
  • none – diese Option ist nur für die Audiowiedergabe vorgesehen und sollte verwendet werden, um die Erstellung einer Oberfläche zu vermeiden, da dies kostspielig sein kann.

Wenn die Ansicht für die normale Videowiedergabe vorgesehen ist, sollte surface_view oder texture_view verwendet werden. SurfaceView bietet bei der Videowiedergabe eine Reihe von Vorteilen gegenüber TextureView:

  • Deutlich geringerer Stromverbrauch auf vielen Geräten.
  • Das Frame-Timing ist genauer, was zu einer flüssigeren Videowiedergabe führt.
  • Unterstützung für die HDR-Videoausgabe in höherer Qualität auf kompatiblen Geräten.
  • Unterstützung der sicheren 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 wiederzugeben, die die UI-Ebene hochskalieren.

SurfaceView sollte daher nach Möglichkeit gegenüber TextureView bevorzugt werden. TextureView sollte nur verwendet werden, wenn SurfaceView nicht Ihren Anforderungen entspricht. Ein Beispiel ist, wenn vor Android 7.0 (API-Level 24) flüssige Animationen oder das Scrollen der Videooberfläche erforderlich sind, wie in den folgenden Hinweisen beschrieben. In diesem Fall ist es besser, TextureView nur zu verwenden, wenn SDK_INT kleiner als 24 (Android 7.0) ist, und andernfalls SurfaceView.

Oberflächentyp in Compose auswählen

In Compose wird das AndroidView-Composable verwendet, um SurfaceView und TextureView zu umschließen. Die beiden Composables, die dem entsprechen, sind AndroidExternalSurface und AndroidEmbeddedExternalSurface aus androidx.compose.foundation. Diese Proxyklassen bieten jedoch eine API-Oberfläche, die den Zugriff auf die zugrunde liegenden Ansichten einschränkt. Diese Ansichten sind für Player erforderlich, um den gesamten Lebenszyklus der Oberfläche zu verarbeiten (Erstellung und Größenaktualisierungen).

Im Modul media3-ui-compose finden Sie die Composables ContentFrame und PlayerSurface, die Player auf eine lebenszyklusbewusste Weise mit einem Surface verknüpfen. Die Oberflächen sind in diesem Fall:

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

Es gibt keinen Typ none, da dies bedeuten würde, dass die Composable nicht in den Compose-UI-Baum aufgenommen wird.