Typy powierzchni

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 SurfaceViewTextureView. 2 komponenty odpowiadające tym elementom: AndroidExternalSurfaceAndroidEmbeddedExternalSurface.

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

Nie ma typu none, ponieważ oznaczałoby to nieuwzględnienie PlayerSurface w drzewie interfejsu użytkownika w oknie tworzenia.