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 na Androidzie znajdziesz w tym dokumencie dotyczącym grafiki.

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, należy użyć wartości 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 trwania 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 poniższych uwagach. W tym przypadku lepiej jest 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 kompozycji AndroidView do opakowywania elementów SurfaceViewTextureView. Odpowiadające im funkcje kompozycyjne to AndroidExternalSurfaceAndroidEmbeddedExternalSurface.

Moduł Media3 ui-compose udostępnia komponent PlayerSurface, który łączy Player z Surface w sposób uwzględniający cykl życia. Rodzaje powierzchni w tym przypadku to:

Nie ma typu none, ponieważ odpowiadałby on brakowi elementu PlayerSurface w drzewie interfejsu Compose.