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

来源:互联网 发布:淘宝房产网 编辑:程序博客网 时间:2024/05/06 23:52

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             |

   |                             ....                              |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

VVersion版本号,2

PPadding,是否对净荷进行填充,用于加密时;

XeXtension,扩展位,固定头后面是否跟随扩展报头;

CCCSRC数量,说明后面跟踪的贡献源标识数量;

MMarker,标志位,标记是否在媒体流中标记重要事件,如帧边界;

PTPayload Type,净荷类型,例如:H26334

Sequence numberRTP包的序列号,接收方可通过这个字段保存包序列,对包进行排序,又可以用来统计丢包率;第一个包的序列号为随机值;

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位为极性位,13位为段位码,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(不一定160bit64bit96bit +有效载荷)×1/打包周期)
=(528bit+(打包周期(每秒的比特数))×1/打包周期)
( 528 / 打包周期 ) 每秒比特数

 

G71120ms打包,带宽为 ( 528/20 + 64) Kbit/s90.4 Kbit/s

G72920ms打包,带宽为 ( 528/20 + 8 ) Kbit/s 34.4 Kbit/s

 

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

 

 

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

 

UDP报头8字节,64

 

 

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

 

4 FAQ

1、如何知道RTP净荷的大小?

UDP报头有记录报文长度的字段,以该字段减去RTP报头,即得出净荷长度。