在移动设备上播放高动态范围 (HDR) 视频通常存在一个重大缺陷:不同面板之间的视觉效果不一致。在浏览标准动态范围 (SDR) 和 HDR 元素共存的混合内容信息流时,渲染流水线很难平衡它们。这会导致不稳定的、不和谐的过渡和不可预测的亮度峰值。
对于内容创作者来说,这种不一致性会影响艺术意图的传达。在专业显示器上精心调色的 HDR 视频,在消费级设备上观看时可能会出现高光剪切、色调褪色或阴影过暗的情况。
Eclipsa 视频是一种现代 HDR 视频标准,旨在解决这些跨设备生态系统难题。Eclipsa 视频基于 SMPTE ST 2094-50 规范,使显示屏能够根据物理硬件功能和实时环境光照条件动态调整内容映射。Eclipsa 视频依托 Jetpack Media3 ExoPlayer 和标准 Camera2 拍摄流水线中的内置零配置集成,为移动工程团队提供了一条零成本、无阻碍的途径,可实现新一代硬件自适应视频流式传输,在每个屏幕上都能保留艺术意图。
SMPTE ST 2094-50 的技术架构
移动显示屏的亮度余量(即显示屏参考白点之上的可用亮度)差异很大。当显示屏的硬件限制与 HDR 视频的母带制作要求不一致时,高光部分会剪裁或看起来暗淡。当环境光传感器根据周围环境调整面板时,屏幕的实际余量和参考白点会动态变化。
SMPTE ST 2094-50 通过引入双层元数据解决了这一问题,该元数据通过两个主要支柱确保视觉一致性:
参考白色锚点
这会建立一个严格的基准,将 SDR 元素的峰值亮度直接映射到显示屏的参考白点。任何超过此锚点的亮度值都严格保留给 HDR 高光。这种可预测的锚定机制可确保当 SDR 和 HDR 图层在屏幕上合成在一起时,它们会保持预期的视觉关系,而不会相互冲淡。
自适应提升空间的增益曲线
创作者无需强制使用静态色调映射曲线,而是嵌入参数化元数据,以指示显示流水线在可用余量有限时如何进行缩放。该标准为创作者提供了精细的灵活性,让他们可以选择目标面板是应该对高光进行软剪辑、硬剪辑,还是压缩中间色调和阴影,以主动保留明亮区域中最精细的细节。
平台支持
Android 17(API 级别 37)引入了对 Eclipsa 视频播放和拍摄的平台级支持。
实现播放
对于标准应用开发,Media3 ExoPlayer 为 Eclipsa 视频提供开箱即用的支持。在解析嵌入了 SMPTE 2094-50 元数据的文件时,ExoPlayer 会无缝提取并应用这些元数据,无需进行自定义播放器配置。
标准播放器初始化:如需实例化播放器 Surface,请参阅 Media3 ExoPlayer 概览。
轨道替换:如果您的应用以编程方式查询或锁定特定 HDR 配置文件,请参阅 Media3 轨道选择 API。
我们建议将播放流水线分流到 Jetpack Media3。ExoPlayer 原生处理低级容器提取,从而完全绕过 Android 16(API 级别 36)及更低版本中旧版渲染层上存在的已知平台级解码伪影。
实现视频拍摄
如需从设备录制 Eclipsa 视频,必须配置相机流水线,通过分配兼容的动态范围配置文件来生成 SMPTE 2094-50 元数据。
使用 CameraCharacteristics 验证设备支持后,使用 DynamicRangeProfiles.HLG10_SMPTE_2094_50 配置文件将数据流路由到编码器 Surface。如需了解如何在相机拍摄会话中查询和配置动态范围配置文件,请参阅 HDR 视频拍摄。
SMPTE 2094-50 元数据不需要显式编解码器配置。如果活跃动态配置文件中存在元数据,Android 媒体框架会自动附加并向下传递元数据。
兼容性和性能注意事项
如需监控性能,请检索活跃的 Display 对象,并检查 getOverlaySupport() 返回的 OverlayProperties 上是否存在 LutProperties,以确定硬件加速路径的可用性。
对于不具备硬件加速功能的设备,我们正在开发 Exoplayer 中停用 Eclipsa 视频渲染的功能。