☰
RTSP协议分析
2026/10/8 7:18:41 网站建设 项目流程

一、RTSP 方法总览

RTSP 是一种基于文本的控制协议,所有交互由请求(Request)和响应(Response)构成。方法定义在 RFC 2326 中,核心方法如下:

方法方向说明
OPTIONSC→S查询服务器支持的方法列表,也可用于保活
DESCRIBEC→S请求媒体流的 SDP 描述信息(编码类型、帧率等)
SETUPC→S配置传输方式(TCP/UDP),建立会话
PLAYC→S启动或恢复媒体传输
PAUSEC→S暂停媒体传输,可用 PLAY 恢复
TEARDOWNC→S终止会话,停止数据传输
GET_PARAMETERC→S获取会话参数,也常用于保活
SET_PARAMETERC→S设置会话参数,推荐的保活方法

此外推流场景使用ANNOUNCE(C→S)和RECORD(C→S)替代 DESCRIBE 和 PLAY。

二、拉流信令流程(客户端拉流)

2.1 完整信令时序

客户端 服务器 │ │ │──── OPTIONS rtsp://... RTSP/1.0 ────────►│ ① 查询方法 │◄─── 200 OK (Public: ...) ───────────────│ │ │ │──── DESCRIBE rtsp://... RTSP/1.0 ───────►│ ② 请求SDP │ Accept: application/sdp │ │◄─── 200 OK (SDP正文) ───────────────────│ │ │ │──── SETUP rtsp://.../track1 RTSP/1.0 ───►│ ③ 建立传输通道 │ Transport: RTP/AVP/TCP;unicast; │ │ interleaved=0-1 │ │◄─── 200 OK (Session: 12345678) ─────────│ │ │ │──── PLAY rtsp://... RTSP/1.0 ───────────►│ ④ 开始播放 │ Session: 12345678 │ │◄─── 200 OK ─────────────────────────────│ │ │ │◄═══════ RTP 数据流 ════════════════════│ ⑤ 媒体传输 │ │ │──── TEARDOWN rtsp://... RTSP/1.0 ───────►│ ⑥ 结束会话

2.2 OPTIONS 示例

客户端询问服务器支持哪些方法:

C→S: OPTIONS rtsp://192.168.1.100:554/live RTSP/1.0 CSeq: 1 User-Agent: MyClient/1.0
S→C: RTSP/1.0 200 OK CSeq: 1 Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER

Public头列出了服务器支持的所有方法。这一步可选,但推荐执行,用于确认服务器能力。

2.3 DESCRIBE 示例

请求媒体描述,服务器返回 SDP:

C→S: DESCRIBE rtsp://192.168.1.100:554/live RTSP/1.0 CSeq: 2 Accept: application/sdp
S→C: RTSP/1.0 200 OK CSeq: 2 Content-Type: application/sdp Content-Base: rtsp://192.168.1.100:554/live/ Content-Length: 376 v=0 o=- 123456 123456 IN IP4 192.168.1.100 s=Live Stream t=0 0 a=control:* m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1;profile-level-id=42C01E;sprop-parameter-sets=Z0LAHtoCgPaEAAAAwAQAAAMDGxQ=,aM4yyA== a=control:streamid=0 m=audio 0 RTP/AVP 97 a=rtpmap:97 MPEG4-GENERIC/48000/2 a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1190 a=control:streamid=1

关键头字段:

  • Content-Type: application/sdp:响应体是 SDP

  • Content-Base:SDP 中相对 control URL 的基础路径

  • a=control:streamid=0:视频流的控制标识,后续 SETUP 使用

2.4 SETUP 示例

为每一路媒体流分别发送 SETUP。TCP 交织模式(推荐):

C→S: SETUP rtsp://192.168.1.100:554/live/streamid=0 RTSP/1.0 CSeq: 3 Transport: RTP/AVP/TCP;unicast;interleaved=0-1

UDP 模式:

C→S: SETUP rtsp://192.168.1.100:554/live/streamid=0 RTSP/1.0 CSeq: 3 Transport: RTP/AVP;unicast;client_port=49170-49171

服务器响应:

S→C: RTSP/1.0 200 OK CSeq: 3 Transport: RTP/AVP/TCP;unicast;interleaved=0-1 Session: 12345678

关键点:

  • interleaved=0-1:RTP 走通道 0,RTCP 走通道 1,复用 RTSP 的 TCP 连接

  • client_port=49170-49171:客户端指定接收端口(UDP 模式)

  • Session: 12345678:后续所有请求必须携带此标识

音频流也需要单独 SETUP,指定streamid=1,使用interleaved=2-3。

2.5 PLAY 示例

C→S: PLAY rtsp://192.168.1.100:554/live RTSP/1.0 CSeq: 4 Session: 12345678 Range: npt=0-

Range: npt=0-表示从头播放到尾。直播场景可省略 Range。

服务器响应后,开始通过 RTP 发送媒体数据。

2.6 PAUSE 与恢复

C→S: PAUSE rtsp://192.168.1.100:554/live RTSP/1.0 CSeq: 5 Session: 12345678

恢复时重新发送 PLAY(可不带 Range,从暂停点继续)。

2.7 TEARDOWN 示例

C→S: TEARDOWN rtsp://192.168.1.100:554/live RTSP/1.0 CSeq: 6 Session: 12345678
S→C: RTSP/1.0 200 OK CSeq: 6 Session: 12345678

会话终止,服务器释放所有资源。

三、推流信令流程

推流用ANNOUNCE和RECORD替代拉流的 DESCRIBE 和 PLAY:

3.1 ANNOUNCE 示例

客户端主动告知服务器要推什么流,SDP 由客户端生成:

C→S: ANNOUNCE rtsp://server.example.com/live/test RTSP/1.0 CSeq: 1 Content-Type: application/sdp Content-Length: 320 v=0 o=- 0 0 IN IP4 192.168.1.50 s=Live Push t=0 0 a=control:* m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1;profile-level-id=42C01E;sprop-parameter-sets=Z0LAHtoCgPaEAAAAwAQAAAMDGxQ=,aM4yyA== a=control:streamid=0
S→C: RTSP/1.0 200 OK CSeq: 1

3.2 SETUP 与 RECORD

SETUP 与拉流相同(TCP 交织模式):

C→S: SETUP rtsp://server.example.com/live/test/streamid=0 RTSP/1.0 CSeq: 2 Transport: RTP/AVP/TCP;unicast;interleaved=0-1
S→C: RTSP/1.0 200 OK CSeq: 2 Session: 87654321 Transport: RTP/AVP/TCP;unicast;interleaved=0-1

RECORD 启动推流:

C→S: RECORD rtsp://server.example.com/live/test RTSP/1.0 CSeq: 3 Session: 87654321
S→C: RTSP/1.0 200 OK CSeq: 3 Session: 87654321

之后客户端开始通过 RTP 发送媒体数据。推流与拉流的核心区别:DESCRIBE(服务器→客户端)变为 ANNOUNCE(客户端→服务器),PLAY 变为 RECORD。

四、SDP 参数逐项详解

SDP 由会话级描述和媒体级描述组成,格式为<type>=<value>。

4.1 会话级字段

字段示例值含义
v=0SDP 版本,固定为 0
o=- 123456 123456 IN IP4 192.168.1.100会话发起者:用户名-,会话 ID123456,版本123456,网络类型IN,地址类型IP4,地址
s=Live Stream会话名称
t=0 0起始时间 0,结束时间 0(无限制)
c=IN IP4 0.0.0.0连接地址(可选,媒体级可覆盖)
a=control:*聚合控制 URL,*表示使用 Content-Base

4.2 视频媒体行m=video 0 RTP/AVP 96

格式:m=<media> <port> <proto> <fmt>

参数值含义
<media>video媒体类型
<port>0端口占位符,实际端口由 SETUP 协商
<proto>RTP/AVPRTP over UDP;RTP/AVP/TCP表示 TCP
<fmt>96动态载荷类型(96-127)

4.3 视频编码行a=rtpmap:96 H264/90000

格式:a=rtpmap:<pt> <encoding>/<clock rate>

参数值含义
<pt>96载荷类型,与 m= 行对应
<encoding>H264RFC 6184 规定的编码名
<clock rate>90000H.264 的 RTP 时钟固定为 90 kHz

4.4 H.264 的a=fmtp行

a=fmtp:96 packetization-mode=1;profile-level-id=42C01E;sprop-parameter-sets=Z0LAHtoCgPaEAAAAwAQAAAMDGxQ=,aM4yyA==

packetization-mode:

值含义
0单 NAL 模式,大帧会被拒绝
1非交错分片模式(FU-A),主流选择
2交错模式,极少使用

profile-level-id是 3 字节十六进制:

字节示例42C01E含义
第 1 字节42= 66Baseline Profile
第 2 字节C0= 11000000Constrained Baseline(约束标志)
第 3 字节1E= 30Level 3.0

常用 Level:1E(3.0)、1F(3.1)、28(4.0)、29(4.1)、2A(4.2)。

sprop-parameter-sets是逗号分隔的 Base64 编码 NAL:

  • Z0LAHtoCgPaEAAAAwAQAAAMDGxQ=解码后首字节0x67,是SPS(NAL type 7)

  • aM4yyA==解码后首字节0x68,是PPS(NAL type 8)

为什么必须带外传输 SPS/PPS?解码器在解码任何帧之前需要 SPS/PPS 初始化。带外传输可以避免等待首个 I 帧,降低首帧延迟。

4.5 音频媒体行m=audio 0 RTP/AVP 97

结构与视频相同,载荷类型97与视频的96区分。

4.6 音频编码行a=rtpmap:97 MPEG4-GENERIC/48000/2

参数值含义
<encoding>MPEG4-GENERICAAC 在 RTP 中的标准名(非AAC)
<clock rate>48000采样率 48 kHz
第 4 参数2声道数:2 立体声

4.7 AAC 的a=fmtp行

a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1190
参数值含义
profile-level-id1MPEG-4 Audio Profile Level 1
modeAAC-hbrAAC 高比特率模式
sizelength13AU-size 字段 13 比特
indexlength3AU-Index 字段 3 比特
indexdeltalength3AU-Index-delta 字段 3 比特
config1190AudioSpecificConfig 十六进制

config=1190解码:

0x1190 = 0001 0001 1001 0000
字段比特值含义
audioObjectType500010=2AAC-LC
samplingFrequencyIndex40011=348000 Hz
channelConfiguration40010=2立体声
GASpecificConfig3000帧长 1024

没有config参数,AAC 解码器完全无法初始化。这是音频无声的最常见原因。

4.8a=control属性

a=control:streamid=0

用于指定媒体流的控制 URL。会话级a=control:*表示聚合控制,媒体级指定单个轨道的控制标识。后续 SETUP 请求的 URL 就是Content-Base + 媒体级 control 值。

五、Transport 头参数详解

SETUP 请求的Transport头决定传输方式。

5.1 TCP 交织模式

Transport: RTP/AVP/TCP;unicast;interleaved=0-1
参数值含义
协议RTP/AVP/TCPRTP over TCP
传输类型unicast单播
interleaved0-1RTP 通道 0,RTCP 通道 1

RTP 包直接嵌入 RTSP 的 TCP 流中,用$字符 + 通道号标识。

5.2 UDP 模式

Transport: RTP/AVP;unicast;client_port=49170-49171
参数含义
client_port=49170-49171客户端接收端口:RTP 49170,RTCP 49171
server_port=6256-6257(响应中)服务器发送端口

UDP 延迟更低,但容易丢包;TCP 更可靠,但有队头阻塞。

六、完整 SDP 示例与参数速查

H.264 + AAC 完整 SDP:

v=0 o=- 123456 123456 IN IP4 192.168.1.100 s=Live Stream t=0 0 a=control:* m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1;profile-level-id=42C01E;sprop-parameter-sets=Z0LAHtoCgPaEAAAAwAQAAAMDGxQ=,aM4yyA== a=control:streamid=0 m=audio 0 RTP/AVP 97 a=rtpmap:97 MPEG4-GENERIC/48000/2 a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1190 a=control:streamid=1

参数速查表:

SDP 字段视频(H.264)音频(AAC)
载荷类型9697
编码名H264MPEG4-GENERIC
时钟频率9000048000
关键 fmtp 参数packetization-mode,profile-level-id,sprop-parameter-setsconfig,mode,sizelength
控制标识a=control:streamid=0a=control:streamid=1

七、小结

RTSP 的核心是信令与数据分离:RTSP 负责控制(OPTIONS/DESCRIBE/SETUP/PLAY/TEARDOWN),RTP 负责传输媒体数据。

  • 拉流流程:OPTIONS → DESCRIBE → SETUP → PLAY → TEARDOWN

  • 推流流程:OPTIONS → ANNOUNCE → SETUP → RECORD → TEARDOWN

  • SDP 核心:m=行定义媒体,a=rtpmap绑定编码,a=fmtp携带 H.264 的 SPS/PPS 和 AAC 的config

理解这些信令细节,是排查 RTSP 兼容性问题的基础——从“花屏”到“无声”,从“连接超时”到“会话断开”,根源往往就在这些参数之中。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询