阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

火山引擎宋慎义:RTC 技术核心挑战及发展趋势

火山引擎宋慎义

  • 2023-03-04
    北京
  • 本文字数:4497 字

    阅读完需:约 15 分钟

火山引擎宋慎义:RTC 技术核心挑战及发展趋势

火山引擎举办了 V-Growth 云端一体增长沙龙,本场沙龙围绕体验升级与业务创新,聚焦 RTC、智能美化特效、云游戏等业务场景,深入探讨了如何打造云端一体的全链路音视频能力。活动中,火山引擎 RTC 负责人宋慎义从实时性、富媒体传输、多人互动、全球化、RTC 与其他模块协同 5 个方面,详细阐述了火山引擎 RTC 的技术实践。


一、实时性



为解决实时性问题,我们在传输的信源分类、信道建模、信道策略三方面进行分别考虑。首先针对信道进行建模,根据信源分类和信道建模特征来整体调整信道策略。

信源


信源分类重要的是信源的分级,我们把信源用可靠性、实时性两个维度进行拆分。整体上需要传输的信息可以分为如下几类:


信源分级


以音频内容为例,高频信号与低频信号在整体的音频的信息中,重要程度不同。很显然,低频分量重要性更高。视频也一样,不同清晰度的视频中,低清的重要性要比高清视频更高。


我们经过很多信道优化,可以将弱网环境下的丢包率优化至 2%-5%。在剩下 2%-5% 的丢包场景中,就需要让信源进行容错,例如:

  • 在 2% 的容错率情况下:视频可以通过关键帧,音频可以通过 netEQ 的方式容错。

  • 如果需要更高的容错率,就需要对信源进行分层冗余,例如,视频的 SVC 有时域、空域的区别;音频 MDC 会有多描述编码;包括现在比较流行的 AI Codec,本质上是保留最重要最核心的语音信号,其他信号可以忽略。

信道


信道面临的主要挑战是如何评价信道的质量,有哪些评价体系。传输技术的好坏,最主要取决于能以多高的准确性、多快的速度评估信道。在过去,信道的评估往往只有信道容量这一个维度。后来有了一些新的评估手段,例如延时、带宽时延积、丢包等,现在主要用延时丢包乱序、平稳性等各个综合指标,以及主动探测、被动探测等多种方式来评估。整体上使用多种方法把信道尽可能完善、快速的描述、评估出来。

评估之后就是信道分级。信源是根据可靠性、实时性分级,信道也一样,可以把最可靠、实时的一些信道优化方式用于传输最重要的信息。


我们在搜索 RTC 时会了解到很多传输协议,但其实传输协议的格式并不重要,因为所有传输协议最终实现的都是 3 个目的:

  • 如何 FEC 实现更低延时?

  • 如何调节重传,实现更高可靠性?

  • 如何把信道分离,保证重要数据能够快速、优先传递,不重要数据可以丢弃或暂缓?

信道策略


所以好的实时性保证,需要信源、信道分级相结合,用合适的协议传输合适的内容。


信源与信道分级


同时我们也需要考虑实时性的扩展优化,例如信道的容量是否可扩展?在早期 RTC 优化中,对信道容量是没有过多拓展的。但其实现在我们很多设备都是多网卡的,服务端转化也是多链路的,这些都可以实现扩展。


信道的扩展既可以扩充传输容量,另一方面也可以提升传输稳定性。


同时,不同场景对实时性的要求不同。例如在大型会议中,需要交互的观众并不多,对于不需要参与交互的观众,实时性要求并不高,我们就可以把最优质的信道、传输容量留给最需要实时的信息。火山引擎 RTC 目前能够实现在 70% 的突发丢包和 500 毫秒的突发乱序或延时场景下,保证重要数据不丢失,不影响信息理解和正常沟通。


二、富媒体


最开始的 RTC 传输都只采集单纯的视频和音频,而近年来越来越多的富媒体应用场景不断诞生,例如:体积视频包括全景视频、VR、双目等新场景;多信源也包括 KTV 合唱、多画面等应用;最近比较流行的全景声,也伴随着多声道和高精度采样等技术。


全景视频分块并行编码


其中全景视频对 RTC 的挑战巨大。火山引擎的解决方法是把 360 度的全景分层,分为一个 8K 超清视频和一个 540P 标清视频。对于 8K 的超清视频,整体的传输需要进行超清视频分块并行编码和局域传输。并行编码的技术有很多,例如 H.264 可以按照 Slice 进行编码,H.265 按 Tile 编码,最终实现在有限信道传输特定信息,标清的这一路视频作为背景进行兜底。这样在看全景视频时,即便当前网络无法传输很高清的图像,有 540P 的视频也不会影响流畅性。此外,因为全景视频经常用于教育、工业等场景,火山引擎私有云、边缘云可以提供局域网加速方案。


多信源下的实时性实现


富媒体下面临的另一个挑战是多信源。大家经常面临多个人需要同步沟通的场景。行业的通用做法是尽量降低延时,所有人的延时都很低,自然可以实现同步。我们在这个基础之上做了一些优化,即利用全局时钟同步信号,发布给所有发布端和接收端。这样产生的信源音频和视频都会同步进行时钟对齐,接收端也通过这个方式,即便在唱歌等场景下都能实现实现不同端很好的实时性。


此外,近些年研究的热点就是全景声的空间音效。如果要实现极致体验,不仅需要双声道,还需要多声道才能更好满足。不过目前很多的音频编解码和传输方式,对多声道支持并不太好。


另一个热点就是高精度采样,大家应该都知道奈奎斯特抽样定理,人耳感知是 20-20kHz,所以奈奎斯特抽样定义大概抽样到 40kHz。但这个方式有一些弊端,它只对连续信号可以进行采样,对于离散信号采样精度会严重影响整体视频的清晰度,目前火山引擎也提供了高精度采样,例如 24bit;在没有高精度采样的场景下,我们也提供更高的采样率,例如 96kHz、192kHz 的采样率的编解码,可以实现在不同场景下的重采样。


另外,在高精度采样和多声道场景下,音频编码之后的数据会非常大。为了让全景声能够在实时场景下得到更好的传输,我们引入了多描述编码 MDC 技术,Codec 就可以实现让全景声信号分层,达到非常低的延时。目前火山引擎 RTC 已经具备在 8K/120fps、100Mbps 源流情况下,能够实时观看 10Mbps FoV 流的传输能力,在多个观看端一起观看的情况下,pct95 端到端延时小于 500 毫秒,头动延时小于 300 毫秒。

三、多人互动


近些年随着 RTC 技术发展,互动人数、互动规模不断提升,这对 RTC 造成了更大挑战。


在超大房间,很多用户快速进房、退房时会有消息风暴;同时传输的拓扑也会不断进行动态的生成与重建;另外音视频的拓扑也会面临分离传输的情况。


火山引擎 RTC 在多人互动架构上也进行了多轮的演进:


1、在人数比较少的情况下,可以使用网状 SFU(大多数 RTC 架构采用的方式),相对简单,又可以实现全量交换,但服务端很容易遇到转发瓶颈;同时,因为每个人都是对等的,当人数很多,快速进房退房时,会产生信令的广播风暴。

  • 针对这个问题的优化策略是给用户分角色,把静默用户(只观看、不上麦、不开摄像头)区分出来,这样的用户进出房间就不广播,极大减少信令。

    另外对于这种超大房间,网状拓扑也不太合适。需要把大房间里面的嘉宾的信号变成树状拓扑。

    同时当房间人数多的时候,信令广播消息比较大时,需要接入连接复用,压缩信令。


2、网状拓扑变成树状拓扑,可以解决几百人规模互动存在的问题,但如果想达到更高的互动,还需要继续优化。例如:

  • 音频选路风暴 :在一个房间内无论有多少人在听,绝大多数 RTC 系统都只会选择声音最大的几路音频。那么选路过程中会有比较大工作量。客户端不会同时拉几路流,边缘计算也没有办法同时拉几路流,因为如果所有边缘节点都同时拉所有音频流的话,整体传输量非常巨大。所以我们把一个房间内的所有音频在一个源站上进行聚合并选出全局的 TOP3,然后集中进行分发,这样音频链路与视频链路就自然分开了。

    另外在多人场景下,自动订阅优势会产生突发的信令。例如:当一个房间内有几十万用户,一个嘉宾忽然进入,会让所有用户同时订阅这个嘉宾,这时需要关闭自动订阅,开启按需订阅。因为每个用户看到的嘉宾可能是不一样的,一般情况下一个用户最多观看“5*5”、“7*7”个嘉宾的视频,就不能让用户都去自动订阅相同的嘉宾,用户可以根据自己选中的按需订阅。

    在上述的场景下,信令的推送也是非常大的压力。所以我们把信令架构变成分布式信令,进行并发推送。最终实现服务端 O(N)的复杂度(N 指用户数量),在客户端实现 O(1)的复杂度。也就是理论上如果一个客户端最多能同时观看“7*7”49 个人的视频,同时听到 3 路音频的话,那么随着人数上涨,他的计算量和网络带宽不会随之增加。


目前火山引擎 RTC 支持单房间内 2 种超大规模互动的方式:

  • 大讲堂模式:可以实现 50 嘉宾和 100 万观众。

  • 研讨会模式:可以实现 1000 嘉宾和 1 万个观众。


四、全球化


在面临全球化场景下,快速进房、稳定性是两大长期研究方向。


  • 快速进房:如果一个 RTC 系统是全球化的,传统的房间服务是中心化的,那么在地球另一端的用户进房速度就会非常慢。

    分布式房间:火山引擎的解决方案是使用分布式房间。同时,将用户进行分类,例如有一些用户是观众,他的信息没有必要扩散给其他人,所以我们把信令进行了拆分,在全球做了多个信令中心,可以下沉到离用户最近的边缘节点;只针对发言的嘉宾把信息异步通知到其他信令中心,而观众的信令不变,那么观众也不会被其他的信令中心感知到,实现了快速进房。


分布式房间


  • 分发生成树:当一个房间在全球化多中心场景下,且人数特别多时,当全球节点达到几千的量级,那么单机计算生成树会变慢。为了实现快速进房,同时房间内有新嘉宾发言开关摄像头的时候,所有用户都能够快速感知,就要在全球多个中心并发计算生成树。这时会有一些冲突的情况,需要实时进行回环检测。由于用户的变化是动态的,也要实时进行节点的分裂与合并。最终还需要考虑每个用户端到端延时的要求,这就要求实现大致平衡的生成树。另外出于容灾的考虑,整个生成树还需要能够快速动态重建。

分发生成树


  • 稳定性:如果要实现全球化的高可用,仅依靠业务侧的优化或应用层的优化是不够的,必须实现更底层的优化。火山引擎打造一个广域网的 SDN 系统,能够将流转变为包级别进行转发。


数据链路层 Overlay 网络


这是一个数据链路层的 Overlay 网络,相当于把我们之前局域网上的 SDN 搬到了公网上。当然这也面临一些新挑战,例如公网上的节点多种多样,且数量庞大,当达到上千的量级的时候,单一的路由中心也不能管理了。


于是我们又建设了分布式的路由表,而且本身的这个二层 Overlay 网络的传输能力也是能够根据 payload 进行分级 QoS 的。有了这个系统,节点和区域的故障就能够实现秒级感知和切换。


经过上述优化,火山引擎 RTC 能够实现全球传输延迟 PCT995 200 毫秒以内、全球端到端延迟 PCT95 400 毫秒以内,全球接入可用性达 99.9% 以上,全球转发可控性达 99.9% 以上。


五、RTC+X


在越来越复杂的场景下,客户往往不会单一的使用 RTC,而是更倾向于与其他多个模块协同共同解决一个或多个复杂的功能。RTC 与其他模块、客户自身应用的协同,则又是一大挑战。


RTC 在 APP 中,与点播、直播、网页、消息、下载、API 共存,不仅共用音视频设备,还共用网络带宽、CPU/GPU 内存。


所以 RTC 一定不能设计为专门抢占资源、带宽,而是需要考虑如何更好识别当前资源占用率,并能够允许客户自定义给 RTC 预留资源、使用特定限制的资源。


火山引擎 RTC 为实现与其他模块、客户自身应用的更好协同,目前已支持外部采集、渲染;带宽/性能数据的实时回调;根据静态设备适配清晰度、码率;动态性能/带宽的升降级;同时还支持自定义的降级策略。例如客户可以为 RTC 设定一个特定的带宽上限,也可以让 RTC 预留现有带宽 20% 给其他业务使用;以及当 CPU 使用率达 80%,RTC 直接进行降级等策略。


基于上述的方式,RTC 可以在确定的资源下与其他模块进行更好的协同。

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2023-03-04 14:053657
用户头像
鲁冬雪 InfoQ 策划主编

发布了 337 篇内容, 共 196.0 次阅读, 收获喜欢 270 次。

关注

评论

发布
暂无评论
发现更多内容

太强了!三种方案优化 2000w 数据大表!

互联网工科生

数据库

水务行业管理与服务数智化升级,用友Fast by BIP在行!

用友BIP

Fast by BIP 水务行业

Mobpush厂商通道回执配置指南

MobTech袤博科技

智能推送

2024北京国际光刻设备及光掩膜技术展览会

吹吹晚风

2024北京国际机器视觉展览会

吹吹晚风

文件夹数据同步 Sync Folders Pro中文免激活版

mac大玩家j

Mac软件 同步工具 备份同步软件

叮!你有一份1024程序员节的通关秘籍待查收!

飞桨PaddlePaddle

1024程序员节

浅谈东数西算战略中,发挥算网大脑作用的4个关键点

鲸品堂

东数西算 算力网络 企业号10月PK榜

如何使用GaussDB(DWS)的本地临时表进行数据处理

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 本地临时表

DHorse v1.4.2 发布,基于 k8s 的发布平台

tiandizhiguai

2024北京国际测控技术与仪器展览会

吹吹晚风

2024北京国际光学镀膜技术及设备展览会

吹吹晚风

2024北京国际激光技术及智能制造展览会

吹吹晚风

林旅强 | AI+开源时代 - 开发者与治理者的机遇与挑战

开源雨林

人工智能 开源 开发者 超级个体

财政部办公厅发布公立医院内控建设征求意见函 信息化成为内控建设重要抓手

用友BIP

数智医疗

Vulkan 同步

江湖修行

android OpenGL ES 渲染 移动端开发 vulkan

城投行业融资迈向“筹融用管还评”卓越循环,用友Fast by BIP 很在行

用友BIP

Fast by BIP 城投行业

专业CAD建模软件 BricsCAD 24激活最新版

胖墩儿不胖y

Mac软件 cad cad软件

QCN9274, QCN6274, QCN9074, QCN9024: Leading the intelligent revolution in the future

wifi6-yiyi

对话在行人 | 微乘科技:升级数智底座,从管控向“管理+服务”转变

用友BIP

2023全球商业创新大会 对话在行人

用友Fast by BIP助力公交企业降本增效,数智运营!

用友BIP

EVE-NG安装设备组件

小魏写代码

从实时数据库转战时序数据库,他陪伴 TDengine 从 1.0 走到 3.0

TDengine

时序数据库 ​TDengine

2024北京国际光电传感技术应用展览会

吹吹晚风

2024北京国际红外技术及应用展览会

吹吹晚风

火山引擎宋慎义:RTC 技术核心挑战及发展趋势_语言 & 开发_InfoQ精选文章