Surface 类型

本页介绍了可用于通过 Media3 播放视频的不同类型的 Surface,以及如何根据您的用例选择合适的类型。如需详细了解 Android 中的 Surface 对象,请参阅此图形文档

为 PlayerView 选择 Surface 类型

借助 PlayerViewsurface_type 属性,您可以设置用于视频播放的 Surface 类型。允许的值包括:

  • surface_view (SurfaceView)
  • texture_view (TextureView)
  • spherical_gl_surface_view (SphericalGLSurfaceView) - 用于球形视频播放
  • video_decoder_gl_surface_view (VideoDecoderGLSurfaceView) - 使用扩展程序渲染程序进行视频渲染
  • none - 仅适用于音频播放,应用于避免创建 Surface,因为这样做可能会很耗费资源。

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

  • 在许多设备上显著降低功耗
  • 帧时间更准确,视频播放更流畅。
  • 支持在支持的设备上输出更高质量的 HDR 视频。
  • 支持在播放受 DRM 保护的内容时进行安全输出。
  • 在放大界面层的 Android TV 设备上,能够以显示屏的完整分辨率渲染视频内容。

因此,应尽可能优先使用 SurfaceView 而非 TextureView。只有在 SurfaceView 无法满足您的需求时,才应使用 TextureView。例如,在 Android 7.0(API 级别 24)之前,需要流畅的动画或视频 Surface 滚动,如以下备注所述。对于这种情况,最好仅在 SDK_INT 小于 24(Android 7.0)时使用 TextureView,否则使用 SurfaceView

在 Compose 中选择 Surface 类型

在 Compose 中,Interop 解决方案使用 AndroidView 可组合项封装 SurfaceViewTextureView。对应的两个可组合项分别是 AndroidExternalSurfaceAndroidEmbeddedExternalSurface

Media3 ui-compose 模块提供了一个 PlayerSurface 可组合项,用于以生命周期感知的方式将 Player 关联到 Surface。在本例中,Surface 类型为:

没有类型 none,因为这相当于不将 PlayerSurface 包含在 Compose 界面树中。