跟着网络技能的快速开展,VoIP技能得到了广泛的运用。特别是在局域网环境下,VoIP凭仗其运用快捷,价格低廉的长处,已经成为了人们即时沟通的首要方法之一。从实践运用作用来看,时延成为影响VoIP话音质量的关键要素。ITU-TG.114规则,关于高质量语音可承受的时延是300 ms。一般来说,假如时延在300~400 ms,通话的交互性比较差,但还能够承受。时延大于400 ms时,则交互通讯十分困难,所以怎么确保音频实时传输已经成为VoIP技能中首要处理的问题之一。
本文首要介绍了VoIP原理和根本完结流程,然后对以太网环境下实时音频传输进行了试验研讨,剖析了缓冲区设置和音频API调用对音频时延的影响,并依据剖析成果,提出了处理以太网音频时延的对策。
1、VoIP原理及其依据PC渠道的完结流程
VoIP的根本原理是:发送端经过语音的紧缩算法对收集到的原始语音数据进行紧缩处理,然后把这些紧缩后的语音数据按TCP/IP规范进行打包,经过IP网络把数据包发送至接纳端;接纳端将分组话音重组,经过解压处理后,康复成本来的语音信号,然后抵达由网络传送语音的意图。
图1为依据PC渠道的VoIP完结流程。如图所示,依据PC渠道的VoIP运用的根本完结包含接纳模块、发送模块和网络传输三部分构成。其间,发送模块首要由音频收集、音频编码、分组话音封装等部分组成。接纳模块的完结进程一般由发送模块的逆进程构成,首要包含分组话音的接纳,音频解码及音频播映等部分组成。
图1 依据PC渠道的VoIP完结流程
下面别离介绍各部分功用以及惯例的完结方法。
音频收集和播映模块首要对音频信号进行收集和回放操作,完结模仿语音和数字语音之间的转化。它首要经过音频API函数来完结其功用。在Windows操作体系中,常见的音频API函数有:WaveX、DirectSound和ASIO等。
音频编码与解码模块首要完结对语音数据的紧缩与解压功用。在发送端因为收集到的原始语音数据量比较大,需求对原始语音数据以特定的音频格式进行紧缩编码。同理,在接纳端需求对接纳到的语音数据进行解压复原。在Windows操作体系中,ACM(Audio Compression Manager,音频紧缩办理器)办理着体系中的一切音频编码译码器(CODEC),担任对语音数据进行紧缩与解紧缩。CODEC是一小段用于紧缩(Compress)及解紧缩(Decompress)数据流的代码。CODEC能够是由操作体系自身顺便的CODEC,也可由体系中所装置的运用程序装置其他的CODEC。
分组话音封装和分组话音接纳模块首要是为紧缩后的语音数据加上相应的报头,使其成为一个语音包,然后送给传输模块。TCP/IP协议体系中有两个不同的传输层协议,别离是面向衔接的传输操控协议TCP和无衔接的用户数据报协议UDP。这两种协议的不同之处在于UDP供给无衔接的服务,在传输数据之前不需求先树立衔接,长途主机接纳到UDP数据后,不需求给出任何承认;而TCP则供给面向衔接的服务,在传送数据之前有必要先树立衔接,数据传送完毕后要开释衔接。关于音频运用来说,一般运用UDP协议。这是因为尽管UDP协议不供给过错重传的功用,可是它能够确保音频数据的实时性。
网络传输模块便是将封装好的IP语音数据包从发送端发往接纳端。在Windows操作体系中,首要经过Winsock函数来完结。
2、缓冲区巨细与时延的联系
缓冲区巨细与时延有着亲近的联系。一般来说,缓冲区大时,时延较大,可是能够有效地进行失序重组等操作,话音质量较好;缓冲区较小时,时延较小,但因为缓冲并没有很好地消除时延颤动等要素,导致话音质量较差。所以要将缓冲设为适宜的巨细,使得时延较小,一起又保持着较好的语音质量。
试验程序是咱们前期编写的PCtoPC的VoIP程序,是由VC++编写的,运用低阶的音频API-WaveX函数来完结音频的收集和回放;运用ACM来进行语音的紧缩宽和紧缩;运用Winsock来进行网络通讯。试验程序完结了网络语音传输的根本功用,程序中收集和回放缓冲区巨细相同,个数均为2,选用乒乓制。
咱们在以太网环境下对缓冲区巨细与端到端时延的联系进行了丈量。其间端到端时延丈量的思路是:运转程序,从麦克风输入一个鼓励,从耳机端得到一个输出,假如能取得两者时刻之差即为端到端时延。能够在本机拨打本机运转测验,这样不需求考虑同步的问题,而且因为测验环境依据100Mbit/s以太网链路,链路传输时延为微秒级,能够忽略不计,所以本机环回测验得出的成果根本能够表征端到端时延。丈量的详细方法是经过示波器,发生一个恰当的信号,模仿语音输入,然后调查输出,得到两者时延。测验程序中运用的编解码算法是GSM610,参数为 11.025kHz的采样频率,8位单声道方法,音频API为 WaveX的状况下进行了丈量,试验成果如表1所示。
表1 缓冲区巨细与时延联系
缓冲区巨细(byte) 512 768 1024 1536 2048 4096
语音的时长(ms) 46 70 93 140 196 392
测得的端到端时延(ms) 约350 约400 约500 约600 约700 约800
在上述测验环境中,每个样本点量化为一个字节,采样频率为11.025kHz,每秒钟发生的原始语音数据的巨细为11025字节。语音的时长为缓冲区巨细除以11025,所以语音时长也应是缓冲区时延。
在试验中,咱们发现,当缓冲区为512字节时,尽管能够取得较小的缓冲时延,但此刻话音的停顿感十分显着,音质很差。而假如将缓冲区设置为768字节,那么音质能够得到显着改进,可是并未添加多少打包时延,因此在后期试验中咱们将缓冲区设置为768字节。
从表1中能够看出,当缓冲区增大时,时延显着增大。但当缓冲区适当小(512字节)时,时延并没有显着下降,稳定在350ms左右,而相应的语音时长只要53ms。显着,除了缓冲区打包和传输之外,VoIP传输通路中的其他要素也引进了较大的时延。本文的第三部分将对端到端时延的详细构成作详细剖析。
3、以太网环境下时延的构成
VoIP中的时延存在于整个IP电话的各个环节,如图2所标明,能够大致分为4个部分:(1)音频收集和播映时延。为音频API引起。(2)缓冲时延。缓冲时延是发送端缓冲区中扫除等待时刻和接纳端拆包时引进的时延。如本文第2节中试验所示,缓冲时延与缓冲区巨细有关。(3)语音编/解码时延。由语音编码算法引起,依据不同的算法,其值也不同,但间隔不大,经验值在5~40ms之间。(4)网络传输时延。网络传输时延是数据经过网络传输抵达意图地所需的时刻。
图2 VoIP时延散布
因为以太网带宽较大间隔较近,网络时延一般状况下小于1 ms,能够忽略不计,所以在局域网环境下的VoIP的时延首要是由语音编/解码时延、打包/缓冲时延和音频收集和播映时延构成的。
为了进一步确定在以太网条件下VoIP各部分时延的散布状况,咱们经过运用QueryPerformanceCounter函数在试验程序中设置时戳进行了详细的试验剖析。QueryPerformanceCounter函数能够准确的计时。咱们在本机进行环回通话测验,编解码方法为 GSM610,参数为11.025kHz的采样频率,8位单声道方法,缓冲区为768字节,音频API为WaveX的状况下,对程序的音频收集部分,紧缩部分,解压部分,音频回放部分进行了时延丈量。试验中原始音频数据为一个缓冲区巨细。试验成果如表2所示:
表2 选用WaveX的程序各部分时延构成
音频收集时延 紧缩时延 解压时延 音频回放时延
约180ms 约5ms 约5ms 约200ms
咱们经过将各部分时延相加,可得到端到端时延约为390ms。这与本文第2节中的试验成果根本共同,阐明咱们的试验成果是可信的。依据试验成果,咱们能够看出时延的首要组成来自于音频收集时延和音频回放时延,别离除掉缓冲区时延(语音时长)93ms后,还有约200ms,这部分应为低阶音频 API-WaveX所导致的。
4、处理以太网时延对策剖析
依据第3节的试验成果,为了缩小时延,咱们有必要考虑运用性能的更好的音频API。
咱们对程序进行了修正,运用DirectSound代替WaveX进行音频的收集和播映。WaveX没有硬件加速功用,CPU利用率较高,延时较大。DirectSound是DirectX API的音频组件之一,它能够供给快速的混音,硬件加速功用,而且能够直接拜访相关设备。DirectSound答应进行波型声响的捕获,重放,也能够经过操控硬件和相应的驱动来取得更多的服务。DirectSound与WaveX比较技能较新,功用强大,能够支撑混音,硬件加速操作,收集和播映时发生的延时较小。
下面扼要介绍一下完结DirectSound的过程:DirectSound收集声响流程如图3所示,其间 DirectSoundCaptureEnumerate函数用来枚举体系中一切录音设备,DirectSoundCaptureCreat函数创立造备目标,然后经过CreatCaptureBuffer函数来创立一个录音的缓存目标,Se tNotificationPositon函数用于设置告诉位,以便定时的从录音缓存中复制数据。DirectSound播映声响流程如图4所示,其间DirectSoundCapture、 DirectSoundCreat和CreatSoundBuffer函数也是做一些初始化的作业。Lock函数用于锁住缓存的方位。然后经过 WriteBuffer函数将音频数据写入缓冲区,写完后再经过UnLock函数解锁。
图3 收集声响流程 图4 播映声响流程
咱们在与第3节相同的试验环境下,对选用DirectSound的程序进行了时延丈量,经过示波器测得的端到端时延约为250ms左右,时戳丈量的成果如表3所示。
表3 选用DirectSound的程序各部分时延构成
音频收集时延 紧缩时延 解压时延 音频回放时延
约120ms 约5ms 约5ms 约130ms
依据试验成果,咱们能够看出选用DirectSound的程序时延要显着小于选用WaveX的程序。
此外,还能够选用ASIO(Audio Stream Input Output,音频流输入输出接口)方法。ASIO能够增强声卡硬件的处理才能,极大的削减体系对音频流信号的推迟,ASIO的音频收集时延可缩短为几个毫秒。但其需求专业声卡的支撑,运用杂乱,完结起来比较困难。
5、完毕语
本文对局域网环境中的VoIP运用进行了端到端时延剖析,并经过试验验证了以太网环境下音频传输时延首要由缓冲区时延和API调用时延构成的,其间最首要的部分是API调用时延。所以,在进行以太网VoIP运用体系开发时,要要点考虑优化上述两部分的完结战略以进步话音质量。