RTCP 反馈消息是 RTP/AVPF 配置文件(RFC 4585)定义的核心扩展机制,它让接收端能够及时地向发送端报告丢包、带宽估计、关键帧请求等信息,从而实现实时通信中的拥塞控制和错误恢复。
一、整体结构概览
所有的 RTCP 反馈消息都遵循通用 RTCP 包头 + 反馈控制信息的结构。
c
// RTCP 反馈消息通用包头格式 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=2|P| FMT | PT = 205/206 | length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SSRC of packet sender | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SSRC of media source | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ : Feedback Control Information (FCI) : : :
1.1 关键字段详解
| 字段 | 长度 | 含义 |
|---|---|---|
| V (Version) | 2 bits | RTCP 版本号,固定为 2 |
| P (Padding) | 1 bit | 填充位,为 1 表示包尾有填充字节 |
| FMT (Feedback Message Type) | 5 bits | 反馈消息的子类型,具体含义取决于 PT 值 |
| PT (Payload Type) | 8 bits | 包类型。205 = 传输层反馈(RTPFB),206 = 负载特定反馈(PSFB) |
| length | 16 bits | RTCP 包长度(以 32 位字为单位,包含头部,再减 1) |
| SSRC of packet sender | 32 bits | 发送此反馈包的参与者的 SSRC |
| SSRC of media source | 32 bits | 所反馈的媒体流的 SSRC(某些消息中不使用,设为 0) |
| FCI | 可变 | 反馈控制信息,内容取决于 FMT |
PT 的两种类型:
PT = 205 (RTPFB):与传输层相关的反馈,如丢包重传、拥塞控制
PT = 206 (PSFB):与特定载荷相关的反馈,如关键帧请求
二、核心反馈消息类型详解
2.1 关键帧请求类
当接收端解码失败或加入会议时,需要请求新的关键帧。以下是三种常见的请求机制:
| 消息类型 | PT | FMT | 用途 | 语义差异 |
|---|---|---|---|---|
| PLI (Picture Loss Indication) | 206 | 1 | 因解码失败请求关键帧 | 因解码失败/丢包导致画面损坏时使用 |