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

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报头,即得出净荷长度。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RTP(Real-time Transport Protocol)的请求报文格式如下: ``` 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 (2 bits):RTP协议的版本号,目前为2。 - P (1 bit):填充位,如果头部和数据部分不够32位的整数倍,就需要填充一些额外的数据,以便对齐数据。该位为1时表示头部后面有填充数据。 - X (1 bit):扩展位,用于指示头部后面是否有扩展数据。 - CC (4 bits):CSRC计数器,表示后面有几个32位的CSRC标识符。 - M (1 bit):标记位,用于指示该报文是视频、音频还是其他类型的数据。 - PT (7 bits):有效荷载类型,用于指示数据的类型,如音频数据、视频数据等。 - sequence number (16 bits):序列号,用于解决乱序问题,每发送一个RTP包,该值就会加1。 - timestamp (32 bits):时间戳,用于解决抖动问题,表示当前RTP包的第一个采样的时间。 - SSRC (32 bits):同步信源标识符,用于标识RTP流的来源。 - CSRC (32 bits):贡献源标识符,用于标识参与此RTP流的其他同步信源的标识符。可以有多个CSRC。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值