WebRTC 音频抗弱网技术(下)国外服务器租用ssl证书安装

  服务器证书怎么看

  上周,我们针对音频弱网对抗技术中的前向纠错技术、后向纠错技术及 OPUS 编解码抗弱网特性进行了分享。文本分享 WebRTC 使用的抗抖动模块 NetEQ。ssl证书安装

  抖动是指由于网络原因,到达接收端的数据在不同时间段,表现出的不均衡;或者说接收端接收数据包的时间间隔有大有小。

  Ji 定义为时刻 i 时测量的抖动,E(T) 表示包到达时间的间隔均值,Ti 表示时刻 i 收到的包距上一次收包的时间间隔。

  Ji 0 说明数据包提前到了,这样抖动缓存区数据将会出现堆积,容易造成缓冲区数据溢出,导致端到端时间延迟增大;Ji 0 说明数据包晚到或丢失,会增大延时;不管早到还是晚到,都可能造成丢包,增加时延。

  NetEQ 通过测量包达到时间间隔,来预测包在网络中的传输时间延时;根据收到的包但还未播放的缓冲语音数据的大小来评估抖动的大小。新加坡英文

  原则上通过对网络延时的测量,以其最大延时来设置抖动缓冲区的大小,然后使每个包在网络中的延时加上该包在抖动缓冲区的延时之和保持相等,这样可以消除抖动,就可以控制语音包从抖动缓冲区以一个相对平稳的速度播放音频数据。

  A、B、C、D 包在发送端分别以 30ms 间隔发送,中国十大含金量证书即分别在 30ms、60ms、90ms、120ms 处发送;接收端接收到这些包对应的时间为 40ms、90ms、100ms、130ms;这样它们在网络中的延时分别是 10ms、30ms、10ms、10ms;包到达的间隔分别为 50ms、10ms、30ms,即抖动。

  因此可以使包 A、C、D 在抖动缓存中的延时 20ms 再播放,即 A、B、C、D 的播放时间为 60ms、90ms、120ms、150ms,网站证书的作用这样可以保持一个平稳的间隔进行播放。

  NetEQ 通过估算网络传输延时,根据网络传输延时 95% 分位来调整抖动缓冲区;这使得 NetEQ 在消除抖动缓冲影响时,兼顾最小延时。

  下图[2]是官方对 NetEQ 和其它技术在消除抖动带来的延时对比,可以看出 NetEQ 在消除抖动时,可以保持很低的时间延时。

  下图[1]概要描述了 WebRTC 的语音引擎架构。红色区域为 NetEQ 部分,可以看出 NetEQ 位于接收端,包含了 jitter buffer 和解码器、PLC 等相关模块。接收端从网络收到语音包后,语音包将先进入 NetEQ 模块进行抖动消除、丢包隐藏、解码等操作,最后将音频数据输出到声卡播放。

  NetEQ 核心模块有MCU 模块和DSP 模块,MCU 模块负责往 jitter buffer 缓存中插入数据和取数据,以及给 DSP 的操作;DSP 模块负责语音信息号的处理,包括解码、加速、减速、融合、PLC 等。

  MCU 模块包括音频包进入到 buffer,音频包从 buffer 中取出,通过语音包到达间隔评估网络传输时间延时,以及对 DSP 模块执行何种操作(加速、减速、PLC、merge)等。

  DSP 模块包括解码,对解码后的语音 PCM 数据进行相关操作,评估网络抖动 level,向 play buffer 传递可播放的数据等等。

  从网络收到音频包后,将其插入到抖动缓存 packet_buffer_中,最多缓存 200 个包;当缓存满了,会刷新缓存中所有的包,同时该缓存最多缓存近 5 秒的音频数据,太早的会被定时清除。

  若收到的包是 red 包,会将 red 包中的每个独⽴包解析出来存入到缓存队列中,包在缓存队列中按照 timestamp 的升序进行存储,即最近的音频包存储在队列后面,老的包存储在队列前面。

  收到音频包后,还会更新NackTracker 模块,该模块主要是通过包的序列号来判断是否存在丢包,若存在丢包且重传请求开启,需要向发送端发起 nack 请求,请求发送端重发丢失音频包。

  在将包插入到抖动缓存中时,根据包到达时间间隔对网络延时进行估算。这里将 WebRTC 中根据包到达时间间隔来计算网络延时,WebRTC 计算音频网络延时,主要考虑如下几点:

  以上公式通过计算当前包和上一个包的时间差,以及 seqnum 的差值,来计算每个 seq 包占有的时间戳范围,即 packet_per_time,然后通过当前包和上一个包收包间隔 iat_ms,来计算收包时间间隔延时,用包的个数来度量。

  当正常包到达时 iat = 1,iat = 0 表示提前到了,iat = 2,表示延时一个包, 最终用包个数来衡量延迟时间。

  每算出一个 iat 后,会将其插入到对应的直方图,直方图记录 0-64 个包,即记录 0-64 个包的延迟概率分布情况。所有延迟概率和为 1。

  计算出当前包的到达间隔 iat,将其插入到直方图,并更新直方图每个延迟的概率,每个延迟分布乘以一个遗忘因子 f,f 小于 1, 更新过程如下:

  上面公式的意义是保证每次计算出一个包到达间隔延迟后,对应增加其概率,同时对其它延时分布的概率进行遗忘,使整个和保持为 1。

  最后取其 95% 分为的延迟作为目标延时,即有 95% 的延迟都小于这个目标延时。

  统计多个包到达间隔峰值,最多 8 个,在一定情况下,以峰值作为网络延时估计。每次计算到包到达时间间隔 iat 和按 95% 分位计算到的目标延时(记为target_level)后,来判断峰值。

  当判断该 iat 为延时峰值时,将其添加到峰值容器中,峰值容器中每个元素记录两个值,一个是峰值 iat 值,另一个是当前峰值距离上一次峰值的时间间隔(即为 period_ms);

  当峰值容器超过了两个,且当前时间距离上一次发现峰值时已流逝的时间(记为 eplase_time)小于峰值容器元素中记录的最大 period_ms 的两倍时,认为该峰值是有效的,需要从峰值容器取最大的 iat(记为 max_iat),ssl证书安装则目标时延取值:

  当 target_level 取值是 max_iat 时,该峰值的理论有效时间可到达 40s 以上,此处存在优化空间。

  根据设置最低时延,调整目标延时估计,保证目标延时估计不低于最小时延;最小时延是音视频同步计算的出来的结果。

  从 packet_buffer_ 中获取的数据首先需要经过解码器解码,然后再根据反馈的操作进行对应的 DSP 操作(加速、减速、丢包隐藏、PLC、融合等)。最后将 DSP 处理完的数据填入到 sync_buffer_ 中待扬声器播放,并从 sync_buffer_ 中取 10ms 音频数据进行播放。

  若经过加减速操作,国外服务器租用需要从 filtered_level 中消除加减速操作后引入的延时变化,如下所示:

  当前数据包丢失或者还未到达时,同时在 sync_buffer_ 待播放的音频数据小于 10ms 时,则满足下面 4 个条件中任何一个,都将执行 expand 操作。

  基音是指发浊音时声带振动所引起的周期性对应的信号基本谐波,基音周期等于声带振动频率的倒数。一般的声音都是由发音体发出的一系列频率、振幅各不相同的振动复合而成的。

  这些振动中有一个频率最低的振动,由它发出的音就是基音,其余为泛音。基音携带了大部分能量,决定了音高。

  基音的周期提取,一般使用短时自相关函数,因为自相关函数一般在基于周期上表现出有极大值的特点。在 NetEQ 的 DSP 信号处理中,基音的提取是一个至关重要的步骤。

  对语音的拉伸变速,有时域方法和频域方法。时域方法计算量相对频域方法少,适合 VoIP这种场景;频域方法适合频率激烈变化的场景,如音乐。

  NetEQ 中对语音的拉伸(加速或减速)使用的是 WSOLA 算法,即通过波形相似迭加的方法来变速;该算法在拉伸语音时能够保证变速不变调。同时该算法是时域算法,对语音有比较好的效果,下图是其大致原理和流程:

  NetEQ 中,当 sync_buffer_ 和 packet_buffer_ 中的待播放数据总延时堆积过多,且前一帧和当前帧都正常时,需要通过加速播放操作,来降低抖动缓冲区待播放的数据量,以达到降低时延的目的,否则容易导致抖动缓冲区溢出,出现丢包。而加速是要求变速不变调的,WSOLA 算法通过寻找相似波形并对相似波形进行迭加来实现变速目的。

  当 NetEQ 抖动缓冲中待播放的数据延时水平小于目标延时下限时,说明待播放的数据量小,为了达到播放端的最佳音质体验,需要将现有数据拉伸,适当增加播放数据量;这和加速是相反的操作,底层技术相同。同样下面对其做简要分析:

  当前包丢失时,在 NetEQ 中会触发丢包补偿来预测丢失的包;丢包补偿有两种方式,一种是通过编解码器来预测重构丢失的包,另一种是通过 NetEQ 模块来预测重构丢失的包;对应分别是 kModeCodecPlc 和 kModeExpand。

  不论是何种模式,前提要求是 sync_buffer_ 中待播放的音频数据量小于当前请求要播放的数据量,才能执行该操作;丢包补偿通过最近的历史数据,来重构 PLC 相关参数,然后通过历史数据和 PLC 相关参数进行线性预测,恢复丢失的包,最后再迭加一定的噪声。

  当连续多次 PLC 操作时,失真将会加大,所以多次操作后,黑客证书将会降低 PLC 语音能量值。

  PLC 操作中,首要任务是计算基音周期,这里使用了自相关计算和信号失真计算两种方式来计算基音周期,可通过下图简要说明。

  B 为滑动窗口,窗口包含 60 个样本信号,窗口起始位置滑动范围[0, 54]

  通过计算 A 和 B 的自相关系数,得到 54 个自相关结果,对这 54 个自相关结果使用抛物线拟合找到三个最大值的位置 peak1_idx1、peak_idx2、peak_idx3 为三个自相关系数最大的值的位置

  取末端 20 个信号作为 A,滑动窗口 B 也是 20 个样本(2.5ms),B 在距 A 一个基音周期前后 4 个样本范围内(0.5ms)滑动

  在得到基于自相关计算出来的三个基⾳周期 T1,T2,T3 和基于失真度最小得到的三个基⾳周期 T1,T2,T3

  通过比较这三对的 ratio = 自相值/失真度,当 ratio 最大时,则认为这对基音周期最佳

  构造 AR 滤波器参数,通过获取一组(7 个)自相关值,国外服务器租用对这组自相关值通过 LevinsonDurbin 算法计算,预测出 AR 滤波器参数。

  AR 滤波器是线性预测器,通过历史数据来预测当前数据;在构建 PLC 包时,通过对历史数据进行 AR 滤波,来预测丢失的包信息。

  这里 k = 7;e(n)为预测值和实际值的误差;AR 滤波就是通过使用最近的历史数据来预测当前时刻数据;LevinsonDurbin 算法通过自相性值的计算来预测 ck,使得 e(n) 最小。

  上一帧是通过预测生成的 PLC 包,和当前帧需要做平滑处理,防止两种衔接出现明显变化;

  当前帧可以正常播放,也就是可以直接将这段信号送⼊到 sync_buffer_ 中, 但是因为上一帧可能是 expand 等,需要进行相关的平滑操作。

  NetEQ 为了消除抖动、解码音频数据、对解码数据进行 DSP 处理(加减速、PLC、融合、平滑数据),以及平滑播放等,使用了多个缓存 buffer,下面是对这些 buffer 的简要说明:

  用来接收网络中收到的音频包数据,也可称为抖动缓存,会定时删除当前时间 5 秒前的包,同时最多缓存 200 个包,即 4 秒(这⾥以每个包 20ms 计算)。

  : 当播放线程每次获取音频数据来播放时,会根据目标延时和抖动缓存延时来判断是否需要从 packet_buffer_中获取音频数据进行解码,解码后的数据存放到 decoded_buffer_中。最多可缓存 120ms 数据。

  : decoded_buffer_中的数据经过 DSP 处理后,将存放到该缓存,一般每处理一次会清空一次。

  : 一般是从算法缓存拷贝过来的数据,是待播放的数据;sync_buffer_中有两个变量,一个是 next_index,表示当前播放的位置,next_index 前的数据表示已经播放,后面的数据表示待播放;另一个是 endtimestamp, 表示 sync_buffer_中最后一个待播放的数据,也就是最近的音频数据量。

  该 buffer 可最多缓存 180ms 数据,是一个循环缓存;播放线程每次会从 sync_buffer_中取 10ms 数据进行播放。

  NetEQ 能很好地跟踪网络抖动,同时在消除抖动时保证延时尽量小,对音频体验提升明显;结合上一篇关于弱网对抗的一些技术,可明显提升音频在弱网环境下的体验。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

天眼测评网_VPS测评推荐网站 国外VPS推荐 WebRTC 音频抗弱网技术(下)国外服务器租用ssl证书安装 https://www.tyidc.com.cn/21578.html

常见问题

相关文章

评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务