RTP消息的质量统计信息由RTCP的两种消息类型Sr (发送者报告和接收者报告)提供。

一、RR协议详情

RR(receiverreport,接收报告)发送端报告是指发送端接收RTP分组的APP应用程序或终端,发送端可以同时是发送端和接收端。 接收方用RR分组反馈接收方的接收状况,如果存在多个码流,则反馈多个报告块。 RR包的负载类型为201,如图所示。

lsr报文(cmip协议)-冯金伟博客园

图1-RR

RR包分为三个部分:标头公用头、发件人信息发送器信息和报告块

RTCP报头,这是RTCP消息的公共公用部分,理解为RTCP的公共头部分。 占32位(4字节)的如图所示。

lsr报文(cmip协议)-冯金伟博客园

图2-RTCP公共头

版本(v ) :占用2比特,RTP版本标识符,其在RTCP分组中的含义与在RTP分组中的相同。 该协议定义的版本号为2。 填充符(p ) :占1比特,当设置填充符比特时,该RTCP分组在末端包括一些附加填充符比特,而不是控制信息的基本部分。 填料的最后一位统计了必须忽略多少字节。 一些固定块大小的加密算法可能需要填充符的比特。 在复合RTCP分组中,复合分组被加密为整体,并且填充符的比特只能添加到最后一个分组之后。 接收报告块数(RC ) :包括5bit,并且包含在该RTCP分组中的接收报告块的数量。 零值有效。 分组类型(PT ) :占据8bit,表示RTCP分组类型,SR在i200中将其标识为RTCP SR分组。 长度(l ) :占16bit,以32bit为单位,头部长度不包括通用头部,长度等于4*lenght。

发件人信息sender info :与Sr不同,RR数据包只包含SSRC信源标识,占4个字节。

lsr报文(cmip协议)-冯金伟博客园

图3 -发送器信息

SSRC:发送SR的源id。

第三部分为报告块信息,一个报告块占24字节

一个SR可以同时接收多个报告块信息,其中,该报告块信息的数量等于自从上一次报告以来从发送方发送的不同的SSRC源的数量,每个接收报告块发送从一个SSRC同步源接收的分组的统计信息。 下面介绍一个SSRC。

lsr报文(cmip协议)-冯金伟博客园

图4 -报告块

SSRC_1(源标识符) :包括32个比特,其中接收报告块中的信息所属的源的SSRC标识符。 分组丢失率:包括8bit,并且自从上一个SR分组被发送以来,SSRC_n发送的RTP分组的丢失率用固定小数点以下的形式表示,其中百分比率为256。 累计丢包数在:中占24比特,是从接收开始到现在,从源SSRC_1向源发送的RTP分组的丢包总数。 该值定义为要接收的包数减去实际接收的包数。 因为接收到的最高序列号:为32bit,RTP数据包序列号为ushort型,占16位。 报告块中的较低16位包括来自源SSRC_n的最高接收序号,其中较高16位表示循环数目。 一个循环是16位的最大值65535。 也就是说,前16位表示第几圈,最后16位表示当前编号。 到达间隔抖动:占用32位,RTP分组的到达时间统计方差的估计在时间标志单位中测量,并由无符号整数表示。 上次SR消息(LSR ) :占32比特,这是接收到的源SSRC_1上次发送的Send Report的时间戳。 从上一次SR起的延迟时间(DLSR ) :为32比特,即从接收到来自SSRC_1的SR分组到发送该接收报告块的延迟时间与上一次的Send report之间的差。

二. RR包分析

lsr报文(cmip协议)-冯金伟博客园

图5 – RR_Wirshark

支持的RR数据为81c 90007 ce 60707 EC 35566 e 04 beed ebcd8f898 fc 2f 0f 7e 266982 d 62b9f 567e be

81是V_P_RC,用二进制1000 0001替换80

v为10,版本为2;

p为0,无填充;

RC为0 0001,有一个报告块;

c9是PT,用二进制1100 1001十进制201替换c8,类型为RR;

007为l,表示除去RTCP公共头的部分的长度7*4=28。 由于公共头的长度固定为4,因此整个RR的长度为(7 1 ) *4=32。

ce 60 70 7e是SSRC,其指示发送RR分组的一侧;

c3 55 66 e0是报告块第一个报告块的SSRC,表示接收方接收的源id。

4b表示分组丢失率,并且用十进制75替换4b后的分组丢失率为: 75/256。 (注意此时除以256 );

ee de bc表示累计数据包的丢失数;

d8 f8 98 fc表示接收到的最高序列号。 d8 f8转换为十进制55544,55544个循环(55544个65535,d8 f8转换为十进制39164 ),表示当前循环的编号

2f 0f 7e 26表示抖动、RTP数据包到达时刻统计方差的估计值;

69 82 d6 2b表示LSR,用于上一个SR分组的时间戳;

9f 56 7e be表示DLSR,其中SR远离前一LSR的时间间隔;

Webrtc Qos中详细介绍了抖动、LSR、DLSR等字段。

请继续关注本人系列作品! 欢迎来到讨论!