实时通话的质量评估
From: 声网:实时通话的质量评估
1.传统的学术指标
丢包、抖动、延时是影响语音质量的3个网络传输指标。
在http://scholar.google.com 上搜索voip+qos,论文中大都会先对丢包、延时、抖动做如下定义解释:
丢包
记N(send), N(recv)分别为发包、收包个数 loss = (N(send)-N(recv)) / N(send) * 100%
延时
记s(i), r(i)分别为第i个包的发送、接收时间戳 记d(i) = r(i) - s(i)
抖动
jitter(i) = d(i+1) - d(i)
2.指标的实用性
实用的的指标,需要满足指标和结果有很强的相关性。例如:
同样体重60kg,一米八的同学就偏瘦,一米六的同学就偏胖。体重作为肥胖程度的指标,不合理。
实践中,同样是丢包0%,有些通话非常流畅,有些通话非常卡顿。延时、抖动也有同样的问题。
什么样的指标才能更实用的评估语音质量呢?为了便于理解,先插入一段背景知识介绍。
3. jitterbuffer的原理
从接收端,播放效果看有两个指标:播放丢帧、播放延时.
为了消除抖动,webrtc的接收端设置了动态jitterbuffer。
抖动经过jitterbuffer之后有两种结果:
image.png(1) jitter > jitterbuffer.length ==> 播放丢帧
(2) jitter < jitterbuffer.length ==> 播放延时
4.Agora网络指标定义
(1) 抖动
记s(i), r(i)为第i个包的发送、接收时间戳,令d(i) = r(i) - s(i)
以2秒为一个统计周期,D = {d(i) | i ∈ 2秒内收到的包序号集合 }
对集合D做从小到大排序,得到D(sorted)。对D(sorted)中每个元素,减去D中最小值min(D),得到新的集合 D(jitter)。现在,D(jitter)中元素含义就是,2秒内所有语音包传输耗时,相对最快那个语音包的偏移。继续看这里看这里:
D(jitter)中最大的元素含义是:如果jitterbuffer拉长至这个值,就能够成功播出2秒内所有收到的语音包。
D(jitter)中第95%大的元素含义是:如果jitterbuffer拉长至这个值,就能够成功播出95%的语音包,而主动丢弃5%的语音包。
D(jitter)中第90%大的元素含义留个作业。
根据最后这3点我们引入3个概念:jitter100, jitter95, jitter90。以时间序列为横轴,jitter(毫秒)为纵轴,我们能够得出三条抖动曲线:
(2) 丢包
2秒内应该收到的包个数,计为CountTotal。
D(jitter)中全部元素个数为CountAll。
D(jitter)中的元素 < 400ms的个数,记为Count400。
<800ms的个数记为Count800。
由此引入三个概念:
Lost400 = (CountTotal - Count400) / CountTotal * 100% 表示没有在400ms内到达的包的比例。这部分包可能是永远丢了,也可能是晚于400ms内到达。
Lost800 = (CountTotal - Count800) / CountTotal * 100% 表示没有在800ms内到达的包的比例。
LostAll = (CountTotal - CountAll) / CountTotal * 100% 表示一直没有收到的包的比例。这个与学术上丢包的定义相同。
同样以时间序列为横轴,Lost(%)为纵轴,得到三条丢包曲线;
image.png
上图能够清晰地回答为什么按照传统丢包定义不能准确反映语音质量:LostAll一直是0%,但是Lost400多次超过20%。
(3) 链路延时
在jitter部分已经充分计算了抖动数据。延时定义如下:
链路延时是发送端与接收端的物理链路延时最小值,不考虑抖动带来的影响。
具体计算时根据ping包,选取一个滑动窗口中最小的几个RTT的均值除以2来估算。
5. 通话质量评分
通话质量评分分为两种:
(1)侵入式:
电信行业常用的MOS值。需要获取接收方的录音,甚至还需要发送方的录音,在此基础上做信号处理分析,以及人耳主观评分。
2()非侵入式
不需要拿到语音包,仅仅根据网络传输指标来估计通话质量
工程上显然非侵入式评分更实用。现在我们可以利用Agora重新定义的网络指标,参考MOS值设计这样一个评分工具:输入一个通话的lost400和jitter95的数值序列,返回通话的评分:
5分:质量非常好
4分:质量比较好,偶尔有卡顿
3分:质量一般,卡顿较多,但不影响交流
2分:质量较差,有些时候影响交流
1分:质量非常差,影响交流
熟悉数据挖掘的童鞋不难看出这是一个分类问题。Agora的音频工程师会做数据挖掘、机器学习不断训练和矫正分类器,用于Agora的质量分析与监控。
6. 质量评估小结
质量评估的目的是:一方面是通过网路传输指标,评估通话质量;另一方面为了实现流畅的通话,我们也可以明确需要网络达到什么标准
传统的学术论文使用丢包、延时、抖动来分析网络,这三个定义工程上并不实用。
考虑到jitterbuffer,Agora重新定义了jitter, lost, delay,可以基于Agora的网络指标,对通话质量进行评分。