RTCP协议之SR和RR简介

RTCP:实时传输控制协议(Real Time Transport Control Protocol),主要是用来反馈音视频通信时的质量。

常用的RTCP 类型:

包类型缩写作用所在RFC
200SR(Sender Report)发送端报告RFC 3550
201RR(Receiver Report)接收端报告RFC 3550
205RTPFB(Transport FB)传输层反馈RFC 4585
206PSFB(PayloadSpecific Fb)负载相关反馈RFC 4585
207XR(Extended Report)扩展包括RFC 3611

另外还有202:SDES、203:BYE、204:APP(不再单独介绍)

SR

        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
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
header |V=2|P|    RC   |   PT=SR=200   |             length            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         SSRC of sender                        |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
sender |              NTP timestamp, most significant word             |
info   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |             NTP timestamp, least significant word             |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         RTP timestamp                         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                     sender's packet count                     |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                      sender's octet count                     |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
report |                 SSRC_1 (SSRC of first source)                 |
block  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1    | fraction lost |       cumulative number of packets lost       |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           extended highest sequence number received           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                      interarrival jitter                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         last SR (LSR)                         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                   delay since last SR (DLSR)                  |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
report |                 SSRC_2 (SSRC of second source)                |
block  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  2    :                               ...                             :
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
       |                  profile-specific extensions                  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段介绍

  • version:版本信息,占两位
  • P :填充位,占1位。表明在包的尾部是否有填充数据,如果有填充数据,包中最后一个字节表明填充数据的大小
  • RC: (reception report count) 占 5位,接收报告块,为0
  • PT: 包类型,占8位
  • length: 包总长度(包括头和扩展数据),占16位
  • SSRC:32位,该发送者的唯一标识
  • NTP :网络时间,占64位,表示自1990年1月以来的秒数,高32位MSW表示整数部分单位为秒,低32位LSW位表示小数部分,单位为皮秒,网上有NRT时间和gettimeofday()获得的时间换算方式大家可以查下。。
  • RTP: 时间戳占32位,是RTP头中携带的时间戳,单位是毫秒,RTP和NTP是同一个时间点的不同表示方式,它俩之间支持相互转换。
  • sender’s packet count : 占32位,表示到产生该SR包这一刻,总共发送的RTP包的数量
  • sender’s octet count:占32为,表示到产生该SR包这一刻,总共发送的RTP包的字节数(不包括RTP头和填充数据)

后面的接收报告块是RR包的属性,当RC 字段大于0时就会有接收者报告快

  • SSRC(ssrc of source): 发送该RR包的发送者自己的SSRC 。有时候你抓包会发现订阅者反馈给服务端的RR包中sender ssrc 为1。此时不要奇怪,因为大多数开源服务器一个端口对应一个客户端,它们并不以ssrc作为唯一表示,所以sender ssrc可以为1
  • fraction lost : 丢包率,从上一个SR包或者RR包到生成当前RR包之间的丢包率,丢包率被表示成一个整数,计算方式为:
   fraction los =(应该接收到包数 - 实际收到的包数)/应该接收到包数 * 256 
  • 累计丢包数 : 表示该会话从开始到产生该RR包的这一刻总的丢包数
  • extended highest sequence number received : 占32位,低16位表示接收到的RTP最大序列号,高16位表示RTP序列号循环的次数。最终的序列号:
extended_seq_num = seq_num + (65536 * wrap_around_count) //wrap_around_count翻转次数 
  • interarrival jitter : 抖动时间,相邻两个包之间的接收抖动时间。
  • last SR (LSR) : 该值是从收到的最新SR包中的NTP时间取中间32位值,若没有收到SR包,该值为0
  • delay since last SR (DLSR) 从接收上一个SR包到发送该RR包之间的延时,延时是以1/65536秒为单位计算。

可以通过LSR 和DLSR计算RTT值 ,具体计算方式如下:

RTCP协议之SR和RR简介
RTT = 接收到RR报文的当前时间-RR报文的LSR - RR中的DLSR

作者:音视频之路

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论