Typy powierzchni

Na tej stronie opisujemy różne typy powierzchni, które można wykorzystać do odtwarzania filmów za pomocą Media3, oraz sposób wyboru odpowiedniego typu do Twojego przypadku użycia. Więcej informacji o obiektach Surface w Androidzie znajdziesz w tym dokumencie dotyczącym grafiki.

Ustawianie powierzchni

Player ma 4 punkty wejścia, które umożliwiają podłączenie wyjścia wideo do urządzeniaSurface:

Możesz też wyczyścić je na różne sposoby:

Wybierz typ powierzchni dla PlayerView

Atrybut surface_type elementu PlayerView umożliwia ustawienie typu powierzchni używanej do odtwarzania filmu. Dozwolone wartości:

  • surface_view (SurfaceView)
  • texture_view (TextureView)
  • spherical_gl_surface_view (SphericalGLSurfaceView) – do odtwarzania filmów sferycznych
  • video_decoder_gl_surface_view (VideoDecoderGLSurfaceView) – renderowanie filmów za pomocą rozszerzonych modułów renderujących
  • none – służy tylko do odtwarzania dźwięku i należy go używać, aby uniknąć konieczności tworzenia powierzchni, co może być kosztowne.

Jeśli widok dotyczy zwykłego odtwarzania filmu, użyj surface_view lub texture_view. SurfaceView ma wiele zalet w porównaniu z TextureView w przypadku odtwarzania filmów:

  • Znacznie mniejsze zużycie energii na wielu urządzeniach.
  • Dokładniejsze określanie czasu klatek, co zapewnia płynniejsze odtwarzanie filmów.
  • Obsługa wyższej jakości wyjścia wideo HDR na urządzeniach z tą funkcją.
  • Obsługa bezpiecznego wyjścia podczas odtwarzania treści chronionych przez DRM.
  • Możliwość renderowania treści wideo w pełnej rozdzielczości wyświetlacza na urządzeniach z Androidem TV, które zwiększają rozdzielczość warstwy interfejsu.

Dlatego w miarę możliwości należy preferować SurfaceView zamiast TextureView. TextureView należy używać tylko wtedy, gdy SurfaceView nie spełnia Twoich wymagań. Przykładem jest sytuacja, w której przed Androidem 7.0 (interfejs API na poziomie 24) wymagane są płynne animacje lub przewijanie powierzchni wideo, jak opisano w tych uwagach. W tym przypadku lepiej używać TextureView tylko wtedy, gdy SDK_INT jest mniejsze niż 24 (Android 7.0), a w pozostałych przypadkach – SurfaceView.

Wybieranie typu powierzchni w Compose

W Compose rozwiązanie do współdziałania korzysta z funkcji kompozycyjnej AndroidView do opakowywania elementów SurfaceViewTextureView. Dwa komponenty, które odpowiadają temu warunkowi, to AndroidExternalSurfaceAndroidEmbeddedExternalSurfaceandroidx.compose.foundation. Klasy proxy udostępniają jednak interfejs API, który ogranicza dostęp do widoków bazowych. Te widoki są potrzebne Player do obsługi pełnego cyklu życia powierzchni (tworzenie i aktualizacje rozmiaru).

W module media3-ui-compose znajdziesz komponenty ContentFramePlayerSurface, które łączą PlayerSurface w sposób uwzględniający cykl życia. W tym przypadku typy powierzchni to:

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

Nie ma typu none, ponieważ odpowiadałby on nieuwzględnieniu funkcji kompozycyjnej w drzewie interfejsu Compose.