-
VOIP
语音引擎
编解码器的选择或设计,
往往都要考虑带宽占用情况的估计。
语
音都是分帧来处理,
标准编解码器的帧长是一定的,
帧长往往决
定了语音编解码器的算法延时值。
编解码器的算法是
VOIP<
/p>
语音时延众多因素的一种。语音变成
RTP
包往往是时延中很关键的因素。如以语音编解码器的一帧
为单位进行打包,那会导致二
个问题:一是包太多,会导致服务器处理不了;二是
包头和相
关的控
制位消耗太多的带宽;一个好处:消除了打包可能造成的时延和丢包对语音音质的
影响
.
在这引用一下
(
内容基本正解
)
,主要是
展示一下
RTP
包对带宽占的影响。
不论在呼叫控制信令上采用何种协议,语音包的传输基本上都
基于
RTP
(
real-time
transport
protocol RFC
1889
/
RFC 3350
)协议在
网络上传输。这是一种为传输实时媒体流而由
IETF
制定的<
/p>
协议。
几乎
所有的
VoIP
相关产品,都利用
RT
P
收发语音信息。语音包的结构如下所示,在
IP
层上封装
后被送出到网络上,
Payload
部分的信息量多少取决于所采用的编码方式。
一般说来,在
VoIP
的世界里采用
G.729
编码的较多,而在运营商提
供的
IP
电话服务中则是
G.711<
/p>
较多。
G.711
是在
< br>ISDN
网中也被使用的
CO
DEC
,音质较好,但与
G.729
相
比信息量较多。而
G.729
则是一种压缩率高且音质也较好的
CODEC
。在传输一路语音信息时,
G.711
所需的带宽是
64kbps
,
而
G.729
只需要
8kbps
。两者一般都以
20msec
间隔(这个间隔可变)发送数据包,因此我们可以推
算出实际的包大小。
p>
语音信息是一种模拟信号,而将语音转
换成数据包首先需要将模拟信号转换为数字信号(数
-
模转
p>
换)
。相信大家对此都有所了解,将模拟式的语音信息用数字式传输
的过程大致如下图所示。
现有的电
话交换网中采用的编码方式是
G.711
(
PCM
)
,在通话的两端必须采用同样的方式分别进
行编码
/
解码操作才能实现语音通话,这里的
编码
/
解码功能合称为
CODEC(C
Oder/DECoder)
。
Vo
IP
应用中常见的两种具有代表性的
CODEC
如下:
G.711
(
PCM
方式:<
/p>
PCM
=脉码调制
:
Pulse Code
Modulation
)
采样率:
8kHz
信息量:
64kbps
/
ch
annel
理论延迟:
0.125msec
<
/p>
品质:
MOS
值
4.10
G.729
(
CS-
ACELP
方式:
Conjugate Structure
Algebraic Code Excited Linear
Prediction
)
采样率:
8kHz
信息量:
8kbps
/
cha
nnel
帧长:
10msec
理论延迟:
15msec
品质:
MOS
值
3.9
接下来就以这两种
CODEC
为基础进行探讨。光使用
CODE
C
将语音信息数字化
还不算是将语音数据包封装完成。
为了完成封包工作,
VoIP
终端内置了被称为
DSP
(
Digital Signal Processor
)的芯片
。简单地说,
就是对模拟信号编码后产生的大量数字信息进行实时处理的芯片。
实际的封包过程,还需要使用
RTP
协议将语音数据包发送到网络上去。
RTP<
/p>
包中,包括载荷类别
(
CODEC
的类别)
、序列号(语音包的顺序)
、时间戳
(语音包的发送间隔)等信息,接受方就以这
些信息为基础将收到的数字信息还原为模拟
的语音信号。
(
4
< br>)计算语音数据包的大小和所需带宽
实际的语音信息在
IP
层上封装后的数据包格式如下。
IP Header(
)+UDP
Header(8Byte)+RTP Header(12Byte)+Payload(
净载部分,可变
长
)
将语音信息封装为
IP
包在
3
层以上就必然产生
40Byte
的额外开销,那么使用
G.711/G.729 CODEC
分
别以
20msec
周期封装语音信息包的话,所生成的包长度如
下。
G.711
时
每秒送出的包为:
1000
/
20msec
=
50pps
一路语音信息所需的带宽
64kbps
=
50pps
×
Payload
大小
Payload
大小
=
64000
/
50
=
1280bit
=
1
60byte
语音包的长度为
200byte
。
G.729
时
每秒送出的包为:
50pps
一路语
音信息所需的带宽
8kbps
=
50p
ps
×
Payload
大小
Payload
大小=
8000
/
50
=
160bit
=
20byte
语音包的长度为
60byte
。
在实际应用中具体应该使用哪种
CODEC
呢?仅从语音通话业务的角度来
看是用哪一种
< br>CODEC
都没有问题的。
但是,如果需要利用传真服务或是与
VoIP
< br>运营商互联的话,就必须使用
G.711
。而拥有多处分
支
机构的企业,用于分支间互联的往往不会是与
LAN
等同的
10/100Mbps
的线路。多数分支
甚至还在
用
128kbps
的线路互联
。
此时如果选择
< br>G.711
的话,光是语音信息就有可能把可用带宽消耗光。有些产品支持为不同
的连接
对象使用不同的
CODEC
。利
用这一功能,就可以做到在窄带连接上使用
G.729
,而在宽
带连接上使
用
G.711
。
如果采用这类产品,
为了统一运用管理策略,可以考虑使用
“
分支间采用
G.729
;<
/p>
同一
LAN
内采用
G.711
”
的设计。但如果有需要在分支间使用传真服务,
则必须在分支间也使用
G.711
。
此外,在进行带宽计算时,还必须考虑二层上的开销。具体到
采用以太网传输时,必须加上以太帧
的开销。
以太网传输所需的额外开销包括
前同步
(Preamble)
:
7byte
(为了通知
梦芭莎优惠券
发送开始而取同步的信号)
SFD
:
1
byte
(
Start Frame
Delimiter
:数据帧开始部分)
对端
MAC
地址:
6byte
源
MAC
地址:
6byte
协议:
2byte
(
< br>VLAN
时包含于
802.1q
)
802.1q
< br>:
4byte
(使用
VLAN<
/p>
时)
FCS
:
4byte
下面再举两个实例。
实例
1
:以太帧带
VLAN Tag
Preamble
:
7byte
SFD
:
1byte
对端
MAC
地址:
6byte
源
MAC
地址:
6byte
802.1q
:
4byte
(使用
VLAN
时)
FCS
:
4byte
根据实例
1
的计算可知,在使用
VLAN
功能的以太网上,每个三层的数据
包需要加上
28byte
的开销。
<
/p>
实例
2
:不带
V
LAN Tag
的以太帧
Preamble
:
7byte
SFD
:
1byte
对端
MAC
地址:
6byte
源
MAC
地址:
6byte
协议类别:
2byte
FCS
:
4byte
根据实
例
2
的计算可知,无
VLAN
环境下,每个
3
层包在以太网上需要的额外开销
是
26byte
。最后
来简单计算一下
不同
CODEC
下所需的实际带宽。
计算的前提是
RTP
包送出间隔为
p>
20msec
且
2
层上不使用
VLAN
,此时每个包需要附加还必须加上
40Byte
(
3
层以
上的开销)
+26Byte
(
2
层的开销)
=66Byte
的额外开销。而每
一秒钟共产生
50
个包