LV015-RTCP简介
一、RTCP 简介
RTCP(Real-time Transport Control Protocol)协议,全称是实时传输控制协议。它是辅助 RTP 协议使用的。RTCP 报文有很多种,分别负责不同的功能。常用的报文有发送端报告(SR)、接收端报告(RR)、RTP 反馈报告(RTPFB)等。而每一种报告的有效载荷都是不同的。我们就是通过这些报告在接收端和发送端传递当前统计的 RTP 包的传输情况的。我们使用这些统计信息来做丢包重传,以及预测带宽。
不过,我需要再次强调一下,RTCP 协议只是用来传递 RTP 包的传输统计信息,本身不具有丢包重传和带宽预测的功能,而这些功能需要我们自己来实现。
二、协议格式
我们上面讲到了 RTCP 协议有很多种报告,而每种报告其实定义的具体内容都是不一样的。我们这里以 RTPFB 报告中的 NACK 报告(丢包提示报告)作为一个例子来看看 RTCP 协议大概是什么样子的。(RTPFB 报告包含了多种子报告,NACK 报告只是其中的一种,因为我们后面还会用到这个报告,所以这里我们就先以这个报告为例子。)
下面就是 NACK 报告的协议格式。
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 |P| FMT | PT | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC of the packet sender |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| SSRC of the media source |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| PID | BLP |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+其中,每一个字段在下表中都有详细的解释。
| 字段 | 占用位数 | 含义 |
| V | 2 | RTP 版本号。 |
| P | 1 | 填充标志位。当为 1 时, 表示在 RTP 包的最后面是不是有若干个填充字节。注意填充字节只用于字节对齐填充, 不是视频数据。 |
| FMT | 5 | 表示具体指的是哪种 RTPFB 消息, 参考 RFC4585。NACK 报告的 FMT 为 1。 |
| Payload Type | 8 | RTCP 报告的类型, 参考 RFC4585。RTPFB 的值是 205。 |
| Length | 16 | 当前 RTCP 报告的大小减去 1, 以 4 字节为单位。 |
| Packet ID(PID) | 16 | 当前 RTCP 报告中第一个丢失的 RTP 包的序列号。 |
| Bitmask of Lost Packets(BLP) | 16 | 表示紧接着 Packet ID 的第 i 个包是不是丢失了, 丢失了则第 i 位为 1。 |
从上面的 NACK 报告我们可以看到,RTCP 协议跟 RTP 不同,它们传递的东西是不一样的。
我们知道 RTP 是用来传输实际的视频数据的。它就像一个快递盒,先装好视频,然后填好运送的视频基本信息和收件人信息,最后将视频运送到收件人手上。
而 RTCP 协议则像是一个用来统计快递运送情况的记录表。其中的 NACK 报告就是快递丢件情况的记录表。它记录着哪些快递丢了。发件人收到了 NACK 之后,可以重新寄一个同样的快递给收件人,防止收件人没有收到快递。在这里也就是将丢失的视频 RTP 包重传一遍。
虽然我们只讲了一种 RTCP 报告,但是其它的报告也是类似的。大多数报告都是用来记录传输信息的。因为数量很多,我们这里就不一一展开了。如果你有兴趣的话,可以查看这个文档:RFC 3550 - RTP: A Transport Protocol for Real-Time Applications (ietf.org)。
参考资料:
【ZeroRange WebRTC】NACK(Negative Acknowledgment)技术深度分析-CSDN博客