Mozilla 的研究工程师 Michael Bebenita 最近发表了一篇关于下一代视频编解码器 AV1 开发的 精彩文章。如果您对新媒体格式的创建感兴趣,我强烈建议您 阅读全文。
让我感到眼前一亮的是关于将 AV1 比特流分析器移植到 Web 的讨论
分析器的输入通常很小(一个编码的比特流),但输出却非常大。[…] 理想的解决方案是直接在浏览器中运行分析器,从而无需下载分析器输出。
但是,当编解码器是用 C 语言编写时,你该如何做到这一点呢?一种选择是手动用 JavaScript 重新实现它,并希望你能跟上参考实现的变化。另一种更好的选择是直接重用 C 并将其编译到 Web。这正是 AV1 团队在 Emscripten 的帮助下正在做的事情。
Emscripten 将任意 C/C++ 编译成 JavaScript,这使 AV1 团队能够将他们编解码器的每个修订版本自动编译成 JavaScript 并将其发布到 Web 上。这样一来,比较两个版本的编解码器就变得像 分享链接 一样简单。
这种工作流程已经足够快了,但它还可以更快。由于 JavaScript 不支持 64 位整数,因此 AV1 的许多计算必须进行代价高昂的数值转换。具体来说,模拟 64 位数学估计会导致 AV1 的性能下降 20%,我们已经在其他项目中看到了高达 600% 的性能下降,这些下降直接归因于这种模拟。
这就是 WebAssembly 的作用所在。WebAssembly 是一种新的低级 Web 程序格式。它是一个由 Mozilla、Microsoft、Google 和 Apple 共同开发的开放标准,因此它最终将在所有浏览器中运行。最重要的是,Bebenita 解释说,“WebAssembly 支持 64 位数学,一旦它准备就绪,[AV1 比特流分析器将]切换到 WebAssembly。”
幸运的是,Emscripten 已经对编译到 WebAssembly 提供了实验性支持,因此 AV1 工作流程将保持不变:在 C 中开发一个代码库,并使用 Emscripten 将其编译到 Web 以进行测试。这样一来,WebAssembly 将在下一代视频编解码器的开发中发挥不可或缺的作用。
更重要的是,这种工作流程代表了 Web 开发的根本性转变:“原生”和 Web 之间的墙壁正在倒塌,开发者将能够在两种环境中无缝使用相同的库。这标志着将项目手动移植到 JavaScript 的繁琐时代结束,并为 Web 上显著提高的性能打开了大门。
关于 Dan Callahan
Mozilla 开发者关系工程师,前 Mozilla Persona 开发者。
一条评论