![](http://www.ctiforum.com/uploadfile/2017/0110/20170110023704872.jpg)
在语音通话过程中影响语音质量的两个主要问题是语音时延和抖动。Asterisk中的语音时延和抖动也和其他的PBX一样,同样是因为某些网络原因,设备原因和传输编码造成的这些问题。
视频中介绍了时延出现的原因,抖动的原因和如何防止这些问题的发生:
因为视频介绍的仅是几个相对简单的问题和环境,为了在实际部署Asterisk时能够有效的防止这些问题的发生,笔者认为有必要和大家简单介绍一下关于时延的概念,时延形成的原因,抖动形成的原因,和其他相关测试工具。
- 时延(Latency)简单来说就是因为在语音数据传输过程中,因为很多中间处理环境和设备需要经过数据处理多次转发引起的时间延迟。这些数据看起来到我们服务器时非常快,事实上,如果经过了不同网络,不同地区或者国家,就会导致一个时延。这个时延如果在一定合理的范围内,语音质量就不会受影响。但是,如果超出了一定的范围,语音质量就会降低,最后影响了用户体验。图例中介绍了数模转换消耗的时间,数据收发时间和编码转换消耗的时间。
![\](http://www.ctiforum.com/uploadfile/2017/0120/20170120110318500.jpg)
![\](http://www.ctiforum.com/uploadfile/2017/0120/20170120110339650.jpg)
- 时延形成的原因。如上图所示,时延形成的原因很多,它们主要包括模拟语音数字语音处理过程,网络设备传输消耗的时间,网络交换路由导致的时延,语音编码转换消耗的时间。通常情况下,这些都是客观存在的因素。但是,我们尽可能想办法降低这些时延带来的风险,例如,建议用户使用质量好的网络设备,尽可能使用同一语音编码,好的线路。
![\](http://www.ctiforum.com/uploadfile/2017/0120/20170120110400139.jpg)
- 抖动(Jitter)简单来说就是因为网络传输过程中,数据包发送时长不一致,不统一,数据包大小不一致,导致的语音数据状态不稳定。通常情况下,可能是网络传输设备中的路由路径不同,或者数据抵达时间不一致,线路拥塞导致的数据不能正常收发,到达目的地以后数据,数据包大小不一致。很多时候也可能是时间戳错误,服务器端认为是不正确的数据包,可能丢弃或者重新发送。在Asterisk中,几个通信接口都支持了jitter buffer,采用了buffer 队列的算法来优化抖动问题。用户可以在sip,IAX或者SS7 的配置文件中做相应的调整。在下面的其中一个图例中,大家可以看到,正常的低抖动的环境下,数据包大小基本一致(100,100,100);但是在抖动严重的环境下,数据包大小不一致(50,150,100)。这样,Asterisk可能丢弃过于小的数据包,并且通过Buffer来进行数据的优化处理。
![\](http://www.ctiforum.com/uploadfile/2017/0120/20170120110457445.jpg)
![\](http://www.ctiforum.com/uploadfile/2017/0120/20170120110510367.jpg)
使用开源工具在Asterisk环境下测试时延的方式。比较幸运的是,开源社区很多技术人员已经开发了测试系统时延的一些工具,asterisk 作为一个实时的语音系统,可以作为一个测试手段帮助用户排查Asterisk服务器本身的问题。以下是Asterisk 环境下,使用Linux 工具的安装运行方式:
![\](http://www.ctiforum.com/uploadfile/2017/0120/20170120115304109.jpg)
- 使用第三方工具排查时延问题。根据很多用户建议的说法,一般来说,时延在< 150 ms 是可以接受的范围;抖动在< 10 ms 以下是可以接受的范围。这是一个基本的判断。如果满足以上两个条件,基本上一般的语音质量都可以得到保障。当然,作为专业的技术人员,我们建议用户使用一些专业的VoIP测试工具来通过数据来检测我们实际的工作环境。通常情况下,如果用户环境需要部署Asterisk时,你可以根据用户人数,网络带宽,语音编码计算一个合理的结果。这样,管理员部署时才能做到心中有数。
![\](http://www.ctiforum.com/uploadfile/2017/0120/20170120110536721.jpg)
![\](http://www.ctiforum.com/uploadfile/2017/0120/20170120110553111.jpg)
- 其他相关问题。VoIP领域涉及语音质量的因素很多,也包括其他的相关的问题,例如MOS,Packet Loss,Echo,VAD,Silence Suppression和CNG等等。这些参数中,有的在Asterisk中本身没有支持,例如VAD。有的需要终端配合检查设置。这些参数很多时候也影响了语音质量,如果用户需要做一些测试的时,笔者也建议也尽可能考虑这些相关的参数。
本章节介绍了时延的基本概念和原因,也介绍了抖动的形成和处理方式。另外,为了帮助用户能够使用有效的工具排查这些问题,笔者也介绍了几个工具。因为影响语音质量的相关因素很多,篇幅的限制,我们罗列了这些相关的参数,希望能够给读者一个关于语音质量问题的比较全面的了解。