2. 实时通信基础

实时音视频通信与普通文件下载、网页浏览有着本质区别。文件下载可以容忍几秒甚至几分钟的延迟,只要最终数据完整即可;而一通语音或视频通话,如果延迟超过 400ms,双方就会明显感到"抢话";如果抖动超过 50ms,声音就会断续、画面就会卡顿。因此,理解实时通信的核心需求,是掌握 RTP/RTCP 协同机制的前提。

一、实时音视频传输的四大核心需求

实时音视频传输的核心诉求可以归纳为四个维度,它们彼此制约,构成了编解码与流控协同设计的出发点:

  • 低延迟(Latency):端到端延迟通常要求控制在 150ms 以内(ITU-T G.114 建议),超过 400ms 通话体验急剧下降。延迟来源包括采集、编码、网络传输、抖动缓冲、解码和渲染。
  • 低抖动(Jitter):网络到达间隔的波动必须被接收端抖动缓冲吸收,否则播放会出现断续。抖动缓冲越大越平滑,但延迟越高,二者需要权衡。
  • 容忍丢包(Loss Tolerance):实时流不能像 TCP 那样重传等待,丢包必须通过 FEC、NACK、PLC(丢包隐藏)等机制在有限时间内补偿。
  • 带宽自适应(Adaptive Bitrate):网络带宽动态变化时,编码码率、分辨率、帧率需要实时调整,避免拥塞崩溃或画质浪费。
核心矛盾:实时性要求"不等",可靠性要求"不丢",带宽要求"不浪费"。RTP/RTCP 的设计正是围绕这三者的平衡展开。

二、RTP/RTCP 在协议栈中的位置

RTP(Real-time Transport Protocol,RFC 3550)负责承载实时媒体数据,RTCP(RTP Control Protocol)负责传输控制信息(如丢包率、抖动、往返时延、接收报告)。二者通常成对使用,RTP 走偶数端口,RTCP 走相邻的奇数端口。

在协议栈中,RTP 位于应用层与传输层之间,它本身不负责可靠传输,而是依赖下层 UDP 提供多路复用与校验,同时借助 RTCP 反馈实现闭环控制。下图展示了 RTP/RTCP 与 UDP、TCP、SRTP 以及应用层编解码器之间的层次关系:

应用层:编解码器与媒体处理 H.264 / H.265 / VP8 / VP9 / AV1 · Opus / AAC / G.711 · 采集 · 编码 · 抖动缓冲 · 解码 · 渲染 RTP(媒体数据通道) 序列号 · 时间戳 · SSRC · 载荷类型 承载音视频帧,不保证可靠 RTCP(控制反馈通道) SR / RR · SDES · BYE · APP 丢包率 · 抖动 · RTT · 码率建议 反馈 SRTP / SRTCP(可选安全层) AES-CTR 加密 · HMAC-SHA1 认证 · 防重放 · 密钥管理(DTLS-SRTP / MIKEY) UDP(首选传输) 无连接 · 低开销 · 不重传 · 适合实时 TCP(备选/穿透) 可靠有序 · 队头阻塞 · 用于信令/穿透 IP 网络(互联网 / 专网 / 5G / Wi-Fi)

三、RTP 与 UDP、TCP、SRTP 的关系

RTP 本身不绑定传输层协议,但实践中几乎总是运行在 UDP 之上。原因在于 TCP 的重传与拥塞控制会引入不可预测的延迟,且 TCP 的队头阻塞(Head-of-Line Blocking)会导致一个丢包阻塞后续所有数据,这对实时流是致命的。UDP 虽然不保证可靠,但提供了低开销、低延迟的传输基础,把可靠性补偿交给上层(RTP/RTCP + FEC/NACK)按需处理。

SRTP(Secure RTP,RFC 3711)是在 RTP 之上增加的安全层,提供加密、消息认证和防重放保护。它不改变 RTP 的实时语义,只是对载荷和头部进行加密与完整性校验。WebRTC 强制使用 SRTP,密钥通过 DTLS 握手协商(DTLS-SRTP)。

协议 层次 可靠性 典型用途 与 RTP 的关系
UDP 传输层 不可靠、无连接 实时媒体承载 RTP 的首选下层
TCP 传输层 可靠、有序 信令、穿透、文件 一般不承载 RTP,仅作备选
RTP 应用层(媒体) 不保证可靠 音视频数据封装 核心媒体通道
RTCP 应用层(控制) 不保证可靠 QoS 反馈与同步 与 RTP 成对使用
SRTP 安全层 加密+认证 WebRTC、VoIP 加密 包裹 RTP/RTCP

四、典型应用场景与端口约定

RTP/RTCP 广泛应用于 VoIP、视频会议、直播、WebRTC、IPTV 等领域。不同场景对延迟、丢包、带宽的敏感度不同,但都依赖 RTP 的序列号与时间戳实现乱序重排和播放同步,依赖 RTCP 的接收报告实现闭环流控。

# 典型 RTP/RTCP 端口分配(RFC 3550 建议)
# RTP 使用偶数端口,RTCP 使用相邻奇数端口
m=audio 49170 RTP/AVP 0        # RTP 端口 49170
m=video 49172 RTP/AVP 96       # RTP 端口 49172
# 对应 RTCP 端口:49171、49173

# WebRTC 中 SRTP 的典型 SDP 片段
m=audio 9 UDP/TLS/RTP/SAVPF 111
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 nack
a=rtcp-fb:111 transport-cc

五、常见误区与复盘

误区一:用 TCP 传 RTP 就能解决丢包问题。TCP 重传会引入额外延迟,且队头阻塞会让后续已到达的数据无法交付,实时性反而更差。正确做法是 UDP + FEC/NACK + 自适应码率。
误区二:RTCP 只是"心跳"。RTCP 的 RR 报文携带丢包率、抖动、LSR/DLSR,是发送端调整码率和 FEC 强度的核心依据,没有 RTCP 就没有闭环流控。
复盘要点:实时通信的本质是在"延迟、丢包、带宽"三角中做动态平衡。RTP 负责"送得快",RTCP 负责"送得准",UDP 负责"送得轻",SRTP 负责"送得安全"。四者协同,才构成完整的实时音视频传输底座。