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

На этой странице описываются различные типы поверхностей, которые можно использовать для воспроизведения видео с помощью 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 Composable, который связывает Player с Surface с учетом жизненного цикла. Типы поверхностей в этом случае следующие:

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