RTP
通常基于 UDP 协议,但也支持 TCP 协议。它提供了端到端的实时传输数据的功能,但不包含资源预留存、不保证实时传输质量,这些功能由 WebRTC 实现。
#status / growing
#type / concept
#protocol / rtp
#tech / network
[!info] related notes
RTP
RTP(Real-time Transport Protocol,实时传输协议):为实时音视频数据提供端到端传输功能的协议。通常基于 UDP 协议,但也支持 TCP。
核心特点
- 面向实时应用:视频会议、直播、VoIP、在线游戏
- 不保证可靠性:不重传丢失的包,宁可丢帧也不阻塞
- 不预留资源:不保证带宽和延迟(QoS 由网络层或应用层处理)
- 依赖 RTCP 进行质量监控和同步
RTP 头部结构
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|X| CC |M| PT | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 字段 | 说明 |
|---|---|
| V(Version) | 版本号,当前为 2 |
| P(Padding) | 是否有填充字节 |
| X(Extension) | 是否有扩展头 |
| CC | CSRC 计数(参与混音的源数量) |
| M(Marker) | 标记位(如视频帧边界) |
| PT(Payload Type) | 载荷类型(如 H.264=96, Opus=111) |
| Sequence Number | 序列号,用于检测丢包和重排序 |
| Timestamp | 采样时间戳,用于播放同步和抖动缓冲 |
| SSRC | 同步源标识符,唯一标识一个媒体源 |
RTCP(RTP Control Protocol)
RTCP 是 RTP 的伴随协议,不传输媒体数据,而是传输控制信息:
| RTCP 报文类型 | 用途 |
|---|---|
| SR(Sender Report) | 发送方统计:发包数、字节数、时间戳 |
| RR(Receiver Report) | 接收方统计:丢包率、抖动、往返延迟 |
| SDES | 源描述(如 CNAME,用于跨会话标识) |
| BYE | 通知参与者离开会话 |
| APP | 应用自定义消息 |
RTCP 的关键作用:
- 质量监控:通过 RR 反馈丢包率和抖动,发送方可据此调整编码码率
- 唇音同步:通过 SR 中的 NTP 时间戳,将音频和视频流对齐
- 参与者识别:通过 SSRC 和 CNAME 关联多个 RTP 流
RTP 与 WebRTC 的关系
应用层 WebRTC(信令、媒体协商、NAT穿透)
|
传输层 SRTP(加密的RTP) + SCTP(数据通道)
|
会话层 RTCP(质量反馈、同步)
|
实时传输层 RTP(媒体帧封装、时间戳、序列号)
|
传输层 UDP(通常) / TCP(备选)
- WebRTC 使用 SRTP(Secure RTP)传输加密的音视频数据
- RTP 负责媒体帧的封装和时序,RTCP 负责质量反馈
- WebRTC 在 RTP 之上增加了:加密(DTLS-SRTP)、拥塞控制、自适应码率、NAT 穿透(ICE)
RTP 的典型应用场景
| 场景 | 说明 |
|---|---|
| 视频会议 | Zoom、Teams、Google Meet 底层均使用 RTP/SRTP |
| VoIP | SIP 协议建立通话后,用 RTP 传输语音 |
| 直播推流 | RTMP 可转为 RTP 分发(CDN 场景) |
| WebRTC | 浏览器实时通信的底层传输协议 |
| IPTV | 机顶盒接收 RTP 组播流 |