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

posted @ 2023-11-08 17:14  xiao_mage  阅读(274)  评论(0)    收藏  举报