您的位置:首页 > 编程语言 > PHP开发

RTP报文格式、各种参数意义、编码速率计算

2011-03-21 00:22 218 查看

1 RTP报文格式

RTP报文格式如下,详见RFC1889(大部分音频视编码格式都一致,部分变更见各种编码的RTP协议):
a. RTP报头格式简单介绍

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC) identifier |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| contributing source (CSRC) identifiers |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
V:Version版本号,2;
P:Padding,是否对净荷进行填充,用于加密时;
X:eXtension,扩展位,固定头后面是否跟随扩展报头;
CC:CSRC数量,说明后面跟踪的贡献源标识数量;
M:Marker,标志位,标记是否在媒体流中标记重要事件,如帧边界;
PT:Payload Type,净荷类型,例如:H263是34;
Sequence number:RTP包的序列号,接收方可通过这个字段保存包序列,对包进行排序,又可以用来统计丢包率;第一个包的序列号为随机值;
Timestamp:时戳,反映这个包第一个比特的采样时刻,且后面每个包时戳值线性增长;MRP播放时,每切换一个文件,时戳跳变5000;
SSRC:同步源标识,值随机选择,同一个RTP会话中任何两个同步源不会有相同的SSRC,即区分同步源,一般一个同步源即为一个时戳+序列号空间;
CSRC:贡献源标识,标识净荷的来源,由CC字段指定个数,最多15个;

b. 报文就是净荷

测试点
主要关注的字段为序列号sequence number和时戳timestamp,
a. sequence number非法,即一系列RTP包中有个别包序列号非法,产品是否丢弃并正常恢复信号;
b. RTP包乱序即sequence number乱序,NP是否正确排序,信号正确恢复;
c. RTP包到达产品时慢时快(延迟不断变化出现抖动),产品能否正确处理;
d. 关注产品能接受的延迟边界值,例如对于g711 20ms打包时长的语音包,产品能支持的最大延迟;
时戳测试点见下节

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位

4 FAQ

1、如何知道RTP净荷的大小?
UDP报头有记录报文长度的字段,以该字段减去RTP报头,即得出净荷长度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: