【rtspserver】协议篇 - RTP/RTCP协议
一、RTP协议
1.RTP概述
RTP是实时传输协议,用于在IP网络上传输音频、视频等实时数据。
核心特性:
- 工作在传输层之上,通常基于UDP
- 提供时间戳,序列号等机制解决实时传输问题
- 不保证服务质量(QoS),但提供必要信息让应用层实现QoS
- 通常使用偶数端口,对应的RTCP使用相邻奇数端口
2.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 (32位)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| CSRC |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| payload data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
各字段说明:
- V(2位):版本号(通常为2)
- P(1位):填充标志,数据末尾有填充字节时为1
- X(1位):扩展标志,存在扩展头部时为1
- CC(4位):CSRC计数(贡献源标识符数量)
- M(1位):标记位,视频帧结束等特殊含义
- PT(7位):负载类型(Payload Type),标识编码格式
- 序列号(16位):每发送一个RTP包递增1,用于检测丢包
- 时间戳(32位):反映采样时刻,用于同步和抖动计算
- SSRC(32位):同步源标识符,唯一标识数据源
- CSRC(32位):贡献源标识符列表(混合器使用)
3.RTP负载类型示例
| 值 | 媒体类型 | 编码格式 |
|---|---|---|
| 0 | PCMU音频 | G.711 μ-law |
| 8 | PCMA音频 | G.711 A-law |
| 26 | JPEG视频 | JPEG |
| 31 | H.261视频 | H.261 |
| 32 | MPV视频 | MPEG-1/2 |
| 33 | MP2T视频 | MPEG-2 TS |
| 96 | 动态类型(H.264等) | 通过SDP定义 |
二、RTCP协议
1.RTCP协议概述
RTCP(RTP Control Protocol)是RTP的控制协议,用于提供传输质量反馈和会话管理。
核心功能:
- Qos监控:报告数据传输统计信息()
- 源标识:携带用户名称等描述信息
- 会话控制:估算参与者数量,调整报告间隔
- 同步:实现多流同步(如音视频同步)
2.RTCP报文类型
| 类型 | 名称 | 功能描述 |
|---|---|---|
| 200 | SR(Sender Report) | 发送端报告,含发送统计信息 |
| 201 | RR(Receiver Report) | 接收端报告,含接收质量反馈 |
| 202 | SDES(Source Desc.) | 源描述项,含CNAME等标识信息 |
| 203 | BYE | 会话结束通知 |
| 204 | APP | 应用特定功能 |
| 205 | RTPFB | 传输层反馈(如NACK) |
| 206 | PSFB | 负载特定反馈(如PLI, SLI) |
3.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(32位)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P| RC | PT=SR=200 | length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC of sender |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NTP timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NTP timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RTP timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sender's packet count |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sender's octet count |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
关键字段:
- NTP时间戳:64位,绝对时间(秒+小数秒)
- RTP时间戳:对应NTP时间的RTP时间戳
- 包计数:从开始发送至今的RTP包总数
- 字节计数:从开始发送至今的负载字节总数
4.RTCP RR报文格式(接收报告块)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC_1 (SSRC of first source) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| fraction lost | cumulative number of packets lost |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| extended highest sequence number received |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| interarrival jitter |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| last SR (LSR) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| delay since last SR (DLSR) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
关键指标:
- 丢包率:8位顶点小数(fraction lost)
- 累积丢包:24位整数
- 抖动:32位,估算的统计方差
- 最后SR时间:记录最后收到的SR的NTP时间戳
三、RTP/RTC工作流程
1. RTP/RTCP工作流程
1.初始化
- 通过SDP协商RTP/RTCP端口和参数
- 通常RTP使用偶数端口,RTCP使用相邻奇数端口
2.数据传输阶段
- 发送端定期(通常每5秒)发送RTCP SR报告
- 接收端定期发送RTCP PP报告
- 所有参与者定期发送SDES(含CNAME)
3.反馈调节
- 根据参与者数量自动调整报告间隔(带宽占用<5%)
- 接收端通过NACK等报报文请求重传关键帧
4.同步示例
音频流: RTP时间戳时钟频率=8000Hz
视频流: RTP时间戳时钟频率=90000Hz
RTCP SR提供NTP时间与RTP时间的映射关系
播放器通过这两个映射实现音画同步
RTP协议中文版可参考:
https://gitcode.com/Open-source-documentation-tutorial/4fd8a/blob/main/rtp协议中文版.pdf

浙公网安备 33010602011771号