Na tej stronie opisujemy różne typy powierzchni, które można wykorzystać do odtwarzania filmów za pomocą Media3, oraz wyjaśniamy, jak wybrać odpowiedni typ w danym przypadku użycia. Aby dowiedzieć się więcej o obiektach Surface na Androidzie, przeczytaj tę dokumentację dotyczącą grafiki.
Wybieranie typu powierzchni dla PlayerView
Atrybut surface_type
w PlayerView
pozwala określić typ powierzchni, na której odtwarzany jest film. Dozwolone wartości:
surface_view
(SurfaceView
)texture_view
(TextureView
)spherical_gl_surface_view
(SphericalGLSurfaceView
) – do odtwarzania sferycznych filmów.video_decoder_gl_surface_view
(VideoDecoderGLSurfaceView
) – renderowanie filmów za pomocą procesorów rozszerzeńnone
– służy tylko do odtwarzania dźwięku i powinien być używany, aby uniknąć tworzenia powierzchni, ponieważ może to być kosztowne.
Jeśli widok służy do odtwarzania zwykłego filmu, należy użyć parametru surface_view
lub texture_view
. SurfaceView
ma wiele zalet w porównaniu z TextureView
w zakresie odtwarzania filmów:
- znacznie obniżyć zużycie energii na wielu urządzeniach;
- Dokładniejsze ustalanie czasu wyświetlania klatek, co zapewnia płynniejsze odtwarzanie filmów.
- Obsługa wyjścia wideo HDR o wyższej jakości na urządzeniach, które obsługują 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 powiększają warstwę interfejsu użytkownika.
Dlatego, jeśli to możliwe, preferuj SurfaceView
zamiast TextureView
.
TextureView
należy stosować tylko wtedy, gdy SurfaceView
nie spełnia Twoich potrzeb. Przykładem jest płynne wyświetlanie animacji lub przewijanie powierzchni wideo w wersjach Androida 7.0 (interfejs API na poziomie 24) i starszych, jak opisano w tych notatkach. W tym przypadku zalecamy używanie TextureView
tylko wtedy, gdy SDK_INT
jest mniejsza niż 24 (Android 7.0), a w przeciwnym razie SurfaceView
.
Wybieranie typu powierzchni w sekcji Tworzenie
W Compose rozwiązanie interoperacyjne używa komponentu AndroidView
do otaczania komponentów SurfaceView
i TextureView
. 2 komponenty odpowiadające tym elementom: AndroidExternalSurface
i AndroidEmbeddedExternalSurface
.
Moduł Media3 ui-compose
udostępnia komponent PlayerSurface
, który w sposób uwzględniający cykl życia łączy Player
z Surface
. W tym przypadku typy powierzchni to:
SURFACE_TYPE_SURFACE_VIEW
(w praktyceAndroidExternalSurface
)SURFACE_TYPE_TEXTURE_VIEW
(efektywnieAndroidEmbeddedExternalSurface
)
Nie ma typu none
, ponieważ oznaczałoby to nieuwzględnienie PlayerSurface
w drzewie interfejsu użytkownika w oknie tworzenia.