ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RTSP协议分析

RTSP协议分析 一、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设置会话参数推荐的保活方法此外推流场景使用ANNOUNCEC→S和RECORDC→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; │ │ interleaved0-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.0S→C: RTSP/1.0 200 OK CSeq: 1 Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETERPublic头列出了服务器支持的所有方法。这一步可选但推荐执行用于确认服务器能力。2.3 DESCRIBE 示例请求媒体描述服务器返回 SDPC→S: DESCRIBE rtsp://192.168.1.100:554/live RTSP/1.0 CSeq: 2 Accept: application/sdpS→C: RTSP/1.0 200 OK CSeq: 2 Content-Type: application/sdp Content-Base: rtsp://192.168.1.100:554/live/ Content-Length: 376 v0 o- 123456 123456 IN IP4 192.168.1.100 sLive Stream t0 0 acontrol:* mvideo 0 RTP/AVP 96 artpmap:96 H264/90000 afmtp:96 packetization-mode1;profile-level-id42C01E;sprop-parameter-setsZ0LAHtoCgPaEAAAAwAQAAAMDGxQ,aM4yyA acontrol:streamid0 maudio 0 RTP/AVP 97 artpmap:97 MPEG4-GENERIC/48000/2 afmtp:97 profile-level-id1;modeAAC-hbr;sizelength13;indexlength3;indexdeltalength3;config1190 acontrol:streamid1关键头字段Content-Type: application/sdp响应体是 SDPContent-BaseSDP 中相对 control URL 的基础路径acontrol:streamid0视频流的控制标识后续 SETUP 使用2.4 SETUP 示例为每一路媒体流分别发送 SETUP。TCP 交织模式推荐C→S: SETUP rtsp://192.168.1.100:554/live/streamid0 RTSP/1.0 CSeq: 3 Transport: RTP/AVP/TCP;unicast;interleaved0-1UDP 模式C→S: SETUP rtsp://192.168.1.100:554/live/streamid0 RTSP/1.0 CSeq: 3 Transport: RTP/AVP;unicast;client_port49170-49171服务器响应S→C: RTSP/1.0 200 OK CSeq: 3 Transport: RTP/AVP/TCP;unicast;interleaved0-1 Session: 12345678关键点interleaved0-1RTP 走通道 0RTCP 走通道 1复用 RTSP 的 TCP 连接client_port49170-49171客户端指定接收端口UDP 模式Session: 12345678后续所有请求必须携带此标识音频流也需要单独 SETUP指定streamid1使用interleaved2-3。2.5 PLAY 示例C→S: PLAY rtsp://192.168.1.100:554/live RTSP/1.0 CSeq: 4 Session: 12345678 Range: npt0-Range: npt0-表示从头播放到尾。直播场景可省略 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: 12345678S→C: RTSP/1.0 200 OK CSeq: 6 Session: 12345678会话终止服务器释放所有资源。三、推流信令流程推流用ANNOUNCE和RECORD替代拉流的 DESCRIBE 和 PLAY3.1 ANNOUNCE 示例客户端主动告知服务器要推什么流SDP 由客户端生成C→S: ANNOUNCE rtsp://server.example.com/live/test RTSP/1.0 CSeq: 1 Content-Type: application/sdp Content-Length: 320 v0 o- 0 0 IN IP4 192.168.1.50 sLive Push t0 0 acontrol:* mvideo 0 RTP/AVP 96 artpmap:96 H264/90000 afmtp:96 packetization-mode1;profile-level-id42C01E;sprop-parameter-setsZ0LAHtoCgPaEAAAAwAQAAAMDGxQ,aM4yyA acontrol:streamid0S→C: RTSP/1.0 200 OK CSeq: 13.2 SETUP 与 RECORDSETUP 与拉流相同TCP 交织模式C→S: SETUP rtsp://server.example.com/live/test/streamid0 RTSP/1.0 CSeq: 2 Transport: RTP/AVP/TCP;unicast;interleaved0-1S→C: RTSP/1.0 200 OK CSeq: 2 Session: 87654321 Transport: RTP/AVP/TCP;unicast;interleaved0-1RECORD 启动推流C→S: RECORD rtsp://server.example.com/live/test RTSP/1.0 CSeq: 3 Session: 87654321S→C: RTSP/1.0 200 OK CSeq: 3 Session: 87654321之后客户端开始通过 RTP 发送媒体数据。推流与拉流的核心区别DESCRIBE服务器→客户端变为 ANNOUNCE客户端→服务器PLAY 变为 RECORD。四、SDP 参数逐项详解SDP 由会话级描述和媒体级描述组成格式为typevalue。4.1 会话级字段字段示例值含义v0SDP 版本固定为 0o- 123456 123456 IN IP4 192.168.1.100会话发起者用户名-会话 ID123456版本123456网络类型IN地址类型IP4地址sLive Stream会话名称t0 0起始时间 0结束时间 0无限制cIN IP4 0.0.0.0连接地址可选媒体级可覆盖acontrol:*聚合控制 URL*表示使用 Content-Base4.2 视频媒体行mvideo 0 RTP/AVP 96格式mmedia port proto fmt参数值含义mediavideo媒体类型port0端口占位符实际端口由 SETUP 协商protoRTP/AVPRTP over UDPRTP/AVP/TCP表示 TCPfmt96动态载荷类型96-1274.3 视频编码行artpmap:96 H264/90000格式artpmap:pt encoding/clock rate参数值含义pt96载荷类型与 m 行对应encodingH264RFC 6184 规定的编码名clock rate90000H.264 的 RTP 时钟固定为 90 kHz4.4 H.264 的afmtp行afmtp:96 packetization-mode1;profile-level-id42C01E;sprop-parameter-setsZ0LAHtoCgPaEAAAAwAQAAAMDGxQ,aM4yyApacketization-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常用 Level1E(3.0)、1F(3.1)、28(4.0)、29(4.1)、2A(4.2)。sprop-parameter-sets是逗号分隔的 Base64 编码 NALZ0LAHtoCgPaEAAAAwAQAAAMDGxQ解码后首字节0x67是SPSNAL type 7aM4yyA解码后首字节0x68是PPSNAL type 8为什么必须带外传输 SPS/PPS解码器在解码任何帧之前需要 SPS/PPS 初始化。带外传输可以避免等待首个 I 帧降低首帧延迟。4.5 音频媒体行maudio 0 RTP/AVP 97结构与视频相同载荷类型97与视频的96区分。4.6 音频编码行artpmap:97 MPEG4-GENERIC/48000/2参数值含义encodingMPEG4-GENERICAAC 在 RTP 中的标准名非AACclock rate48000采样率 48 kHz第 4 参数2声道数2 立体声4.7 AAC 的afmtp行afmtp:97 profile-level-id1;modeAAC-hbr;sizelength13;indexlength3;indexdeltalength3;config1190参数值含义profile-level-id1MPEG-4 Audio Profile Level 1modeAAC-hbrAAC 高比特率模式sizelength13AU-size 字段 13 比特indexlength3AU-Index 字段 3 比特indexdeltalength3AU-Index-delta 字段 3 比特config1190AudioSpecificConfig 十六进制config1190解码0x1190 0001 0001 1001 0000字段比特值含义audioObjectType5000102AAC-LCsamplingFrequencyIndex40011348000 HzchannelConfiguration400102立体声GASpecificConfig3000帧长 1024没有config参数AAC 解码器完全无法初始化。这是音频无声的最常见原因。4.8acontrol属性acontrol:streamid0用于指定媒体流的控制 URL。会话级acontrol:*表示聚合控制媒体级指定单个轨道的控制标识。后续 SETUP 请求的 URL 就是Content-Base 媒体级 control 值。五、Transport 头参数详解SETUP 请求的Transport头决定传输方式。5.1 TCP 交织模式Transport: RTP/AVP/TCP;unicast;interleaved0-1参数值含义协议RTP/AVP/TCPRTP over TCP传输类型unicast单播interleaved0-1RTP 通道 0RTCP 通道 1RTP 包直接嵌入 RTSP 的 TCP 流中用$字符 通道号标识。5.2 UDP 模式Transport: RTP/AVP;unicast;client_port49170-49171参数含义client_port49170-49171客户端接收端口RTP 49170RTCP 49171server_port6256-6257响应中服务器发送端口UDP 延迟更低但容易丢包TCP 更可靠但有队头阻塞。六、完整 SDP 示例与参数速查H.264 AAC 完整 SDPv0 o- 123456 123456 IN IP4 192.168.1.100 sLive Stream t0 0 acontrol:* mvideo 0 RTP/AVP 96 artpmap:96 H264/90000 afmtp:96 packetization-mode1;profile-level-id42C01E;sprop-parameter-setsZ0LAHtoCgPaEAAAAwAQAAAMDGxQ,aM4yyA acontrol:streamid0 maudio 0 RTP/AVP 97 artpmap:97 MPEG4-GENERIC/48000/2 afmtp:97 profile-level-id1;modeAAC-hbr;sizelength13;indexlength3;indexdeltalength3;config1190 acontrol:streamid1参数速查表SDP 字段视频H.264音频AAC载荷类型9697编码名H264MPEG4-GENERIC时钟频率9000048000关键 fmtp 参数packetization-mode,profile-level-id,sprop-parameter-setsconfig,mode,sizelength控制标识acontrol:streamid0acontrol:streamid1七、小结RTSP 的核心是信令与数据分离RTSP 负责控制OPTIONS/DESCRIBE/SETUP/PLAY/TEARDOWNRTP 负责传输媒体数据。拉流流程OPTIONS → DESCRIBE → SETUP → PLAY → TEARDOWN推流流程OPTIONS → ANNOUNCE → SETUP → RECORD → TEARDOWNSDP 核心m行定义媒体artpmap绑定编码afmtp携带 H.264 的 SPS/PPS 和 AAC 的config理解这些信令细节是排查 RTSP 兼容性问题的基础——从“花屏”到“无声”从“连接超时”到“会话断开”根源往往就在这些参数之中。
返回列表