从360度视频到Oculus,通过Facebook 360音频编码与渲染都可实现身临其境的感受,并且使用的声道更少,小于0.5毫秒的渲染延迟。Facebook技术团队撰文对此进行了解读,LiveVideoStack对文章进行了编译。

文 / Hans Fugal, Varun Nair

译 / 郭俊翔

审校 / 包研

• 全新的360度空间音频编码和渲染技术,使得空间化的音频在从编辑者到用户的整个处理过程中,都能保持高质量。这一技术有望首次实现大规模商用。

•我们支持一种被称为“hybrid higher-order ambisonics(混合高阶立体声高保真混响)”的技术,使得空间化的声音在整个处理过程中依旧能保持很高的质量。这是一个具有渲染与优化功能的8声道音频处理系统,可借助更少的声道实现更高的立体声质量,最终达到节省带宽的目的。

• 我们的音频系统同时支持空间化音频和头部定向音频。在空间化音频中,当听到来自某种场景的声音时,系统会根据用户在360度全景视频的体验中,头部会转向不同的方向作出不同反应。通过头部定向音频,人物对白和背景音乐等音频在方位上会保持静止。这是我们在业界第一次实现同时渲染混合高阶立体声和头部定向音频。

• 空间音频渲染系统能够为开发者带来延迟小于半毫秒的实时渲染体验。

• FB360编码器工具可以将处理后的音频传输至多个平台。用于音频渲染的SDK可集成在Facebook和Oculus Video之中,保证了从制作到发布的体验统一性。这样可以节省工作时间,并确保开发者在制作中听到的内容和最终发布的内容一致。

Facebook上的360度全景视频体验令人惊叹,给人带来身临其境的非凡体验。但如果想获得更加完美的视听体验,也可能需要360度空间音频。当用户使用360度空间音频时,每种声音听起来像是从空间中对应的方位发出,就像我们在现实生活环境中感知声音一样。在摄像机上方飞行的直升机轰鸣听起来就像是在用户的上方,在摄像机前方的演员对白听起来就像是在用户的前面。当用户环视整个视频画面时,系统需要根据用户头部方向的变化作出反应并将每种声音重新定位到画面上的相应位置。无论是通过手机,浏览器还是VR头戴显示器,当用户每次观看360度全景视频时,音频都需要被重新计算并更新方位以完美还原用户真实的空间感受。

简而言之,为了实现这种效果,我们必须开发一种即使不依赖放置了扬声器的大房间也能为用户带来超越影院沉浸感的音频处理系统。在等待我们解决的一系列问题中,首要的是必须架构能够反映真实世界环境的音频环境,并通过耳机以更高的声音解析度呈现给用户,同时不断追踪用户的视觉方位。通过头戴式耳机听到的常规立体声可能会帮助用户了解声音是在自己的左耳还是右耳播放,但它不会帮助用户感知环境中声音的深度或高度,也无法准确感知声音是源于自己的前方还是在后方。

创造这种空间化听觉体验并将其大规模商用化需要许多新技术。尽管空间音频研究正在学术领域如火如荼地进行,但到目前为止,还没有出现可靠的端到端的传输方式能将这种技术大规模地推向消费市场。最近我们推出了新的用户工具和渲染方法,这使得我们首次有机会为大规模的消费市场提供高质量的空间音频技术。这些渲染技术被应用于一个名为“空间音频工作站”的新型强大工作平台,使创作者能够在360度全景视频中添加空间化音频。该渲染系统也适用于Facebook应用程序,这样用户便可以通过Facebook听到创作者上传的同样生动的全景音频。

这两项改进都能帮助视频制作人在多种设备与平台上重塑现实。我们在这篇文章中,将探讨我们已经探索到的一些技术细节。不过先让我们了解一下空间音频的发展历史与背景。

初识空间音频

由于头相关传输函数(HRTFs)的存在,通过耳机使用户听到具有逼真空间感的声音是有可能实现的。 HRTFs帮助开发者构建可应用于音频流的音频滤波器,使得声音听起来像是位于其特定的正确位置 ——在听者之上、之后或旁边等等。 HRTFs通常适用于具有人类主体模型或人体头部和躯干模型的消声室中,但通过其他方法也可以达到这种效果。

如果想让用户在观看全景视频时也听到全景声,开发者必须将声音放在正确的位置。换句话说,他们必须设计并传输空间音频。有很多方法可以实现这一点。其中一种方法是基于对象的空间音频,场景中的每个对象(例如,直升机或演员)单独发出的声音会被保存为具有位置元数据的离散流。大多数游戏的声音环境架构使用的便是这种基于对象的空间音频渲染系统,因为每个音频流的位置可根据玩家移动的位置而随时变化 。

Ambisonics技术是另一种能够展现整个声场的空间音频方法。我们可以将其视为音频的全景照片。多声道音频流可轻松用于展现整个声场,这使得与基于对象的空间音频处理技术相比具有更容易进行转码和流式传输。一个 Ambisonic的流可以通过各种方案来呈现。这些方案最大的区别在于the order of the ambisonic sound field。一阶声场会产生四个声道数据,而三阶声场则会产生16个声道数据。通常,较高的声阶意味着更好的音质和更准确的空间定位。我们可以将低阶的ambisonic sound field理解为模糊的全景照片。

工作流程与工具

Spatial Workstation空间音频工作站是我们开发的一套音频处理工具,可帮助专业音效设计师设计能够用于360度全景视频和线性VR体验的空间音频。该工作站与现有音频工作站相比具有更强大的音频处理能力,开发者借此可以根据360度全景视频在三维空间中定位声音,同时通过VR耳机上的声音输出端对空间音频进行预听。这开创了一套贯穿内容创建到发布整个过程的高质量“端到端”工作流程。

传统的立体声音频只包括两个音频通道。我们使用Spatial Workstation开发的系统可实现八个音频通道的输出。因为声场已被优化调整以适应VR和360全景视频,我们将此称为混合高阶ambisonic系统。这套系统被整合(tuned)到我们的空间音频渲染器中,这样能最大限度地提高声音的质量和位置精度,同时把对性能的要求和延迟时间降至最低。此外,Spatial Workstation还可以输出两个头部定向音频声道。此时输出的,是一个不会对头部进行追踪并以旋转来作出响应的立体声流,此时声音将保持被“锁定”到头部周围某个方位的状态。大多数360度全景体验使用的是混合的空间化音频和头部定向音频,空间化音频可用于在360度全景内进行的动作,而头部定向音频可用于旁白或背景音乐。

SPATIALIZED / HEAD-LOCKED

非凡的渲染效果

我们的空间音频渲染器凝萃了我们这几年开发的一系列技术,可以将空间音频轻松扩展到广大不同类型和配置的设备中,同时保持最佳质量。渲染器使用参数化和表示HRTFs的方式,可以衡量HRTFs的各个组成部分来决定在渲染时是侧重速度还是质量,或在两者之中找到一个最佳的均衡点。除此之外,我们的渲染器音频延迟小于半毫秒,比大多数渲染器低一个数量级,这使得它非常适合用于优化全景音视频的实时体验,例如带头部追踪的全景视频。

这种灵活性有利于全景音视频在一系列台式计算机,移动设备和浏览器等载体上的传播。我们的渲染器被调整优化,能为不同平台的用户带来协调统一的工作体验,并且在这些不同的平台上都能很好地工作。对于创建高质量的空间音频而言,这种一致性非常重要。由于对运行性能有不同的要求,音频可能在不同平台或设备上呈现出不同的效果,这样对于整个生态而言显然是不利的。我们希望在如Facebook这样的平台的大规模使用下确保全景音视频在各种常用设备和生态中都能一致保持优秀的质量。

跨平台高效工作

渲染器是Audio360音频引擎的一部分,它可以将混合高阶ambisonic和头部定向音频流空间化。音频引擎是用C ++编写的,这为每个平台提供了优化的矢量指令。它非常轻量,可通过多线程和Lock-Free system进行列队(queueing)与空间化(spatialization)工作并混合(mixing)。它还能直接与每个平台上的音频系统(Android上的openSL,iOS / macOS上的CoreAudio,Windows上的WASAPI)进行交流协作,以最大限度地减少输出延迟并尽可能地提高处理效率。这种轻量化设计不仅可以让开发者时刻保持高效工作,还能通过保持二进制大小(binary size small)来减少应用程序的臃肿。音频引擎中二进制文件会被编译为大约100千字节。

对于Web,音频引擎使用Emscripten编译为asm.js。这有助于我们在所有平台上进行维护、优化并使用相同的代码库。该代码只需很少修改就能在浏览器中正常工作。渲染器的灵活性和高速性使我们能够在各种浏览器中使用相同的技术来保证音频质量。这种情况下的音频引擎被用作WebAudio中的定制处理器节点,其中的音频流会从Facebook视频播放器排列至音频引擎中,同时来自音频引擎的空间化音频被传递到WebAudio并通过浏览器回放。与原生C ++实现相比,JS版本只能在2倍慢速或4倍慢速下运行,这对于实时处理而言还是足够的。

随着电子设备和浏览器的处理速度一年年变得更快,各种设备和浏览器的浏览速度都会大幅进化,渲染器和音频引擎的灵活性和跨平台特性使我们能够随之不断提升声音的质量。

从编码到客户端

空间音频编码和其文件格式的世界正处于迅速发展不断变革的状态。我们希望尽可能方便地将使用Spatial Workstation制作的内容编码并上传到Facebook,以便在人们能在所用的所有设备上观看和收听。Spatial Workstation编码器能准备好8声道空间音频和立体声头部定向音频,与360度全景视频一起打包至一个文件并上传到Facebook。

编码器的选取优化

在寻找可行的文件格式方面我们遇到了一些挑战。主要面临几个约束条件,其中的一些可以先放一放,但迫切需要解决的是尽早提供一种合适的编码器。主要的限制因素是将视频转码成Facebook的原生视频格式:H.264编码的MP4格式视频时尽可能地减少整个过程中声音质量的损失,这意味着存在以下实际限制:

•MP4中的AAC支持8个频道,但不支持10个频道。

•AAC编码器将8声道音频看作是7.1环绕声格式,它采用积极的低通滤波器和其他技术来压缩LFE声道。这不符合我们致力于呈现的空间音频。

•MP4元数据,是可扩展的,但会繁琐地利用工具,如ffmpeg或MP4Box工作。

我们选择使用MP4文件中包含三条音轨的频道进行配置。前两个是没有LFE的四声道音轨,共有八个非LFE声道。第三首曲目是立体声头部定向音频。我们以高比特率进行编码,以最大限度地减少从WAV转换到AAC时的质量损失,因为这些音轨将在服务器上再次进行转码以准备通过客户端传送。

在Facebook,我们拥有核心工程价值(core engineering valve)以实现快速的技术革新。我们认为,随着用来编辑音频的工具和相应功能的不断更新,我们没能及时考虑清楚可能需要传达的所有信息。出于这个原因,我们需要一个前向扩展(forward-extensible)且易于使用的元数据解决方案。定义我们自己的MP4盒子类型感觉很脆弱,所以我们决定将元数据放入一个位于元框中的xml框中。 XML可以遵循一种能按照开发者的需求快速进化的模式。 MP4Box工具可用于从MP4文件中读取和写入此元数据。我们为每个音轨(在trak框下)存储元数据,为该音轨定义声道布局。然后,我们还在文件级(在moov框下)编写全局元数据。

空间工作站编码器也会将视频作为输入的部分。该视频被整合到生成的文件中,无需转码,并将写入适当的视频空间元数据,以便在上传到Facebook时服务器将其作为360度全景视频进行处理。

YouTube目前需要四个频道来支持一阶立体声效果。我们同样支持这种格式的视频。

高效便捷的转码操作

一旦开发者上传了具有360度全景视野和360度空间声音的视频,这些视频就已经准备好推送至各种设备的客户端。音频以多种格式进行类似的处理。我们提取音频元数据(无论是YouTube ambiX还是Facebook 360格式)以确定音轨和频道一一映射,然后将其转制为各种需要的格式。与其他的所有视频一样,有时为了便于比较,我们会使用多个编码器设置进行转码,来获得最佳的完整体验;我们还准备了与所有传统客户端兼容的立体声双耳渲染技术,并在出现任何问题时将其作为备选方案。

音频与视频可以分开处理,并通过使用自适应流媒体协议合并传送给客户端。

向客户交付作品

不同的客户端具有不同的功能并支持不同的视频容器/编解码器格式。我们不能强制所有设备都同时支持一种格式,因此我们为iOS,Android和网络浏览器准备了不同的格式。这令用户可以跨平台地在这些设备上控制视频播放器,根据不同需求实现特殊行为,但我们更喜欢经过充分测试并且不需要花费额外时间去执行的现有代码。出于这个原因,在iOS上我们更喜欢把MP4格式文件作为视频载体,在Android和Web浏览器上我们更喜欢使用WebM。在iOS和Android上,与单声道或立体声音轨不同,解码10声道AAC音频不直接受本机支持或单纯依赖硬件加速。上述这些有关AAC以及8声道或10声道音频的问题,使我们发现了特别的编解码器——Opus正在被其他人用于空间音频,利用Opus编解码器可实现更好的压缩。它是一款先进的开源编解码器,它的软件解码速度比AAC更快。这使Opus自然而然成为我们的最佳选择,特别是对于WebM这种视频格式。大多数编码器或解码器目前不支持MP4下的Opus。但是,这里有一份实现MP4下的Opus的拟定草案,并且我们正在进行一项工作来支持ffmpeg。

当我们将上传的文件(“4 + 4 + 2”)中的三音轨格式转换为单个10声道Opus音轨时遇到了一些挑战。与AAC一样,允许的信道映射和LFE信道也是一个问题。然而,Opus允许未定义的频道映射族(255族),意味着这些频道并不是已知的布局。这项工作已经足够完善了,因为我们控制了编码和解码,并且我们可以确保两端的布局具有相同的理解相同。我们在流动的清单文件中传输通道布局信息。未来,随着Opus中的空间音频技术的成熟,可能会出现一些特定的能实现在大幅减小文件体积的同时显著提升音频质量的通道映射和增强编码技术。这样,我们的客户将能以最小或无需更改的方式对空间音频其进行解码。

未来的发展方向

我们处于一个不断拓展和进化的空间音频先进领域 ——正在改进优化非空间视频和音频所采用的格式。我们所做的一切,开创了全新的视听体验并将其变成现实。但还有很多的事情需要去做:上下堆叠组件、 从工作站到视频文件格式等方面都需要进行改进。目前,我们正在研发可以将所有音频存储在一个音轨中进行上载的文件格式,并有可能实现无损编码。同时我们也对Opus中改善空间音频压缩的项目十分感兴趣。我们期望探索自适应比特率和自适应信道布局技术,以改善那些受带宽所限的用户、或是拥有足够多的带宽并期待获得更高质量内容的用户的使用体验。这是一个令人兴奋的领域,我们期待为整个音视频生态作出更多卓越贡献。

LiveVideoStack Meet | 上海

多媒体开发新趋势

2018年初的视音频技术生态并不平静,Codec的争夺进入群雄逐鹿的时代; WebRTC 1.0版定稿在浏览器中,移动端乃至IoT上的多媒体通信; AI,区块链技术的发展,正在与多媒体开发发生在化学反应,将成为推动生态发展的新力量。

2018年,LiveVideoStack将通过“LiveVideoStack Meet:多媒体开发新趋势”系列沙龙,展现新技术在音视频领域的探索与实践,以及新兴应用场景和传统行业的最新最佳实践。

讲师与话题:


 吴威麒:触宝科技音频技术专家  

《实时语音通信的音频后处理技术》

 曾小伟:苏宁云商IT总部技术副总监  

《如何使用机器学习算法优化分发链路》

 沈轲轶:腾讯天天P图iOS开发组长  

《iOS实时相机的GPU实践》

 盛骁杰:优酷VR技术专家  

《超高清VR直播技术的演进与挑战》

 崔文秀:北京三体云联科技有限公司总监

《实时音视频技术赋能传统行业》

 蔡锐涛:相芯科技图形引擎负责人  

《Animoji动态表情的技术实现》

点击 [阅读原文] 了解相关活动信息,快来报名吧!

Facebook 360度音频编码与渲染相关推荐

  1. 从虚幻 4 中采集 360 度立体电影

    从虚幻 4 中采集 360 度立体电影 Gavin Costello, Lead Programmer, Ninja Theory Ltd 在 May 10, 2016 | 功能学习设计 Share ...

  2. 【Blender】使用Blender渲染一段360度旋转的动画

    目录 一.前言 二.方法描述 三.渲染设置 四.结果 一.前言 本文主要讲述了如何使用Blender渲染一段物体360度旋转的动画. 渲染好的效果如下: 二.方法描述 第一步:shift+A,我们在B ...

  3. Google推出开源空间音频编码引擎Songbird

    文/ Google Chrome 媒体团队 Jamieson Brettle 和 Drew Allen 要打造真正沉浸式的虚拟场景,不仅需要有炫目的视觉效果,还需要伴有逼真的空间音频,从而营造出逼真而 ...

  4. 声网3D在线互动场景空间音频的实时渲染——如何把“声临其境”推向极致

    编者按: 千人有千耳,不同的人耳对于声音方位的适应已形成习惯,但在Meta RTC场景中如何让不同人也能畅想"身临其境"的感觉?3D在线互动场景空间音频的实时渲染又有哪些应用?Li ...

  5. CVPR2021最佳论文:当GAN遇到3D场景,无需监督就学会“动态抠图”、360度展示对象...

    月石一 发自 凹非寺 量子位 报道 | 公众号 QbitAI GAN又又又有新玩法了! 人脸?NO,NO,NO~ 这回,开发者利用「3D+GAN」生成了汽车大片,还是能360度展示.随手换背景那种. ...

  6. MPEG音频编码三十年

    ▲扫描图中二维码了解音视频技术大会更多信息▲ 作者:Leonardo Chiariglione 翻译:Alex 技术审校:冯建元 视 野 #011# 前言 很明显,声音信息的电子格式要早于视觉信息的电 ...

  7. AAC(高级音频编码)帧格式及编码介绍

    参考资料: AAC以adts格式封装的分析:http://wenku.baidu.com/view/45c755fd910ef12d2af9e74c.html aac编码介绍:http://wenku ...

  8. 【Android RTMP】安卓直播推流总结 ( 直播服务器搭建 | NV21 图像采集 | H.264 视频编码 | PCM 音频采集 | AAC 音频编码 | RTMP 包封装推流 )

    文章目录 一. 安卓直播推流专栏博客总结 二. 相关资源介绍 三. GitHub 源码地址 四. 整体 Android 直播推流数据到服务器并观看直播演示过程 Android 直播推流流程 : 手机采 ...

  9. 【Android RTMP】音频数据采集编码 ( FAAC 音频编码参数设置 | FAAC 编码器创建 | 获取编码器参数 | 设置 AAC 编码规格 | 设置编码器输入输出参数 )

    文章目录 一. 头文件.成员变量准备 二. 创建 FAAC 编码器 三. 获取并设置 FAAC 编码器参数 四. 设置 FAAC 编码器编码标准 五. 设置 FAAC 编码器 AAC 编码规格 六. ...

最新文章

  1. 计算机应用能力考试xp,全国专业技术人员计算机应用能力考试XP
  2. 《Node.js开发指南》书评汇总
  3. find指定具体时间参数-newermt
  4. 擅长排列的小明 II
  5. java加快内存回收_java内存管理之垃圾回收及JVM调优
  6. python实例化类执行顺序_Python实例化class的执行顺序
  7. UmiJS CDN 部署之 publicPath
  8. 计算机c盘哪些东西可以清理,细说电脑c盘哪些文件可以删除
  9. 【信号】信号集、sigprocmask、sigpending
  10. 解决:The ‘Access-Control-Allow-Origin‘ header contains multiple values‘x, *‘, but only one is allowed.
  11. C语言w10输入法打不出中文,win10系统输不了中文怎么办
  12. Springboot 使用阿里云api批量发送短信
  13. 电脑白屏,“笔记本电脑开机白屏的原因和解决方法”的解决方案
  14. 明清时期华北宗族的发展——以山西洪洞刘氏为例
  15. 做一个很出色的程序员
  16. 基于ROS的qbo机器人
  17. 百度地图html演示,百度地图.html
  18. 以C语言的方式理解IIC总线
  19. H5外包团队 H5开发微信APP的优势有哪些
  20. 印制电路板设计原则和抗干扰措施

热门文章

  1. 深入理解脚本化CSS系列第五篇——动态样式
  2. 10 个非常有用的 AngularJS 框架
  3. RMAN Restore, Recovery
  4. RHEL/CENTOS 性能优化
  5. 知识管理促进企业组织能力提升
  6. 域名到期续费删除的相关规则
  7. CodeForces - 628D Magic Numbers(数位dp)
  8. 2020CCPC(长春) - Combination Lock(二分图博弈)
  9. POJ - 4045 Power Station(树形dp/树的重心)
  10. web项目怎么打包上线_高级前端web工程师简历范文,【工作经历+项目经验+自我评价】怎么写...