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

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

Установите поверхность

Player имеет четыре точки подключения для вывода видеосигнала на устройства Surface :

Существуют также разные способы его очистки:

Выберите тип поверхности для 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 решение для взаимодействия использует Composable AndroidView для обертывания SurfaceView и TextureView . Соответствующие этому Composable — это AndroidExternalSurface и AndroidEmbeddedExternalSurface из androidx.compose.foundation . Однако эти прокси-классы предоставляют API-интерфейс, который ограничивает доступ к базовым представлениям. Эти представления необходимы Player для обработки полного жизненного цикла поверхности (создание и обновление размера ).

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

  • androidx.media3.ui.compose.SURFACE_TYPE_SURFACE_VIEW
  • androidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW

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