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