PCM、G.729等常用VoIP编码的实际带宽计算

我觉得通信背景的同学,一提到PCM编码,脑海里都能跳出来一个数值64k。

一、64KB还是64Kb?

64Kb!

二、哪里来的64Kb?

CCITT规定抽样率为每秒8000KHz,每抽样值编8位码,所以每秒共采集64Kbit数据。

三、PCMA和PCMU

就是对采集到的64Kbit按照不同的对数压缩特征(A率和μ率)进行编码。
编码后的数据大小仍然是64Kbit(所谓的无损编码?)。

四、160字节是怎么来的?

经常听过“每包数据长度是160字节”,哪里来的?
上面已经知道,使用PCM编码,每秒产生64000bit数据。
转化成字节,就是64000bit/(8bit/字节)=8000字节。

好了,下面需要考虑怎么把这8000字节数据发送出去了。

五、这每秒产生的8000字节数据你打算怎么处理?

你可以选择先什么都不做,等一秒结束,编码出所有的数据,然后把这一个包全部发出去,那这一个包就是8000字节。
你也可以选择,每等待100ms,编码一次数据,然后把这一个包发送出去,那这一个包就是8000字节/(1000ms/100ms)=800字节。
你也可以选择,每等待10ms,编码一次数据,然后把这一个包发送出去,那这一个包就是8000字节/(1000ms/10ms)=80字节。
你的等待时间就是打包周期,把一个周期的数据放到一个数据包里就叫打包。

等等,说了半天还是没出现160字节。

六、160字节找出来了!

当打包周期是20ms的时候,一个包就是8000/(1000ms/20ms)=160字节。
这么巧,20ms也是PCMA最常用的打包周期,G.729也是。

七、如何封装这一包160字节?
1. 封装在哪种消息协议发送出去呢?

RTP(消息头格式定长12*8=96bit)

2. RTP承载在什么传输协议?

UDP(消息头格式定长8*8=64bit)

3. 通过何种IP网络传输?

IPv4(消息头格式定长20*8=160bit)//也可以是IPv6

4. 承载在什么物理网络上?

Ethernet II(消息头格式定长14*8=112bit)

八、封装后一个包有多长?

以太网头 + IP头    + UDP头 + RTP头 + 语音数据  = 数据总长
112bit  + 160bit + 64bit + 96bit + 160*8bit = 1712bit

九、封装后的1712bit的数据包一秒要发多少个?

打包周期是20ms,一秒要发1000ms/20ms=50个。

十、带宽出来了!

1712 bit/个 * 50 个/秒 = 85600 bit/秒 = 85.6 Kb/秒

附录、G.729的带宽呢?
1. 这个编码算法厉害了,每秒只产生8000bit语音数据。
2. 通常的打包周期也是20ms,每个包的语音数据是8000bit/(1000ms/20ms)=160bit。
3. 一个包长

以太网头 + IP头 + UDP头 + RTP头 + 语音数据 = 数据总长
112bit + 160bit + 64bit + 96bit + 160bit = 592bit

4. 所需带宽

592bit/个 * 50 个/秒 = 29600 bit/秒 = 29.6 Kb/秒

5. 几句废话

G.729编码数据量是PCM的1/8!而且语音质量好!难道完爆PCM编码?想多了,这个编解码需要花费更多的CPU资源。

工作了这些年,越来越体会到,不存在完美的东西,只有指定条件下的相对合适的存在罢了。

理论计算结束了,实际所占带宽是多少呢?需要各种流量监控软件去统计和观察了。

原文地址:https://www.cnblogs.com/yoyotl/p/8489362.html

时间: 2024-10-02 20:19:39

PCM、G.729等常用VoIP编码的实际带宽计算的相关文章

G.729

G.729语音压缩编译码算法 采用算法是共轭结构的代数码激励线性预测(CSACELP),是基于CELP编码模型的算法:能够实现很高的语音质量(长话音质)和很低的算法延世:算法帧长为10ms,编码器含5ms前瞻,算法时延15ms:其重建语音质量在大多数工作环境下等同于32kb/s的ADPCM(G.726),MOS分大于4.0:编码时输入16bitPCM语音信号,输出2进制比特流:译码时输入为2进制比特流,输出16bitPCM语音信号:在语音信号8KHz取样的基础上,16bit线性PCM后进行编码,

VoIP常见编码的带宽计算

voip带宽计算VOIP计算方法与所选用的编码方法有关,而与哪个厂家的没有什么关系,公式如下: 带宽=包长度×每秒包数=包长度×(1/打包周期)=(Ethernet头+IP头+UDP头+RTP头+有效载荷)×(1/打包周期)=(208bit +160bit+64bit+96bit +有效载荷)×(1/打包周期)=(528bit+(打包周期(秒)×每秒的比特数))×(1/打包周期)=( 528 / 打包周期 ) + 每秒比特数 根据各种编码方式,得出: G711:20ms打包,带宽为 ( 528/

gcc/g++ 命令的常用选项

gcc/g++ 命令的常用选项格式(选项 解释) -o FILE 指定输出文件名,在编译为目标代码时,这一选项不是必须的.如果FILE没有指定,缺省文件名是a.out. -c 只编译生成目标文件,不链接 -m486 针对 486 进行代码优化. -O0 不进行优化处理. -O 或 -O1 优化生成代码. -O2 进一步优化. -O3 比 -O2 更进一步优化,包括 inline 函数. -w 关闭所有警告,建议不要使用此项 -Wall 允许发出gcc能提供的所有有用的警告,也可以用-W(warn

G.711与G.729语音带宽的计算方法

我们知道G.711与G.729的带宽分别是80Kbps和24Kbps.记住这两个已经足够了,但如果进一步了解了它们的来由则更好. 恩奎斯特原理规定声音的采样频率是每秒8000次,每次8bit,语音数据带宽就是64Kbps(8000*8).正常语音包是10ms成帧一次,每两帧 成一个包 (20ms).这样,每秒就成50个包(1000/20).每个包的IP头是20byte,UDP头8byte,RTP头12byte,总共40byte,或 320bits(40*8).50个包就是16000bits(32

java中的常用字符编码ASCII、Unicode和UTF-8

首先讲一下几种字符的编码方式: 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111. 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定.这被称为ASCII码,一直沿用至今. ASCI

常用字符集编码详解:ASCII 、GB2312、GBK、GB18030、UTF-8、unicode

ASCII ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字符.只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位.HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码.早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式.GB2312 GB2312是基于区位码设计的,区位码把编码表分为94个区,每个区对应94

常用的编码(持续更新)

rot ROT5 是 rotate by 5 places 的简写,意思是旋转5个位置,其它皆同.下面分别说说它们的编码方式: ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6,以此类推顺序循环. ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O,以此类推顺序循环. ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼

Android中常用的编码和解码(加密和解密)的问题

1. URL Encoding     编码目的是为了在?址上可以包含中文等特殊字符解码是为了把编码后的内容还原成原始的内容格式如下%9C%3C%F3%98 规则: %hex_byte 就是将实际的字节转换为十六进制进行显示编码URLEncoder.encode(String str, String charset) 解码 URLDecoder.encode(String str, String charset) eg.    %E6%88%91%E6%98%AFvhly%EF%BC%8C%E4

自己常用的编码转换工具。

ASCII转换模块: 在还原时,如果还原一个,则在改ASCII数值后加个空格 MD5模块: 采用Delphi自带的 IdHashMessageDigest5 加密方式 Base64模块: 采用Delphi 自带的 EncdDecd 单元加密解密函数,但是好像2种加密效果都一样. 雷池加密解密模块是根据VB版的翻译过来的. 下载地址: http://down.51cto.com/data/2242638