博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PCM、G.729等常用VoIP编码的理论带宽计算
阅读量:5889 次
发布时间:2019-06-19

本文共 1508 字,大约阅读时间需要 5 分钟。

可能通信背景的同学,一提到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资源。

工作了这些年,越来越体会到,不存在完美的东西(方案,编程语言,算法。。。),只有指定条件下的相对合适的存在罢了。

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

 

转载地址:http://owfsx.baihongyu.com/

你可能感兴趣的文章
oracle运维-常用SQL
查看>>
AngularJS第一课:Hello AngularJS
查看>>
Java基础知识回顾-8
查看>>
我的友情链接
查看>>
如何在Oracle中使用Java存储过程 (详解)
查看>>
C语言词法分析器
查看>>
简约而不简单的Django新手图文教程
查看>>
系统主要配置文件
查看>>
IOS中的简单排序实现
查看>>
用面向DD-WRT的高级提示和技巧向无线路由器添加Linux功能
查看>>
我的友情链接
查看>>
Xen4.0环境下安装虚拟机
查看>>
F5 DDoS防护战略及可靠和安全的配置
查看>>
开源中国iOS客户端学习——(十四)使用EGOImageLoading异步加载图片
查看>>
怎样安装collabtive中文版?
查看>>
odoo 负载均衡
查看>>
tigerVNC 使用简介
查看>>
GCD
查看>>
科大讯飞 语言听写去掉标点 iOS
查看>>
Mybatis 学习笔记四 MyBatis-Plus插件
查看>>