webrtc中的RTCP简介
讨论内容
RTCP在webrtc中起到音视频服务质量的反馈,在webrtc中起到关键作用,比如统计丢包率,延时和音视频同步等,都是通过RTCP的反馈来处理的。本文是对webrtc中的使用到的RTCP一个总结,从以下2个方面去分析总结RTCP,形成一个总体思路框架:
- 在webrtc中起到什么作用?
- 传输对象方式,即从发送端给接收端,还是接收端给接收端
RTCP类型
RTCP::RTPFB(RTP通用反馈), RTCP::XR(RTCP扩展)和 RTCP::PSFB(负载数据反馈)还有细的的划分,具体的介绍我们下个小节会说明。
RTCP分析
类型 | 简称 | 作用 | 传输对象 |
---|---|---|---|
201 | RR | 接受者报告,接收端反馈丢包率,延时等信息 | 接收流端发给发流端 |
200 | SR | 发送者报告,主要用于接收端音视频同步 | 发流端反馈给接收端 |
206 | PSFB | 负载类型反馈报告,发流端发送关键帧请求,推流端发送码率估计信息 | (PLI FIR发流端反馈给接收端) (AFB发流端反馈给接收端) |
205 | RTPFB | RTP质量反馈报告 | 发流端发给接收端 |
202 | SDES | 源描述项,其中包括规范名 CNAME | 发流端发给接收端 |
202 | BYE | 参会者结束当前会话 | 接收端和发送端可以互相发 |
207 | XR | RTCP扩展 ( DLRR 用于计算RTT延时 ) | 发流端发给接收端 |
RTCP::RTPFB
类型 | 简称 | 作用 | 传输对象 |
---|---|---|---|
1 | NACK | 丢包重传 | 接收端发给发流端 |
15 | TCC | WebRTC最新的拥塞控制算法(Sendside BWE)基于Transport-cc,接收端记录数据包到达时间,构造相关RTCP包,然后反馈给发送端,在发送端做带宽估计,从而进行拥塞控制 | 接收端发给发流端 |
RTCP::PSFB
类型 | 简称 | 作用 | 传输对象 |
---|---|---|---|
1 | PLI | 关键帧请求 | 接收端发给发流端 |
4 | FIR | 关键帧请求 | 接收端发给发流端 |
15 | AFB | 在码率控制器根据规则计算出远端估计最大码率Ar,得到Ar之后,通过RTCP REMB报文返回发送端 | 接收端发给发流端 |
关于 PLI 和 FIR 关键帧请求场景的差异,摘抄了下面这段文字,具体文章细节内容请点击链接添加链接描述
当解码端需要刷新时,可以发送FIR消息给编码端,编码端此时发送关键帧,刷新解码端。这有点类似PLI消息,但是PLI消息是用于丢包情况下的通知,而FIR却不是,在有些非丢包情况下,FIR就要用到。举两个例子:
-
解码端需要切换到另一路不同视频时,由于需要新的解码参数,所以可通过发送FIR消息,通知编码端生成关键帧,获取新的解码参数,刷新视频解码器;
-
在视频会议中,新用户随机时刻加入,各个编码端发送的视频不一定都是关键帧,所以新用户不一定能正常解码。此时该新加入用户发送FIR消息,通知各个编码端给它发关键帧,获取关键帧后即可正常解码。
RTCP::XR
类型 | 简称 | 作用 | 传输对象 |
---|---|---|---|
5 | DLRR | 用于计算RTT延时 | 发流端发给接收端 |
丢包重传中有这样一个场景:
NACK模块会维护一个未确认的序列号列表,这个列表存放着接收方已发送的请求重传的序列号,但还没有收到对端的重传包的。
NACK模块会设置定时器定期检测该未确认的序列号列表,如果当前时间减去序列号的NACK发送时间大于DLRR 计算的RTT,则再次发送该序列号的NACK RTCP反馈信息。