Surface 类型

本页面介绍了可用于 Media3 视频播放的不同类型的 Surface,以及如何为您的用例选择合适的类型。如需了解有关 Android 中 Surface 对象的更多信息,请阅读此图形文档

为 PlayerView 选择 Surface 类型

PlayerViewsurface_type 属性允许您设置用于视频播放的 Surface 类型。允许的值有:

如果视图用于常规视频播放,则应使用 surface_viewtexture_viewSurfaceView 在视频播放方面比 TextureView 具有多项优势:

  • 在许多设备上功耗显著降低
  • 更精确的帧计时,从而实现更流畅的视频播放。
  • 在支持的设备上支持更高质量的 HDR 视频输出。
  • 播放受 DRM 保护的内容时支持安全输出。
  • 在对 UI 层进行升采样的 Android TV 设备上,能够以显示器的全分辨率渲染视频内容。

因此,在可能的情况下,SurfaceView 应优于 TextureViewTextureView 仅应在 SurfaceView 无法满足您的需求时使用。一个例子是,在 Android 7.0 (API level 24) 之前需要视频 Surface 的平滑动画或滚动时,如以下说明所述。在这种情况下,最好仅在 SDK_INT 小于 24 (Android 7.0) 时使用 TextureView,否则使用 SurfaceView

在 Compose 中选择 Surface 类型

在 Compose 中,互操作解决方案使用 AndroidView Composable 来包装 SurfaceViewTextureView。对应于此的两个 Composable 是 AndroidExternalSurfaceAndroidEmbeddedExternalSurface

Media3 ui-compose 模块提供了一个 PlayerSurface Composable,它以生命周期感知的方式将 Player 链接到 Surface。在这种情况下,Surface 类型是:

没有 none 类型,因为这相当于不在您的 Compose UI 树中包含 PlayerSurface