WebRTC中RTCP协议
协议层次及作用
多媒体服务的协议栈如下,RTP和RTCP属于传输层。

RTP(Real-time Transport Protocol,实时传输协议)只负责实时数据的传输,RTCP(Real-time Transport Control Protocol,即实时传输控制协议)负责对RTP的通讯和会话进行带外管理(如流量控制、拥塞控制、会话源管理等)。
RTCP 使用不同的数据包类型来承载统计和控制数据。
|
类型 |
含义 |
用途 |
|
200 |
SR(Sender Report) |
发送端报告 |
|
201 |
RR(Receiver Report) |
接收端报告 |
|
202 |
SDES(Source Description Items) |
源点描述 |
|
203 |
BYE |
结束传输 |
|
204 |
APP |
特定应用 |
|
205 |
RTPFB |
Generic RTP FeedBack |
|
206 |
PSFB |
Payload-specific Feedback |
RR报文:向发送端发送接收报告,记载着从上次发送RR到当前发送RR的时间周期内,丢失了多少包、丢包率、延时等信息。
SR报文:发送端向接收端发送,报告一段时间内发送的数据包信息。
SDES:描述音视频媒体源,保证通信每个SSRC唯一。
BYE:说明音视频源当前不用了,收到该报文后,应将SSRC所对应通道删除。
RTPFB:例如接收端用来反馈NACK信息。
PSFB:发送端收到FIR(full Intra Request Command)的PSFB报文时,触发生成关键帧(IDR)。PLI(Picture Loss Indication)的PSFB报文是接收端解码器无法解码时发送的报文。REMB是接收端评估出的带宽值发送给发送端,但是目前WebRTC是基于发送端的带宽估计TCC,REMB仅向后兼容。
协议格式
src/modules/rtp_rtcp/source/rtcp_packet目录下定义了各种类型的RTCP包,对应的.cc文件里边定义了具体RTCP包类型的格式,这里主要介绍TransportFeedback协议

头4个字节是每一个RTCP包共有的字段,即通用RTCP包头。
Feedback message type(FMT)固定为15。
PT:包类型。传输层的Feedback Messages,所以payload type(PT)为205。
length:RTCP包长度,length*4字节。
后边是TransportFeedback特有字段。
base sequence number:该RTCP包记录第一个RTP包的seq。
packet status count:该RTCP包记录了多少个RTP包信息。
Reference time:RTP包达到时间的基准时间。以64ms为单位,RTCP包记录的RTP包到达时间信息以这个reference time为基准进行计算。
Fb pkt.count:该RTCP包的序列号。可用于检测TransportFeedback包的丢包情况。
packet chunk:RTP包的到达状态,有run length chunk和status vector chunk两种形式。记录RTP包的到达状态,记录的这些RTP包transport sequence number通过base sequence number计算得到。
run length chunk:

status vector chunk:使用1个bit或2个bit来表示RTP是否已接收到。


recv delta:记录RTP包到达时间与上一个RTP包到达时间间隔。
WebRTC中代码实现
解析TransportFeedback内容

解析出每个RTCP TransportFeedback的字段信息

参考:
代码使用版本为m96
浙公网安备 33010602011771号