Chinaunix首页 | 论坛 | 博客
  • 博客访问: 698537
  • 博文数量: 112
  • 博客积分: 2486
  • 博客等级: 大尉
  • 技术积分: 1541
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-14 18:30
文章分类

全部博文(112)

文章存档

2012年(5)

2011年(48)

2010年(26)

2009年(33)

我的朋友

分类: LINUX

2011-09-27 14:43:17

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