srt传输协议优化(实时传输控制协议RTCP-SR)
srt传输协议优化(实时传输控制协议RTCP-SR)②发送者信息 长度为 24 字节版本(V):占2bit ,RTP版本识别符 在RTCP包内的意义与RTP包中的相同.此协议中定义的版本号为2。填料(P):占1bit,若设置填料比特 该RTCP包在末端包含一些附加填料比特 并不是控制信息的基本部分.填料的最后一个比特统计了多少个字节必须被忽略.某些有固定块大小的加密算法可能需要填料比特.在复合RTCP包中 复合包作为一个整体加密 填料比特只能加在最后一个单包的后面。接收报告块计数(RC):占5bit,该RTCP包中所含接收报告块的数目.零值有效。包类型(PT):占8bit,代表RTCP包类型,SR为i200 用以识别这个为RTCP SR包。长度(L):占16bit,以32bit为单位 头部的长度,不包括通用头部,长度等于4*lenght。SR 报文包括三部分:① RTCP 报文头 这是RTCP报文的公共Common部分,理解为RTCP的Co
RTP 报文的质量统计信息通过RTCP的两种报文类型SR(Sender Report)和RR(Receiver Report)来提供。
一、SR协议详解
SR(Sender Report) 发送端报告,所谓发送端是指发出RTP数据包的应用程序或者终端,发送端同时也可以是接收端(RTP报文的发送端向RTP报文的接收端)。发送端通过发送SR包告诉接收端发送端的信息,SR包分为三部分:头部Common header,发送者信息SenderInfo和报告块ReportBlock。如果发送端也作为接收端,那么才会存在ReportBlock,当存在多个码流的时候就会反馈多个ReportBlock。SR包的负载类型是200,如图所示:
图1 -SR
SR 报文包括三部分:
① RTCP 报文头 这是RTCP报文的公共Common部分,理解为RTCP的CommonHeader(公共头)部分。占32比特(4个字节)如图所示:
图2 -RTCP Common Header
版本(V):占2bit ,RTP版本识别符 在RTCP包内的意义与RTP包中的相同.此协议中定义的版本号为2。
填料(P):占1bit,若设置填料比特 该RTCP包在末端包含一些附加填料比特 并不是控制信息的基本部分.填料的最后一个比特统计了多少个字节必须被忽略.某些有固定块大小的加密算法可能需要填料比特.在复合RTCP包中 复合包作为一个整体加密 填料比特只能加在最后一个单包的后面。
接收报告块计数(RC):占5bit,该RTCP包中所含接收报告块的数目.零值有效。
包类型(PT):占8bit,代表RTCP包类型,SR为i200 用以识别这个为RTCP SR包。
长度(L):占16bit,以32bit为单位 头部的长度,不包括通用头部,长度等于4*lenght。
②发送者信息 长度为 24 字节
图3-Sender Report RTCP Packet
SSRC: 发送SR的源标识。
NTP时间标志(NTP Timestamp):占64bit,SR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。most significant word前面32位是秒, least significant word后面32位是分。
RTP时间标志(RTP Timestamp):占32bit,与NTP时间戳对应,与RTP数据包中的RTP时间戳具有相同的单位和随机初始值。
发送的报文数(Sender’s packet count):占32bit,从开始发送包到产生这个SR包这段时间里,发送者发送的RTP数据包的总数. SSRC改变时,这个域清零。
发送的字节文数(Sender`s octet count):占32bit,从开始发送包到产生这个SR包这段时间里,发送者发送的总字节数(不包括头部和填充)。发送者改变其SSRC时,这个域要清零。
③第三部分为报告块信息,一个报告块占24字节
在一个SR中可以同时收到多个报告块信息 块数等于从上一个报告以来该发送端发送出去的不同SSRC源的数目.每个接收报告块传输关于从某一个SSRC同步源来的数据包的接收统计信息。下面只以一个SSRC进行解释说明;
图4-报告块信息
SSRC_1(源识别符):占32bit,在此接收报告块中信息所属源的SSRC识别符。
丢包率:占8bit,自从前一SR包发射以来 从SSRC_n传来的RTP数据包的损失比例 以固定点小数的形式表示 百分比率为256(不是百分制,按一个byte的256进行)。
累计包丢失数:占24bit,从开始接收到现在 从源SSRC_1发到本源的RTP数据包的丢包总数。该值定义为期望接收的包数减去实际接收的包数。
接收到的最高序列号:占32bit,因为RTP包序号是ushort类型,占16位。在报告块中低16比特包含从源SSRC_n来的最高接收序列号 高16比特代表循环周期数。一个周期为16位的最大值65535(即前16位表示第几圈,后16位表示当前的序号)。
到达间隔抖动:占32bit, RTP数据包到达时刻统计方差的估计值 以时间标志为单位测量 用无符号整数表达.到达时刻抖动J定义为一对包中接收机相对发射机的时间跨度差值的平均偏差(平滑后的绝对值)。
上一SR报文 (LSR):占32bit,接收到的来自源SSRC_1上次发送Send Report的时间戳。
自上一SR的时间延时(DLSR):占32bit,是从收到来自SSRC_1的SR包到发送此接收报告块之间的延时 与上次Send report间的差值
二、SR抓包分析
图5- wirshark抓包
对应SR数据如下:
80 c8 00 06 4a 02 4e d9 69 26 d6 93 11 e1 d7 95 aa 98 7a cd 62 bc 8e 13 93 0a 6c 68
80 是V_P_RC ,把80换成二进制1000 0000
V是10,版本是2;
P是0,没有填充;
RC是0 0000 ,后面没有report block;
c8 是PT,把c8换成二进制1100 1000 十进制 200,类型是SR
00 06 是L,把00 06换成二进制0000 0000 0000 0110 十进制 6 SR =(6 1)*4 =28 Byte
4a 02 4e d9 是SSRC 代表发送SR包的源ID;
69 26 d6 93 是NTP timestamp most significant word,1900年1月1日0点0分0秒到现在的时间,单位是秒;
11 e1 d7 95 是NTP timestamp least significant word;
aa 98 7a cd 是RTP timestamp;和ntp时间对应对rtp时间;
62 bc 8e 13 是packet count;一共发送了多少个rtp包。
93 0a 6c 68 是octet count;一共发送了多少字节。
本次抓包是对可视电话的一次抓包分析,关于报告块Report Block信息。碰在下一章RR中详细抓包分析!
请继续关注本人系列作品!欢迎讨论!!!