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