Типы поверхностей

На этой странице описаны различные типы поверхностей, которые можно использовать для воспроизведения видео с помощью Media3, а также способы выбора подходящего типа для вашего случая. Чтобы узнать больше об объектах Surface в Android, ознакомьтесь с этой графической документацией .

Выберите тип поверхности для PlayerView

Атрибут surface_type объекта PlayerView позволяет задать тип поверхности, используемой для воспроизведения видео. Допустимые значения:

  • surface_view ( SurfaceView )
  • texture_view ( TextureView )
  • spherical_gl_surface_view ( SphericalGLSurfaceView ) — для сферического воспроизведения видео
  • video_decoder_gl_surface_view ( VideoDecoderGLSurfaceView ) — рендеринг видео с использованием расширений-рендереров
  • none — предназначено только для воспроизведения звука и должно использоваться, чтобы избежать необходимости создания поверхности, поскольку это может быть дорого.

Если представление предназначено для обычного воспроизведения видео, следует использовать surface_view или texture_view . SurfaceView имеет ряд преимуществ перед TextureView при воспроизведении видео:

  • Значительно сниженное энергопотребление на многих устройствах.
  • Более точная синхронизация кадров, что обеспечивает более плавное воспроизведение видео.
  • Поддержка вывода HDR-видео более высокого качества на совместимых устройствах.
  • Поддержка безопасного вывода при воспроизведении контента, защищенного DRM.
  • Возможность отображения видеоконтента с полным разрешением дисплея на устройствах Android TV, которые масштабируют слой пользовательского интерфейса.

Поэтому по возможности следует отдавать предпочтение SurfaceView , а не TextureView . TextureView следует использовать только в том случае, если SurfaceView не отвечает вашим потребностям. Например, в случае, когда требуется плавная анимация или прокрутка видеоповерхности в версиях до Android 7.0 (уровень API 24), как описано в следующих примечаниях. В этом случае предпочтительнее использовать TextureView только в том случае, если SDK_INT меньше 24 (Android 7.0), а в противном случае SurfaceView .

Выберите тип поверхности в Compose

В Compose решение для взаимодействия использует AndroidView Composable для обёртывания SurfaceView и TextureView . Два соответствующих Composable — AndroidExternalSurface и AndroidEmbeddedExternalSurface .

Модуль Media3 ui-compose предоставляет компонуемый объект PlayerSurface , который связывает Player с Surface с учётом жизненного цикла. В данном случае используются следующие типы поверхностей:

Тип none отсутствует, поскольку это соответствовало бы отсутствию PlayerSurface в дереве Compose UI.