RTC 系统音频弱网对抗技术发展与实践
yuyutoo 2024-10-12 01:19 5 浏览 0 评论
本文整理自线上直播【MCtalk Live#2 :RTC 系统音频弱网对抗技术发展与实践】网易云信资深音视频引擎开发专家崔承宗分享内容。
1、背景介绍
RTC(Real Time Communication)系统广泛应用在视频会议、在线医疗、泛娱乐、在线教育等实时互动场景,为用户提供低延时、高清晰度和流畅度、高保真音质的实时互动体验。音频弱网对抗技术旨在提升 RTC 系统在弱网(高丢包、大抖动、高延迟)条件下的用户体验。
本文从 RTC 系统的音频弱网效果、弱网对抗的诸多技术以及 RTC 系统层面进行较为详尽的分析,希望可以帮助读者对 RTC 系统的音频弱网对抗技术有所了解。
2、常见音频弱网卡顿现象
实际场景中常见的音频弱网卡顿现象有如下表所示几次情况:
表1 常见 RTC 应用音频弱网卡顿现象 | |||
序号 | 现象 | 排查路径 | 问题归类 |
1 | 音乐声音不饱满、发闷,飘忽、卡顿 | 确认 CODEC 采样率、码率,编码器类型 | CODEC类 型选型,CODEC参数设置 |
2 | 声音快进、慢放 | 网络 RTT,网络数据突发数据量,设备信号强度等 | 网络抖动、去抖动处理逻辑、网络连接信号差等 |
3 | 声音卡顿、卡死、断续 | 网络丢包率和 RTT、网络带宽预测、码率分配、网络拥塞控制等 | 网络拥塞、网络连接差等 |
3、RTC 系统音频的抗性
针对上述音频卡顿现象,我们该如何应对呢?表2列举了业界常用的音频抗丢包算法和相互对比。
表2 业界常用的音频抗丢包算法对比 | |||||
对比 | 带外 FEC | Opus/SILK 带内 FEC | RED | ARQ | PLC |
延迟 | 分组延时+单向传输的时间 | 1或者2倍帧长+单向传输的时间 | RED 最大层数 N 倍的帧长+单向传输的时间 | N 倍 RTT 的传输延时,N 是最大重传次数 | 无延迟 |
使用方式 | 前向纠错 | 编码器特性 | 前向纠错 | 后验纠错 | 后验纠错 |
适用情况 | 随机丢包、网络 RTT 较大、包长度较大的场景 | 小丢包或者非连续丢包、编码器编码码率较高的场景 | 随机丢包、网络 RTT 较大、包长度较小的场景 | 突发丢包和持续丢包、网络 RTT 较小的场景 | 小丢包或者非连续丢包根据上下文或者临近波形生成相似波形 |
实现难度 | 相对复杂,涉及到发端、收端FEC编解码逻辑,动态冗余、反馈及时性等 | 相对简单,涉及编码器码率和网络丢包模型 | 复杂度低于带外 FEC,涉及到动态冗余、反馈及时性等 | 看似简单,实际上网络复杂场景下的挑战较大 | 相对复杂,通过波形相关性或者噪声填充,提升抗丢包能力 |
下面,我们详细介绍一下音频抗性的这几种算法。
抗丢包 FEC
前向纠错也叫前向纠错码(Forward Error Correction,简称 FEC),是增加数据通信可信度的方法。FEC 利用数据进行冗余信息的传输,当传输中出现数据丢失时,将允许接收端根据已经接收的数据恢复丢失数据。
如下图所示,我们可以看到,发送端将数据包根据冗余度参数进行分组 (block),对分组数据增加冗余。接收端在收齐分组后,即可恢复丢失数据(条件是丢失不超过冗余包数)。因为接收端要等待FEC分组到齐,所以存在 FEC 恢复算法上的延时, FecDelay = Block个数 * 帧长。
那么,常用的 FEC 冗余算法包括哪些呢?
RTC 系统中常用的 FEC 冗余算法包括:XOR、Reed Solomon、喷泉码等。其中,以 XOR 和 Reed Solomon 算法的应用较为广泛。
下面简单介绍一下 Reed Solomon 算法的数学背景。
Reed Solomon 算法的核心思想包括三个部分:
- 利用范德蒙德(Vandermonde)矩阵 F,通过数据块计算编码块(即算冗余矩阵),如图2所示
- 利用高斯消元法(Gaussian elimination) ,恢复损坏的数据块 (即算冗余矩阵的逆矩阵)
- 为了方便计算机处理,所有的运算是在伽罗华域 Galios, GF(2^w) 的基础上进行
抗丢包 RED
如前所述,RS FEC 算法由于涉及矩阵运算,在发送端和接收端都会增加额外的性能开销。考虑到音频包长度较小,采用 RED(Redundant Audio Data)方式进行冗余是一种更有优势的策略,可以提高数据包 payload 的利用率,并降低性能开销。
我们举一个实际的例子:一个 RTP 音频数据包,包括一个 DVI4(8KHz) 主编码块和一个单独的 8KHz LPC 编码的冗余块,两者长度均为 20ms。参照 RFC 2198 标准所定义,示例格式如图3所示。
抗丢包 ARQ
介绍了 FEC 和 RED 这两种前向纠错方法之后,下面我们再看一下音频 ARQ。
音频 ARQ(自动重传请求)重传使用的是 NACK 方式,如下图。
假设是随机均匀丢包场景,重传失败率概率为:Pn = P(n-1)*lossrate。对于音频来说,假设当重传失败概率 Pn<1% 时,认为重传成功,那么 n 就是重传成功所需的次数(截断二进制指数退避算法)。
各种丢包率条件下需要的理论重传次数如表3所示。
表3 各种丢包率条件下需要的理论重传次数 | |
丢包率 | 需要重传的理论次数 |
10% | 1 |
20% | 2 |
30% | 3 |
40% | 5 |
50% | 6 |
60% | 8 |
70% | 10 |
80% | 21 |
我们可以看一下两种情况:
- 假设 10% 丢包:重传一次失败的概率 10% * 10% = 1%。
- 假设 50% 丢包:重传一次失败 50%50%=25%,2次:2550% = 12.5%,4次: 3.125%,6次:0.78%。
音频快速重传 ARQ 就是以“选择重传”算法作为基本的请求策略,其算法的关键特色在于重传请求与 JitterBuffer 的紧密配合。
- 请求重传模块记录并缓存所有重传数据包的重传成功所消耗的时间,并将重传延时 Arq Delay 告知 JitterBuffer 模块,提高了数据的缓冲等待时长的高可控性,参见(6)。
- 接收端通过 ARQ 请求,在数据缓冲队列的数据帧被播放之前,当还未重传成功的数据帧在已经达到播放时间时,接收端通过 ACK 通知取消请求重传,减少无用请求,参见(5)。
ARQ 策略受 RTT 影响较大,由于 ARQ 的原理是针对丢包进行选择性请求和重传,所以它对于突发丢包有较好的对抗能力,冗余码率的利用率远高于 FEC 和 RED。
ARQ 策略在使用中的难点是合理把握 NACK 请求的时机和间隔以及重传包的码率控制,防止误请求、多请求和多重传,尤其在抖动场景下需要格外关注。
抗抖动
弱网环境除了丢包以外,在 4G 和 Wifi 等移动接入场景中抖动和乱序较为常见,主要原因是移动链路的多径干扰、信号衰减、临频干扰等。为了处理抖动和乱序,保证接收端数据包的有序接收,在 RTC 系统的接收端引入抗抖动模块,原理如图6所示。
抗抖动模块重要的组成部分之一是网络抖动的预测。抗抖动模块根据网络抖动的预测结果自适应调节Jitterbuffer长度,以达到抗抖动的目的,并能够在网络无抖动的时候保证低延时。抗抖动模块的抖动预测模块原理如图7和8所示。
Jitterbuffer 模块的网络延时估计是以 IAT(inter arrival time)为基础的。IAT 的含义是相邻包到达时间间隔。通话时间越长,包间隔 IAT 的概率分布越稳定。观察周期内 IAT 的整体概率分布之和近似为1。一般采用 95% 作为满足统计概率的阈值,计算出 Jitterbuffer 的目标值大小。
抖动预测之后,需要对 buffer 中音频数据进行调节,常用的做法是进行加减速播放。在需要拉伸 jitterbuffer 的时候进行慢放操作,在需要压缩 jitterbuffer 的时候进行快放操作。
- 语音时长修正(Time Scale Modification, TSM)是一种通过扩展或者压缩语音长度,从而改变语音速度的技术。在进行时域压缩或者扩展的同时,还应尽量保证语音信号的基音频率及音色—即变长不变调。
- Wsola(波形形似同步叠加法)是一种基于语音信号准周期特性,进而插入基因周期整数倍的信号来实现波形长度变化的算法。
4、RTC 系统音频的编解码
在介绍了 RED、ARQ 和抗抖动等弱网对抗技术之后,我们再介绍一下基于音频编解码器实现的弱网对抗技术。
如下图,说明了各种编解码器的质量与码率的关系:
图中绿色线条代表的是无专利要求且开源的编解码器,其中 G.711 和 G.722 是 ITU 早期应用于电信网络的语音编码标准,相应只支持窄带和宽带频率范围,码率相对固定,压缩率较低。蓝色线条代表的是无专利要求但是闭源的编解码器,相比 G.711 和 G.722,它们支持的频带更广。最后,红色线条代表的是有专利要求并且闭源的编解码器,其中 AAC 和 MP3 是 Fraunhofer 主导制定的音乐编解码器标准,广泛应用在数字音乐领域。
图10 则说明了各种编码器的编码延迟与码率的关系:
从图中也可以看出,除了 Opus 以外,其他编解码器的码率变化范围相对较小,这与编解码器所覆盖的频带范围相关。另外,不同编解码器的编码延时也有明显差异,MP3 和 AAC 等音乐编解码器的编码延时较大。
由此,我们可以得出结论,Opus(RFC 6716) 是唯一一个覆盖全频带的音频编码器,并且它有如下的特性:
- 支持动态码率
- 在同等码率水平(高于8kbps),其质量高于其他音频编码器
- 其编码延迟低于其他音频编码器
带内 FEC
Opus 编解码器内部支持的原生带内 FEC 在 Speech 场景下,可以处理大约 20% 以内的丢包,其原理是通过当前帧携带前一帧的缩小版压缩包信息来恢复丢失的信源。如图11所示。
具体到 Opus 编码器内部实现,inband FEC 是通过 LBRR(Low Bitrate Redundant)帧实现的。LBRR 帧包含了前一个音频帧的信息,和当前帧一起打包编码。图12是 LBRR 帧的编码代码。
PLC
以上介绍了多种带外抗丢包策略,下面简单介绍一下丢包补偿策略 PLC。
PLC(Packet Loss Concealment)丢包补偿是 Opus 编解码器中的一个可选项,在弱网传输场景下应该开启这个特征。
PLC 代码的实现根据收到的数据包模式的不同而有所不同:在 CELT 模式(audio)和 SILK 模式(speech),PLC 分别采用不同的方式进行丢包补偿。
5、总结
最后,我们总结一下音频RTC系统整体的结构,从系统角度分析一下,如图14所示。
今天分享了音频 RTC 系统的弱网对抗技术与实践,总结值得我们思考的几个方面:
- 表面上的音频卡顿,背后往往隐藏着各种各样的问题,需要对各个问题逐一进行分析;
- RTC 系统的任意一个环节出问题,最终呈现给用户的就是不足的音频体验;
- RTC 系统中各个模块组成一个有机整体,如何有效适应复杂多变的网络环境,将各个模块弱网对抗的能力有机结合,从而发挥最大的作用,是一个颇具挑战的课题,值得我们不断探索。
以上,就是本次分享的全部内容。
作者介绍
崔承宗,网易云信音视频引擎专家,10余年音视频引擎开发经验,对 WebRTC 引擎、音视频会议系统、视频编解码技术有一定研究和实践经验。
相关推荐
- 网站制作的流程是什么呢?简单大概的流程
-
关注我!了解更多网站建设的小干货~如今,随着网络时代的全面到来,网站在人们的生活和工作中发挥着极其重要的作用。网站制作的发展使更多的人加入了这个行业。如果你想掌握网站制作的知识,你可以在学校或网上学习...
- 一款谷歌(Google)打造的广告网页设计制作软件
-
GoogleWebDesigner是由谷歌(Google)打造的一款广告网页设计制作软件,它能够帮助从事于广告网页设计工作或是有这方面需求的用户更加有效快速的进行完成相关的行业设计工作,软件可以支...
- 普通网站如何制作一个网站?
-
对行外人来讲,在预备做一个网站项目时,最想了解的无非就是网站制作的悉数流程。网站制作是要有计划的,事先策划好才能更快更好的完成。网站的几个基本组成元素:域名+空间+程序+模板+维护经验+日常管理.网站...
- 用纯Python就能写一个漂亮的网页,再见HTML
-
再见HTML!用纯Python就能写一个漂亮的网页我们在写一个网站或者一个网页界面的时候,需要学习很多东西,对小白来说很困难!比如我要做一个简单的网页交互:天啊,听听头都大呢!其实我就给老板做一个...
- HTML表单4(form的action、method属性)——零基础自学网页制作
-
表单的工作过程表单的信息发送与处理过程可以简单的进行图示,如下图。以注册会员为例,用户在自己的电脑上打开相应的注册表单页面填写信息,完成填写后点击提交按钮,也就是图中1所示过程。这时浏览器会将这些信息...
- 官网网站设计网页制作模板建站前端自适应响应式网站仿站门户
-
案例背景航科慧联无人机搜索雷达能够在多种天气下检测到无人机的入侵、并获得目标的距离、方向和高度等具体信息,是无人机反制作战中的关键设备。航科慧联无人机搜索雷达能够在多种天气下检测到无人机的入侵、并获得...
- 软网推荐:在线制作软件图标
-
在制作PPT演示、软件、网页或其他程序时,我们往往需要用到一些个性化的图标。现在,即便是不安装任何软件,也可以上网在线制作自己需要的图标。首先访问如下制作网址:http://www.rw-design...
- 自定义跳转的h5网页如何制作?
-
文章来源:墨鹊微站...
- 网页如何制作?这几点要知道
-
这是一个个性张扬的时代,也是一个动手能力和动脑能力都比较强的时代,因此很多人对于能够自己动手完成的东西,都不太想假手于人。于是网页制作成了各大搜索引擎里面排名比较靠前的关键词之一。想要知道网页如何制作...
- 手机端网站简单制作教程,怎么快速制作一个移动端的网站
-
想要创建一个手机端的网站,需要有域名、已经完成网站页面的开发设计,零基础朋友不懂代码技术,直接在线套用乔拓云里面的网站模板来开发是比较简单可行的,进入乔拓云网,复制网站模板编辑网站的内容,注册域名后绑...
- 几张动图教你轻松了解Dreamweaver做网页
-
施老师:当今可是互联网时代,人们的生活、社交离不开互联网,那么不管你是网页设计师,还是销售达人,还是个体户,总必不可少的要在网上呈现一些页面给客户看,这个就是让你做网页,而Dreamweaver是做网...
- 用Deepseek制作网页版的汉诺塔游戏保姆级教程
-
在deepseek中输入:“帮我做一个网页版的汉诺塔演示游戏,游戏包含2层、3层、4层、5层的汉诺塔游戏演示,制作自动求解演示按钮,点击按钮就可以生成出步数,同时自动演示最优解动画。”...
- JS制作网页版计算器
-
大家晚上好,我是洁哥,抱歉今天有点晚了,但是洁哥不会缺席哦,今天我们来看一个JS实现网页版计算器的例题,先来看一看出来的效果吧(123+123=246)(123-123=0)(123*123=1512...
- 网页制作流程哪几步
-
在数字化时代,网页制作成为企业和个人展示形象、传递信息的重要方式。但是,许多人对于网页制作的流程仍感到困扰。为了解决这一问题,我们将深入探讨网页制作的关键步骤,助您更好地理解和应用这一过程。第一步:需...
- 这4个设计技巧,教你做好个人网页制作
-
随着互联网发展,个人建站已经不是什么稀奇事,学生、求职者、插画师、摄影师、作家……都可以制作个人网站,用来展示自身形象,或者吸引粉丝。那么如何做好个人网站呢?在不懂设计和技术知识的情况下,个人网页制作...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
推荐7个模板代码和其他游戏源码下载的网址
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)