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ącychnone
– 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 SurfaceView
i TextureView
. Odpowiadające im funkcje kompozycyjne to AndroidExternalSurface
i AndroidEmbeddedExternalSurface
.
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:
SURFACE_TYPE_SURFACE_VIEW
(skutecznieAndroidExternalSurface
)SURFACE_TYPE_TEXTURE_VIEW
(skutecznieAndroidEmbeddedExternalSurface
)
Nie ma typu none
, ponieważ odpowiadałby on brakowi elementu PlayerSurface
w drzewie interfejsu Compose.