转自:http://blog.csdn.net/xujianglun/article/details/48342367

如何计算G711语音等的打包长度和RTP里timestamp的增长量

一般对于不同的语音有不同的打包周期,而不同的打包周期又对应着不同的timestamp in RTP

那么是如何计算的呢,我们通过G711举个例子

G711的打包周期分为10ms,20ms,30ms,sample rate是8000,速率是64kbit/s

64kbits,意味着每秒发送64000比特

那么10ms发送= 64000 * (10/1000) = 640 比特 = 80 字节

那么10ms的包 = 80字节
20ms = 160 字节
30ms = 240 字节

那么64kbits 如何来的?
因为采样周期为8000,那么意味着1秒8000个采样,每次采样站8个比特
那么 8000*8 = 64000bit/s = 64kbit/s

接下来计算timestamp的增长量,公式如下:
两帧之间RTP timestamp的增量 = 时钟频率 / 帧率
同样以10ms的G711举例:

10ms的G711帧率 = 100,意味着每秒发送100帧

那么10ms的timestamp增量 = 8000/100 = 80

20ms的timestamp增量 = 160

30ms的timestamp增量 = 240

那么其他语音的计算以此类推,举一反三

m=audio 1234 RTP/AVP 0
a=rtpmap:0 pcma/8000/1
a=framerate:25

c=IN IP4 172.18.168.45

1.m=是媒体级会话的开始处,audio:媒体类型 ; 1234:端口号    ;RTP/AVP:传输协议   ;0:rtp头中的payload格式

2.a=rtpmap:证明是动态绑定的进一步说明    ;0:rtp头中的payload格式;pcma:编码名 ;8000:采样频率;1:单声道

注意:g711有两种编码类型,另一种是pcmu

3.a=framerate:25    指1s播放几个rtp包,单位帧每秒,倒数为一个rtp包承载的数据播放的时间,单位s

8000/25=320   表示每个时间戳增量值    每个rtp包的g711数据大小

4.c=:媒体链接信息;IN:网络类型一般为IN;IP4:地址类型一般为IP4;后面是IP地址(注意是VLC所在的IP地址,不是发送方的IP)

m=audio 1234 RTP/AVP 0
a=rtpmap:0 pcma/8000/1
a=framerate:25

c=IN IP4 172.18.168.45

1.m=是媒体级会话的开始处,audio:媒体类型 ; 1234:端口号    ;RTP/AVP:传输协议   ;0:rtp头中的payload格式

2.a=rtpmap:证明是动态绑定的进一步说明    ;0:rtp头中的payload格式;pcma:编码名 ;8000:采样频率;1:单声道

注意:g711有两种编码类型,另一种是pcmu

3.a=framerate:25    指1s播放几个rtp包,单位帧每秒,倒数为一个rtp包承载的数据播放的时间,单位s

8000/25=320   表示每个时间戳增量值    每个rtp包的g711数据大小

4.c=:媒体链接信息;IN:网络类型一般为IN;IP4:地址类型一般为IP4;后面是IP地址(注意是VLC所在的IP地址,不是发送方的IP)

关于sdp文件的详细介绍请看:http://blog.csdn.net/zhangjikuan/article/details/27367437

2音频RTP包特点

以G711A为例,G711A编码位数为8位,如下表,第0位为极性位,1到3位为段位码,4-7位为段内码,如以8K频率对信号进行采样,每个采样点以8位编码,显然编码速率为64Kbps。

以G711A编码的音频包如果以20ms打包,那么每个包有160个采样点(采样频率为8KHZ,那么每毫秒的采样个数为8个,因此20ms即为160个),这同样体现在时戳,如下图,两个包之间的时戳间隔为160。

并且,净荷的长度即为160×1字节/包=160个字节,见下图,DSP在解码时读取每个采样点的数值,查表就可以恢复信号。

3速率计算

对于每路媒体通道速率大小的描述,可用kbps或是每秒传输的RTP包数,用前者描述便于计算带宽,可以和底板/扣板逻辑接口速率进行对照,后者便于计算NP处理包数。

a. 对音频而言,知道打包时长就可以诂算通道每秒传输的包数,例如打包时长为20ms,每秒该通道即传输50个包。

b. 计算通道带宽速率

速率=RTP包大小(包头+净荷)×每秒处理包数(1/打包周期)

=(Ethernet头+IP头+UDP头+RTP头+有效载荷)×(1/打包周期)
=(208bit(不一定) +160bit+64bit+96bit +有效载荷)×(1/打包周期)
=(528bit+(打包周期(秒)×每秒的比特数))×(1/打包周期)
=( 528 / 打包周期 ) + 每秒比特数

G711:20ms打包,带宽为 ( 528/20 + 64) Kbit/s=90.4 Kbit/s

G729:20ms打包,带宽为 ( 528/20 + 8 ) Kbit/s= 34.4 Kbit/s

性能测试时可根据通道处理速率诂算产品处理性能。

各个报头长度参考下面报文格式:

UDP报头8字节,64位

IP报头固定长度为20字节,160位

计算G711语音的打包长度和RTP里timestamp(时间戳)的增长量的更多相关文章

  1. (七)计算G711语音的打包长度和RTP里timestamp的增长量

    如何计算G711语音等的打包长度和RTP里timestamp的增长量 一般对于不同的语音有不同的打包周期,而不同的打包周期又对应着不同的timestamp in RTP 那么是如何计算的呢,我们通过G ...

  2. 计算html标签textarea字符长度

    今天学习jQuery,做练习计算html标签textarea字符长度,先添加一个视图操作(Action): 创建一个视图,并按下面顺序标记1,2,3进行写html或javascript脚本: 其中标记 ...

  3. 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行

    [TOC] 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行 程序源码 import java.io.IOException; import java.util. ...

  4. 关于RTP中的时间戳问题

    关于RTP中的时间戳问题 时间戳单位:时间戳计算的单位不为秒之类的单位,而是由采样频率所代替的单位,这样做的目的就是为了是时间戳单位更为精准.比如说一个音频的采样频率为8000HZ,那么我们可以把时间 ...

  5. 【MySQL】使用Length和Cast函数计算TEXT类型字段的长度

    背景: 前段时间,业务需要,为了快速让解析的Excel入库,所以把不是很确定的字段全部设置成了TEXT. 今天需要进行表结构优化,把字段长度控制在合适的范围,并尽量不使用TEXT类型. -- 计算长度 ...

  6. 计算新浪Weibo消息长度

    此文为计算新浪Weibo的消息长度的方法. 就是 (发言请遵守社区公约,还可以输入119字). var getMessageLength = (function() { var byteLength ...

  7. C#/WPF 计算字串的真实长度,调整控件的宽度

    下面函数是经常用到的计算字串长度的方法:         private double MeasureTextWidth(String str, string fontName, double fon ...

  8. js计算textarea输入文字的长度

    前言 日常开发过程中,有些时候我们想使用textarea,然后限制输入的长度,在textarea末尾显示剩余可输入的字节数. 如下图:  解决方法: 常用的有三种方法: 1.通过判断charCodeA ...

  9. [opencv]计算多边形逼近曲线的长度

    //利用曲线逼近,计算逼近曲线的长度 //首先创建一个逼近曲线 vector<Point2f> approx; approxPolyDP(contours[i], approx, 2, t ...

随机推荐

  1. 【Networking】容器网络大观 && SDN 资料汇总

    SDNLAB技术分享(十五):容器网络大观   SDNLAB君• 16-06-17 •2957 人围观 编者按:本文系SDNLAB技术分享系列,本次分享来自SDN撕X群(群主:大猫猫)群直播,我们希望 ...

  2. 【GoLang】与或非 异或操作

    在Go规范,^这个运算符在一元运算符和二元运算符中都出现了.那么他们分别是啥?在规范中说道:^ bitwise XOR integers这是按位异或. Go语言位操作实例 <!-- lang: ...

  3. Word Search I & II

    Word Search I Given a 2D board and a word, find if the word exists in the grid. The word can be cons ...

  4. 【leetcode】Convert Sorted List to Binary Search Tree

    Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in as ...

  5. python装饰器初探

    一.含有一个装饰器 #encoding: utf-8 ############含有一个装饰器######### def outer(func): def inner(*args, **kwargs): ...

  6. CEF3开发者系列之类和接口

    CEF3基本的框架包含C/C++程 序接口,通过本地库的接口来实现,而这个库则会隔离宿主程序和 Chromium&Webkit的操作细节.它在浏览器控件和宿主程序之间提供紧密的整合,它支持用户 ...

  7. AJAX学习

    AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.AJAX代码运行在客户端,其和服务器进行交互 ...

  8. HDU 4940 Destroy Transportation system(无源汇有上下界最大流)

    看不懂题解以及别人说的集合最多只有一个点..... 然后试了下题解的方法http://blog.sina.com.cn/s/blog_6bddecdc0102uzka.html 首先是无源汇有上下界最 ...

  9. Linux 添加新硬盘 LVM操作(作用:新增硬盘的卷管理)

    1 查看当前系统硬盘及分区情况 (注:linux中SCSI的第1个硬盘/dev/sda,第2个硬盘/dev/sdb依此类推) 2 初始化分区sdb为物理卷pv pvcreate /dev/sdb  / ...

  10. 火狐----此地址使用了一个通常用于网络浏览以外的端口。出于安全原因,Firefox 取消了该请求。

    FirFox打开80以外的端口,会弹出以下提示: “此地址使用了一个通常用于网络浏览以外的端口.出于安全原因,Firefox 取消了该请求.”.经网上搜索,解决方法如下: 在Firefox地址栏输入a ...