RTCP:实时传输控制协议(Real Time Transport Control Protocol),主要是用来反馈音视频通信时的质量。
常用的RTCP 类型:
包类型 | 缩写 | 作用 | 所在RFC |
---|---|---|---|
200 | SR(Sender Report) | 发送端报告 | RFC 3550 |
201 | RR(Receiver Report) | 接收端报告 | RFC 3550 |
205 | RTPFB(Transport FB) | 传输层反馈 | RFC 4585 |
206 | PSFB(PayloadSpecific Fb) | 负载相关反馈 | RFC 4585 |
207 | XR(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值 ,具体计算方式如下:
RTT = 接收到RR报文的当前时间-RR报文的LSR - RR中的DLSR
作者:音视频之路
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。