3. RTCP协议基础

RTP负责把音频、视频的媒体数据从发送端送到接收端,但它本身只关心“怎么把包送出去”,并不负责告诉对端“我收到了多少、丢了多少、抖动多大、音视频是否对得上”。这些控制与反馈信息,由与RTP配套的RTCP(RTP Control Protocol,RTP控制协议)来承担。理解RTCP,是解决音画不同步问题的关键一步,因为音画不同步的很多判断依据,恰恰来自RTCP报告中的时间戳、丢包和抖动数据。

一、RTCP的核心作用与设计思想

RTCP并不传输媒体数据,它传输的是控制信息。它和RTP通常使用相邻的端口,例如RTP用5004、RTCP用5005。RTCP的设计思想可以概括为三点:

  • 反馈质量:接收端通过RTCP告诉发送端网络质量,如丢包率、抖动、往返时延。
  • 标识身份:通过SDES报文携带CNAME等标识,让不同媒体流能够被关联到同一个发送者。
  • 同步媒体:通过SR中的NTP时间戳和RTP时间戳,把音频和视频映射到同一时间轴,这是解决音画不同步的核心机制。
RTCP不是“可选项”。在音视频同步场景中,没有RTCP的SR/RR信息,接收端很难准确计算音视频之间的相对延迟,也就难以做精准的唇音同步。

二、RTCP报文类型总览

RTCP通过报文类型字段区分不同功能。常见类型如下表所示:

类型值 缩写 名称 主要作用
200 SR Sender Report 发送者报告,携带发送统计和NTP/RTP时间戳映射
201 RR Receiver Report 接收者报告,反馈丢包、抖动、最高序列号等
202 SDES Source Description 源描述,携带CNAME、NAME、EMAIL等
203 BYE Goodbye 表示某个SSRC退出会话
204 APP Application-defined 应用自定义扩展报文

这些报文通常被封装在一个复合RTCP包中一起发送。一个复合包中至少应包含SR或RR,再按需附加SDES、BYE、APP等。

三、SR与RR:发送者报告与接收者报告

SR(Sender Report)由正在发送媒体数据的端点发出。它包含两部分关键信息:一是发送统计,如发送的RTP包数、发送的字节数;二是NTP时间戳与RTP时间戳的对应关系。这个对应关系是音视频同步的基石:接收端拿到音频SR和视频SR后,可以把两路RTP时间戳换算到同一个NTP墙上时钟,从而判断音频和视频是否在同一时刻播放。

RR(Receiver Report)由接收端发出,用于反馈接收质量。它不包含发送者的时间戳映射,但包含每个SSRC的接收统计,例如:

  • 丢包率(fraction lost)
  • 累计丢包数(cumulative number of packets lost)
  • 最高扩展序列号(extended highest sequence number received)
  • 到达间隔抖动(interarrival jitter)
  • 上次SR时间戳(last SR timestamp, LSR)
  • 上次SR到现在的延迟(delay since last SR, DLSR)

其中LSR和DLSR配合发送端的当前时间,可以计算往返时延RTT。RTT和抖动数据虽然不直接等于音画不同步,但它们会影响播放缓冲策略,进而影响同步效果。

SR和RR的区别可以这样记:SR是“我发了什么,我的时间轴是什么”;RR是“我收到了什么,网络质量怎么样”。音画同步主要依赖SR中的时间戳映射,而网络自适应主要依赖RR中的丢包和抖动。

四、SDES、BYE与APP

SDES(Source Description)用于描述源。最重要的字段是CNAME(Canonical Name)。CNAME是一个稳定标识,即使SSRC因冲突或重启发生变化,CNAME仍保持不变。在音视频同步中,接收端通过CNAME判断某路音频和某路视频是否来自同一个终端,从而把它们归入同一同步组。

BYE表示某个SSRC即将退出会话。接收端收到BYE后,可以释放对应资源,停止等待该流的数据。对于音画同步而言,如果视频流发送BYE而音频流仍在继续,接收端需要及时调整同步策略,避免继续等待已经结束的视频流。

APP是应用自定义报文,允许厂商或应用扩展RTCP功能。例如某些实时通信系统会用APP报文传递自定义的同步辅助信息或控制指令。APP报文不改变RTCP基本框架,但为特定场景提供了灵活性。

五、RTCP复合包与发送流程

RTCP报文通常按复合包形式发送,典型结构如下:

复合RTCP包
├── SR 或 RR(必须)
├── SDES(通常包含CNAME)
├── BYE(可选,退出时)
└── APP(可选,应用扩展)

发送周期由RTCP带宽控制,通常占会话带宽的5%左右。接收端收到复合包后,先解析SR/RR获取同步和统计信息,再解析SDES获取CNAME,最后根据BYE和APP做相应处理。

六、案例:用SR/RR判断音画不同步

假设一个视频会议终端同时发送音频和视频。音频SR中NTP时间为0xE8A1_0000,对应RTP时间戳为160000;视频SR中NTP时间为0xE8A1_0000,对应RTP时间戳为90000。接收端收到后,可以把两路RTP时间戳都映射到同一个NTP时间轴。如果音频和视频的NTP映射关系出现偏差,或者RR中视频抖动明显大于音频,就可能导致播放时音画不同步。

再比如,接收端发现视频RR中丢包率高达8%,而音频RR丢包率只有1%。视频解码器可能因为丢包而等待重传或触发缓冲,导致视频播放时间被拉长,而音频继续正常播放,最终表现为“声音先到、画面滞后”。这时RTCP报告就是定位问题的重要证据。

七、常见误区与复盘

  • 误区一:只关注RTP,忽略RTCP。没有RTCP,接收端无法获得NTP/RTP映射,音视频同步只能靠猜。
  • 误区二:认为SR只用于发送端。接收端也会解析SR,并利用其中的LSR/DLSR计算RTT。
  • 误区三:忽略CNAME。SSRC可能变化,CNAME才是关联音视频流的稳定标识。
  • 误区四:把RTCP当成媒体数据。RTCP不承载音频视频负载,它只承载控制与反馈信息。
在排障时,如果发现音画不同步,先检查RTCP的SR/RR是否正常收发。若SR缺失或时间戳映射异常,优先排查RTCP端口、带宽限制和防火墙策略,而不是直接怀疑编解码器。
RTCP 报文类型与音视频同步关系 SR 发送者报告 类型 200 NTP ↔ RTP 时间戳映射 发送包数 / 字节数 RR 接收者报告 类型 201 丢包率 / 抖动 / RTT LSR / DLSR SDES 源描述 类型 202 CNAME 稳定标识 关联音视频流 BYE 类型 203 SSRC 退出 释放资源 APP 类型 204 应用自定义扩展 复合 RTCP 包结构 SR / RR 必须 SDES 含 CNAME BYE 可选 APP 可选 音视频同步关键路径 音频 SR NTP + RTP 时间戳 视频 SR NTP + RTP 时间戳 统一 NTP 时间轴 映射与对齐 判断音画是否同步 结合 RR 丢包 / 抖动

总结来说,RTCP是RTP的“控制面”。SR提供发送者的时间基准,RR提供接收质量反馈,SDES用CNAME关联音视频流,BYE负责退出,APP用于扩展。只有把这些报文配合起来看,才能在音画不同步问题中快速定位是时间戳映射错误、网络丢包抖动,还是流关联判断失误。