在iOS版Instagram中通过Dolby Vision增强HDR体验的技术实现

本文详细介绍了Meta团队如何在Instagram iOS应用中实现Dolby Vision和AMVE元数据支持,以提升HDR视频观看体验。文章涵盖从客户端处理、服务器转码到最终播放的完整技术链路,并分享了克服元数据兼容性、压缩及性能优化等挑战的具体工程实践。

我们正在分享如何在Instagram iOS应用上启用Dolby Vision和环境观看环境(amve),以增强视频观看体验。

在iPhone上创建的HDR视频包含独特的Dolby Vision和amve元数据,我们需要对此提供端到端的支持。Instagram for iOS现已成为首个支持Dolby Vision视频的Meta应用,未来Meta旗下更多应用也将提供支持。

每个由iPhone生成的HDR视频编码都包含两个额外的元数据片段,有助于确保画面在不同显示设备和观看条件下保持一致:

  • 环境观看环境:提供了关联视频内容播放时的标称环境观看环境特征。此信息使最终设备能够在实际环境条件与编码时预设条件不同时,调整视频的渲染。
  • Dolby Vision:增强色彩、亮度和对比度,使视频更好地匹配显示设备的能力。

尽管Instagram和Facebook的iOS应用自2022年以来已支持高动态范围视频,但我们最初的HDR上线版本并不支持Dolby Vision或amve的传输与播放。我们使用FFmpeg进行衍生编码,而FFmpeg传统上缺乏对Dolby Vision和amve的支持。由于我们的工具链丢弃了这些元数据,这意味着画面未能完全按照其预期的方式呈现——在屏幕亮度较低时尤其明显。

现在,在听取了iOS应用用户的反馈后,我们与合作伙伴共同努力,从端到端保留了由iOS生成的amve和Dolby Vision元数据,并显著提升了iOS设备上的HDR观看体验。

Meta如何处理视频

首先了解Meta视频的生命周期背景或许有所帮助。 通过我们的应用上传的大多数视频会经历三个主要阶段:

  1. 客户端处理 在此阶段,创作者的设备会将其作品合成一个适合上传大小的单个视频文件。对于iOS设备生成的HDR视频,这意味着使用HEVC Main 10配置文件进行编码。这是amve和Dolby Vision元数据生成、添加到编码比特流并上传至Meta服务器的阶段。

  2. 服务器处理 在此阶段,我们的转码系统会为不同的消费者生成不同版本的视频。由于播放发生在具有不同能力的各种设备上,我们需要生成适合每种设备的最佳格式视频。对于HDR上传,这意味着为不支持HDR的设备生成SDR版本,为满足大多数播放器生成VP9版本,并为最受欢迎的视频生成具有最高质量和最低文件大小的AV1版本。 每个版本都以不同的比特率(本质上是文件大小)生成,以确保具有不同网络条件的消费者都能流畅播放视频而无需等待大文件下载完成(代价是较低比特率对应较低质量)。我们所有的衍生编码都是使用FFmpeg创建的,而FFmpeg历史上缺乏对amve和Dolby Vision的支持。元数据正是在此阶段被丢弃。

  3. 消费 在此阶段,观看者的设备选择能够流畅播放(无卡顿)的版本,逐帧解码,并将每一帧绘制到屏幕上。在iOS环境中,所有HDR播放都是使用Apple的AVSampleBufferDisplayLayer完成的。这个类会随着每个解码帧一起使用amve和Dolby Vision元数据。

我们如何添加对amve的支持

当我们在2022年最初着手支持amve时,我们注意到一个有趣的现象。由于我们的架构是基于解耦的低层组件,而非典型的高层AVPlayer设置,我们能够在解码器和AVSampleBufferDisplayLayer之间检查完整的视频编码并查看amve元数据。我们观察到,每个视频的每一帧似乎都具有完全相同的元数据。这使我们能够采用一个快速解决方案,将这些值直接硬编码到我们的播放器流水线中。 这并不是一个理想的状态。即使这个值看起来是静态的,但没有任何机制保证这一点。也许新的iPhone或iOS版本会产生不同的值,那样我们就会使用错误的元数据。此外,Android上并没有amve这个概念,这意味着在iPhone上观看Android生成的HDR编码视频会导致画面在技术上不准确。 2024年,我们与社区合作,在FFmpeg中实现了对amve的支持。我们还添加了一些日志记录,结果表明我们两年前关于这些值永不改变的断言依然成立。但如果将来它们真的发生变化,我们也已经做好了准备。

启用Dolby Vision

采用Dolby Vision并不像amve那样直接。

挑战一:现有规范是针对在HEVC比特流中携带元数据的。而我们并不分发HEVC。 iPhone生成的HDR使用Dolby Vision配置文件8.4,其中8表示使用HEVC的视频编解码器配置文件,而.4意味着与HLG(HDR视频标准,不支持Dolby Vision的播放器将遵循此标准)交叉兼容。 为了传输Dolby Vision元数据,我们需要在一种我们实际分发的编解码器中携带它。幸运的是,杜比公司创建了配置文件10,用于在AV1中携带Dolby Vision元数据。由于VP9并未提供携带额外元数据的机制,目前暂不支持Dolby Vision,但我们有兴趣探索替代的传输机制。 然而,我们现有的视频处理工具,包括FFmpeg和Shaka packager,并未正确支持Dolby Vision配置文件8和10。根据杜比公司的规范,我们与FFmpeg开发人员合作,全面实现了对Dolby Vision配置文件8和10的支持。具体来说,我们使FFmpeg能够使用libaom和libsvtav1编码器,将带有配置文件8.4的HEVC转码为带有配置文件10.4的AV1,并修复了技术栈的其他部分,包括dav1d解码器和Shaka packager,以正确支持Dolby Vision元数据。

挑战二:将Dolby Vision元数据送入AVSampleBufferDisplayLayer 当你向AVSampleBufferDisplayLayer提供受支持格式的编码比特流时,Dolby Vision会自动生效。但我们提供的是独立解码的缓冲区,因为我们需要能够解码Apple未原生提供的格式。鉴于这种设置,我们同样需要独立提取Dolby Vision元数据。 遵循杜比公司新发布的关于在AV1比特流中携带配置文件10的规范,我们实现了手动提取Dolby Vision元数据,将其打包成AVSampleBufferDisplayLayer期望的相同格式,从而取得成功。 为了验证我们的设置按预期工作,我们创建了一系列包含和不包含Dolby Vision元数据的相同Instagram帖子。我们在杜比的合作伙伴使用显示色彩分析仪,在不同屏幕亮度级别下测量了每个帖子的亮度。 他们捕获了以下数据:

  • 屏幕亮度设置与图像亮度的对比,包含和不包含Dolby Vision的情况。 在这张图表中,X轴代表屏幕亮度设置,Y轴代表观察到的图像亮度。结果表明,当存在Dolby Vision元数据时,内容的亮度更紧密地跟随屏幕的亮度设置。 成功了!…但我们还没有完成。

测试我们的Dolby Vision实现

在Meta,我们在发布新功能之前会进行A/B测试,以确保其性能符合预期。我们如何测试嵌入在视频比特流中的元数据?答案是,我们为每个视频制作了一个包含新元数据的额外版本。我们将这个新版本分发给随机分布的测试用户,而随机分布的对照组用户则继续接收现有的体验。在我们的规模下,我们可以断言观看两种版本视频的用户群体大致相等。 对于每种版本,我们收集了诸如视频观看时长、加载所需时间、观看时使用的网络连接类型以及播放期间是否遇到错误等统计数据。然后我们进行汇总分析,比较包含元数据的版本与不包含元数据的版本。 我们假设,如果元数据按预期工作,包含新元数据的视频将获得更长的观看时间。但当我们在2024年对Instagram Reels进行首次测试时发现,平均而言,包含Dolby Vision元数据的视频实际上比标准版本的观看时间更短。 这怎么可能?Dolby Vision不是应该改善图像吗?

我们首次进行Dolby Vision元数据的A/B测试 我们的数据显示,人们观看Dolby Vision视频的时间较少,是因为视频加载时间过长,用户直接跳转到信息流中的下一个Reel。 加载时间更长有一个合理的原因:新增的元数据平均给每个视频增加了约100 kbps的开销。这听起来微不足道,但我们的编码针对各种不同的观看条件进行了高度优化。在某些情况下,每个比特都很重要,100 kbps的开销足以在边际上导致互动率下降。 解决方案是采用压缩的元数据格式。杜比团队提供了另一份规范,可将元数据开销降低至原来的四分之一,平均约25 kbps。 这足够好吗?我们必须运行另一次测试来找出答案。但首先还有更多工作要做。 我们需要在FFmpeg中使用比特流过滤器来实现对Dolby Vision元数据压缩(同时还有解压缩)的支持。此外,虽然未压缩格式是我们可以从比特流中提取并交给Apple的格式,但压缩格式并非Apple原生支持的内容。我们必须自己实现客户端解压缩。 在编写了大约2000行代码之后,我们准备就绪。

我们成功的A/B测试 这一次,我们发现使用Dolby Vision元数据观看的消费者在应用内花费了更多时间。我们将此归因于人们在光线较暗的环境下花费更多时间观看HDR视频,此时他们的屏幕亮度设置较低,而带有正确元数据的HDR视频对眼睛的负担更小。 由于包含Dolby Vision元数据带来了切实的积极效果,我们得以论证将其推广到iOS版Instagram的合理性,使其成为我们首个利用Dolby Vision的应用。截至2025年6月,所有源自iPhone生成的HDR视频的AV1编码版本均包含Dolby Vision元数据。

Meta平台Dolby Vision的未来

本文范围内的最后一个挑战是,Dolby Vision在网络生态系统中并未得到不同浏览器和显示设备的广泛支持。因此,我们无法在本页面上准确展示其带来的差异,希望您能在iPhone上的Instagram亲自体验。对Dolby Vision和amve的支持现已集成到我们的编码方案中,因此也已准备好部署到其他平台,我们目前正致力于将支持扩展到Facebook Reels。 通过与杜比合作,我们解决了HDR元数据保留这一可感知的问题,并与FFmpeg开发人员合作实现了其支持,使其可供社区利用。 这仅仅是一个开始。我们期待将Dolby Vision扩展到Meta的其他应用及其相应的操作系统。

致谢

我们要感谢Haixia Shi、杜比团队以及来自FFmpeg的Niklas Haas对这项工作的支持。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计