pcma和pcmu pcm编码_PCM、G.729等常用VoIP编码的理论带宽计算_weixin_39942108的博客-程序员宅基地

技术标签: pcma和pcmu pcm编码  

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

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39942108/article/details/111515105

智能推荐

【记录】让list中的元素重复N次_漫漫科研路的博客-程序员宅基地

在这里插入代码片n = 10a = [1,2,3,4,5] b = a * nprint b #[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, # 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, # 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, # 1, 2, 3, 4, 5] c = []for i in a: for j in range(n

寒假囤题计划_weixin_30784501的博客-程序员宅基地

这个……呃,其实囤题计划早应该写起来的,但是最近我把博客园的密码忘记了好吧那就补一下。3.5.2018封档 — 322.14  1.luoguP1043数字游戏的 题解  2003pj:区间dp  2.luoguP2660zzc种田  pj- 水题2.15  1.luoguP2528[SHOI2001]排序工作量之新任务  未完成...

/etc/fstab 参数详解及如何设置开机自动挂载_weixin_30521161的博客-程序员宅基地

某些时候当Linux系统下划分了新的分区后,需要将这些分区设置为开机自动挂载,否则,Linux是无法使用新建的分区的。 /etc/fstab 文件负责配置Linux开机时自动挂载的分区。Windows的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区),如:C,D,E,F等。Linux的文件结构是单个的树状结构。最顶部的为根目录,即/。在根目录下,分为多个子目录,包括/...

.bash_profile 和 .bashrc 区别_shanliangliuxing的博客-程序员宅基地

转自:http://blog.csdn.net/tianlesoftware/article/details/5986506安装Oracle 11gRAC 的时候,文档上配置的是.bashrc参数。之前配置的都是.bash_profile 参数。从网上搜索了一下,他们的区别。 如下:  /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被

Linux Qt使用POSIX多线程条件变量、互斥锁(量)_dengsui0790的博客-程序员宅基地

今天团建,但是文章也要写。酒要喝好,文要写美,方为我辈程序员的全才之路。嘎嘎之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用条件变量同步线程的例子。故此来和大家一起分享,希望和大家一起交流。提到线程,如果在UI编程中,总会和一些耗时操作联系在一起。Qt中处理耗时操作通常有两种方式,一种是将耗时操作放在线程中;另一种则是使用QApplic...

报错apachectl restart_weixin_30708329的博客-程序员宅基地

httpd not running, trying to start(98)Address already in use: make_sock: could not bind to address [::]:80(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80no listening socket...

随便推点

tomcat 安全加固_houjibofa2050的博客-程序员宅基地

https://www.cnblogs.com/panwenbin-logs/p/8177523.html

安卓 net aes加密_xiaoerbuyu1233的博客-程序员宅基地

package com.bci.wx.base.util;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;/** * AES 是一种可逆加密算法,对用户的敏感信息加密处理 对原始数据进行AES加密后,在.

TensorFlow实现多层感知机MINIST分类_wujianming_110117的博客-程序员宅基地

TensorFlow实现多层感知机MINIST分类TensorFlow 支持自动求导,可以使用 TensorFlow 优化器来计算和使用梯度。使用梯度自动更新用变量定义的张量。本文将使用 TensorFlow 优化器来训练网络。前面定义了层、权重、损失、梯度以及通过梯度更新权重。用公式实现可以帮助我们更好地理解,但随着网络层数的增加,这可能非常麻烦。使用 TensorFlow 的一些强大功能,如 Contrib(层)来定义神经网络层及使用 TensorFlow 自带的优化器来计算和使用梯度。通过前面

统计单词(续)_weixin_30807677的博客-程序员宅基地

题目:第1步:输出单个文件中的前 N 个最常出现的英语单词。功能1:输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字典序排列。功能2: 指定文件目录,对目录下每一个文件执行统计的操作。 功能3:指定文件目录,是会递归遍历目录下的所有子目录的文件进行统计单词的功能。功能4:输出出现次数最多的前 n 个单词, 例如, 提示统计统计前多少名:输入10。 就是输出最常出...

java 内部类 构造函数_Java构造函数(构造器)_weixin_42627812的博客-程序员宅基地

全屏构造函数是用于在对象创建后立即初始化对象的代码块。构造函数的结构看起来类似于一个方法。声明构造函数构造函数声明的一般语法是:()throws{}构造函数的声明以修饰符开头。构造函数可以将其访问修饰符为:public,private,protected或package-level(无修饰符)。构造函数名称与类的名称相同。构造函数名称后面是一对括号,可能包括参数。可选地,右括号后面可以是关...

bzoj 3772_weixin_30872671的博客-程序员宅基地

感觉做这种题收获很大。1、DFS序(广义上)除了用于静态子树操作,也可以用来做点到根的路上某些信息的统计(如点到根的路径上标记了多少个点),如果在加上lca,就可以支持路径的信息查询。2、树上的可持久化线段树,如果每个节点要维护一个线段树,并且该线段树支持加减操作,那么通过可持久化+lca,搞定一条路径上的线段树的和(当然不仅局限于线段树)。3、一条树上的路径覆盖另一条...

推荐文章

热门文章

相关标签