На этой странице описаны различные типы поверхностей, которые можно использовать для воспроизведения видео с помощью 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
с учётом жизненного цикла. В данном случае используются следующие типы поверхностей:
-
SURFACE_TYPE_SURFACE_VIEW
(фактическиAndroidExternalSurface
) -
SURFACE_TYPE_TEXTURE_VIEW
(фактическиAndroidEmbeddedExternalSurface
)
Тип none
отсутствует, поскольку это соответствовало бы отсутствию PlayerSurface
в дереве Compose UI.