【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

posted @ 2025-05-18 22:55  Emma1111  阅读(431)  评论(0)    收藏  举报