На этой странице описаны различные типы поверхностей, которые можно использовать для воспроизведения видео с помощью Media3, и как выбрать подходящий тип для вашего случая. Чтобы узнать больше об объектах Surface в Android, ознакомьтесь с этой документацией по графике .
Установите поверхность
Player имеет четыре точки подключения для вывода видеосигнала на устройства Surface :
-
void setVideoSurface(@Nullable Surface surface) -
void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) -
void setVideoSurfaceView(@Nullable SurfaceView surfaceView) -
void setVideoTextureView(@Nullable TextureView textureView)
Существуют также разные способы его очистки:
-
void clearVideoSurface() -
void clearVideoSurface(@Nullable Surface surface) -
void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) -
void clearVideoSurfaceView(@Nullable SurfaceView surfaceView) -
void clearVideoTextureView(@Nullable TextureView textureView)
Выберите тип поверхности для 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 решение для взаимодействия использует Composable AndroidView для обертывания SurfaceView и TextureView . Соответствующие этому Composable — это AndroidExternalSurface и AndroidEmbeddedExternalSurface из androidx.compose.foundation . Однако эти прокси-классы предоставляют API-интерфейс, который ограничивает доступ к базовым представлениям. Эти представления необходимы Player для обработки полного жизненного цикла поверхности (создание и обновление размера ).
В модуле media3-ui-compose вы найдете компонуемые объекты ContentFrame и PlayerSurface , которые связывают Player с Surface с учетом жизненного цикла. В данном случае используются следующие типы поверхностей:
-
androidx.media3.ui.compose.SURFACE_TYPE_SURFACE_VIEW -
androidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW
Типа none не существует, поскольку это соответствовало бы невключению составного элемента в дерево Compose UI.