WebRTC服务质量(01)- Qos概述
WebRTC服务质量(02)- RTP协议
WebRTC服务质量(03)- RTCP协议
WebRTC服务质量(04)- 重传机制(01) RTX NACK概述
WebRTC服务质量(05)- 重传机制(02) NACK判断丢包
WebRTC服务质量(06)- 重传机制(03) NACK找到真正的丢包
WebRTC服务质量(07)- 重传机制(04) 接收NACK消息
WebRTC服务质量(08)- 重传机制(05) RTX机制
WebRTC服务质量(09)- Pacer机制(01) 流程概述
WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue
WebRTC服务质量(11)- Pacer机制(03) IntervalBudget
WebRTC服务质量(12)- Pacer机制(04) 向Pacer中插入数据
一、前言:
RTCP(RTP Control Protocol)是一种控制协议,与RTP(Real-time Transport Protocol)一起用于实时通信中的控制和反馈。RTCP负责监控和调节实时媒体流。通过不断交换RTCP信息,WebRTC应用能够调整比特率、编码方式等,适应网络条件,确保音视频通话的质量。同时,RTCP与RTP共同工作,使得数据传输不仅准确,而且高效。
二、RTCP Header:
RTCP有很多格式,常见的有:SR(Sender Report)、RR(Receiver Report)、SDES(Source Description)、BYE(Goodbye)。他们格式各不相同,
但是,他们的Header的共同部分为:
- Version (V):占两位,表示RTCP版本,当前版本是2;
- Padding §:占1位,表示是否有填充字节。如果该字段为1,则表示有填充字节;
- Reception Report Count (RC):占5位,表示报告块的数量。每个RTCP报文可以包含多个报告块;
- Packet Type (PT):表示该RTCP报文的类型,例如:
- SR(Sender Report,发送者报告)
- RR(Receiver Report,接收者报告)
- SDES(Source Description,源描述)
- BYE(结束会话)
- APP(应用层自定义信息)
- Length:占16位,表示此 RTCP 数据包(包括报头本身)的长度(以 32 位为单位减一)。比如,一个 RTCP 报文的总长度(包括头部)是 80 个字节,那么我们需要将这个长度转换成 32 位单位,然后减去 1 来填写在 RTCP 头部的长度字段中。
- 首先,将总长度转换成 32 位单位:
- 80 字节 = 80 * 8 = 640 位
- 640 位 / 32 = 20 个 32 位字
- 接下来,根据文档的描述,需要减去 1,即:
- 20 个 32 位字 - 1 = 19
- 首先,将总长度转换成 32 位单位:
- SSRC of sender: 占用32位,表示发送该RTCP报文的源的同步源标识符(SSRC)。用来唯一标识一个媒体发送者。
三、RTCP Packet Type:
常见的有:
- SR(Sender Report):
- 发送者报告,包含有关发送者的统计信息,如发送的总包数、发送时的时间等。它提供了性能监控的关键指标,例如丢包率和延迟。
- RR(Receiver Report):
- 接收者报告,包含有关接收的数据包的统计信息,如接收的总包数、丢失的包数等。接收者使用此报告来向发送者反馈接收状态。
- SDES(Source Description):
- 源描述,提供有关媒体源的附加信息,例如源的名称、电子邮件地址、电话等。这有助于会话中的参与者识别彼此。
- BYE:
- 结束报告,表示一个或多个参与者离开会话。当参与者不再发送数据时,它会向其他参与者发送 BYE 消息,以通知他们。
- APP:
- 自定义的RTCP报告,允许应用程序定义自己所需的反馈和信息。
- FIR(Full Intra Request):
- 向对方请求发送关键帧(全内编码帧),主要用于视频流媒体的情况,以便重新同步流。
- NACK:当接收端收到的数据有丢失的情况下,给发送端发送一个NACK;发送端收到NACK之后,首先看这个包有没有超时,如果没有超时,那么重新将这个包发送给接收端;
- RTPFB(RTP Feedback):
- 一般性RTP反馈,能够携带多种反馈信息,包括质量、丢包、抖动等。它通常是用于更详细的动态反馈机制。
- PSFB(Payload Specific Feedback):
- 根据负载的特殊情况返回的反馈,通常用于特定编解码器的附加功能,例如流量控制和优化。
下面详细看看每一中Type,当然,重点还是SR/RR。
3.1、SR:
RTCP SR(Sender Report)是实时传输控制协议(RTCP)中的一种报文类型,用于发送端向接收端提供有关发送者的信息。RTCP 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-