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