RTSPReal-Time Streaming Protocol是一种用于控制流媒体服务器的应用层协议工作在 TCP/IP 之上默认端口554RTSP或322RTSPS。一协议格式1.1 RTSP 请求格式┌─────────────────────────────────────────────────────────────────┐ │ RTSP 请求格式 │ ├─────────────────────────────────────────────────────────────────┤ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 请求行 (Request Line) │ │ │ │ ┌─────────┬───────────────────────┬──────────────────┐ │ │ │ │ │ METHOD │ URL │ PROTOCOL │ │ │ │ │ │ (命令) │ (资源路径) │ (RTSP/1.0) │ │ │ │ │ └─────────┴───────────────────────┴──────────────────┘ │ │ │ │ 示例: PLAY rtsp://server:554/stream RTSP/1.0 │ │ │ └──────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 头部字段 (Headers) │ │ │ │ ┌────────────────────────────────────────────────────┐ │ │ │ │ │ CSeq: 3 │ │ │ ← 必需序列号 │ │ │ Session: 1234567890 │ │ │ ← 会话标识 │ │ │ Transport: RTP/AVP/UDP;client_port1234-1235 │ │ │ ← 传输参数 │ │ │ Range: npt0.0- │ │ │ ← 时间范围 │ │ │ Scale: 1.0 │ │ │ ← 播放速度 │ │ │ Authorization: Basic YWRtaW46cGFzc3dvcmQ │ │ │ ← 认证信息 │ │ │ Content-Type: application/sdp │ │ │ ← 内容类型 │ │ │ Content-Length: 1234 │ │ │ ← 内容长度 │ │ └────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 空行 (CRLF) │ │ ← 必需分隔头部和体 │ └──────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 消息体 (Body) [可选] │ │ │ │ (如 DESCRIBE 响应中的 SDP 描述、SET_PARAMETER 的参数) │ │ │ └──────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘1.2 RTSP 响应格式┌─────────────────────────────────────────────────────────────────┐ │ RTSP 响应格式 │ ├─────────────────────────────────────────────────────────────────┤ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 状态行 (Status Line) │ │ │ │ ┌───────────┬────────────┬───────────────────────────┐ │ │ │ │ │ PROTOCOL │ STATUS CODE │ REASON PHRASE │ │ │ │ │ │ RTSP/1.0 │ 200 │ OK │ │ │ │ │ └───────────┴────────────┴───────────────────────────┘ │ │ │ │ 示例: RTSP/1.0 200 OK │ │ │ └──────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 头部字段 (Headers) │ │ │ │ ┌────────────────────────────────────────────────────┐ │ │ │ │ │ CSeq: 3 │ │ │ ← 对应请求的序列号 │ │ │ Session: 1234567890;timeout60 │ │ │ ← 会话ID和超时 │ │ │ Date: Wed, 04 Jul 2026 12:00:00 GMT │ │ │ ← 服务器时间 │ │ │ Content-Type: application/sdp │ │ │ ← 内容类型 │ │ │ Content-Length: 512 │ │ │ ← 内容长度 │ │ │ Transport: RTP/AVP/UDP;client_port1234-1235; │ │ │ ← 协商后的传输参数 │ │ │ server_port5000-5001;ssrc0x12345678 │ │ │ │ │ └────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 空行 (CRLF) │ │ ← 必需 │ └──────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 消息体 (Body) [可选] │ │ │ │ (如 DESCRIBE 响应中的 SDP) │ │ │ └──────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘1.2 RTSP协议交互┌─────────────────────────────────────────────────────────────┐ │ RTSP 会话流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Client Server │ │ │ │ │ │ │─── OPTIONS ───────────→│ │ │ │←── 200 OK ─────────────│ 获取支持的命令列表 │ │ │ │ │ │ │─── DESCRIBE ──────────→│ │ │ │←── 200 OK (SDP) ──────│ 获取媒体描述 │ │ │ │ │ │ │─── SETUP (track1) ────→│ │ │ │←── 200 OK (Session)───│ 建立RTP通道 │ │ │ │ │ │ │─── SETUP (track2) ────→│ (如有多个媒体轨道) │ │ │←── 200 OK ─────────────│ │ │ │ │ │ │ │─── PLAY ──────────────→│ │ │ │←── 200 OK ─────────────│ 开始流媒体传输 │ │ │ │ │ │ │←── RTP/RTCP ───────────│ 数据传输 │ │ │ │ │ │ │─── TEARDOWN ──────────→│ │ │ │←── 200 OK ─────────────│ 终止会话 │ │ │ └─────────────────────────────────────────────────────────────┘命令用途客户端方法OPTIONS查询服务器支持的命令sendOptionsCommand()DESCRIBE获取媒体会话描述SDPsendDescribeCommand()SETUP建立媒体流传输通道sendSetupCommand()PLAY开始播放sendPlayCommand()PAUSE暂停播放sendPauseCommand()TEARDOWN终止会话sendTeardownCommand()GET_PARAMETER获取会话参数sendGetParameterCommand()SET_PARAMETER设置会话参数sendSetParameterCommand()二、RTSP交互信息2.1 RTSP状态码状态码含义说明200OK请求成功400Bad Request请求格式错误401Unauthorized需要认证404Not Found资源不存在405Method Not Allowed不支持的方法451Parameter Not Understood参数无法理解500Internal Server Error服务器内部错误501Not Implemented功能未实现2.2 RTSP字段介绍头部字段作用是否必需CSeq请求序列号用于请求-响应配对必需Session会话标识符用于关联多个请求SETUP后必需Transport传输参数协议、端口等SETUP必需Range播放时间范围PLAY可选Scale播放速度1.0为正常PLAY可选Authorization认证凭证认证时必需Content-Type消息体类型有消息体时必需Content-Length消息体长度有消息体时必需2.3 RTSP URL协议结构rtsp[s]://[username[:password]]host[:port]/path ↓ ↓ ↓ ↓ ↓ 协议类型 认证信息 主机 端口 资源路径 (554/322) 示例: rtsp://admin:password192.168.1.1:554/cam/realmonitor?channel1 rtsps://secure.example.com:322/live/stream12.3.1 RTSP客户端构建流程char const* const cmdFmt %s %s %s\r\n // METHOD URL PROTOCOL CSeq: %d\r\n // 序列号必需 %s // 认证信息 %s // User-Agent %s // Require %s // 额外头部Transport/Session等 %s // Content-Length \r\n %s; // 请求体 // 示例SETUP 请求 // SETUP rtsp://server:554/stream/track1 RTSP/1.0\r\n // CSeq: 3\r\n // Transport: RTP/AVP/UDP;client_port1234-1235\r\n // \r\n2.3.2 解析流程步骤解析内容关键逻辑1跳过开头空白忽略\r\n\t2提取命令名读取到第一个空格为止3识别协议类型检测rtsp://或rtsps://4提取URL路径解析RTSP/1.0之前的URL部分5解析 CSeq查找CSeq:头提取序列号6解析 Session查找Session:头可选7解析 Content-Length查找Content-Length:头可选2.3.3 Range 范围参数解析支持多种时间格式格式示例说明NPT (Normal Play Time)npt10.0-20.0相对时间单位秒NPT 带时分秒npt00:01:30-00:02:00时:分:秒格式NPT nownptnow-从当前时刻开始Clockclock20230101T120000Z-UTC 绝对时间SMPTEsmpte...电影时间码仅支持未解析2.4 协议状态转换┌──────────────┐ │ 已断开 │ └──────┬───────┘ │ TCP连接 ▼ ┌──────────────┐ │ 已连接 │◄─────────────────────┐ └──────┬───────┘ │ │ OPTIONS/DESCRIBE │ ▼ │ ┌──────────────┐ │ │ 会话协商 │ │ └──────┬───────┘ │ │ SETUP │ ▼ │ ┌──────────────┐ │ │ 已建立 │◄───────┐ │ └──────┬───────┘ │ │ │ PLAY │ │ ▼ │ │ ┌──────────────┐ │ │ │ 播放中 │────────┤ │ └──────┬───────┘ │ │ │ PAUSE/PLAY │ │ ▼ │ │ ┌──────────────┐ │ │ │ 已暂停 │────────┘ │ └──────┬───────┘ │ │ TEARDOWN │ ▼ │ ┌──────────────┐──────────────────────┘ │ 已断开 │ └──────────────┘三、协议详细步骤3.1 TCP连接建立步骤操作说明1-1客户端发起 TCP 连接连接到服务器默认端口554RTSP或322RTSPS1-2TCP 三次握手完成建立可靠的传输通道客户端 → SYN → 服务器 客户端 ← SYNACK ← 服务器 客户端 → ACK → 服务器3.2OPTIONS - 查询服务器能力作用客户端查询服务器支持的 RTSP 命令列表。3.2.1 客户端请求OPTIONS rtsp://192.168.1.1:554/stream RTSP/1.0 CSeq: 1 User-Agent: LIVE555 Streaming Media v2026.07.043.2.2 服务器响应RTSP/1.0 200 OK CSeq: 1 Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER Date: Wed, 04 Jul 2026 12:00:00 GMT3.3DESCRIBE - 获取媒体描述作用获取媒体会话的 SDPSession Description Protocol描述包含媒体类型视频/音频编码格式H264、PCMU等RTP 负载类型时钟频率客户端请求DESCRIBE rtsp://192.168.1.1:554/stream RTSP/1.0 CSeq: 2 Accept: application/sdp User-Agent: LIVE555 Streaming Media v2026.07.04服务器响应包含 SDPRTSP/1.0 200 OK CSeq: 2 Content-Type: application/sdp Content-Length: 384 Date: Wed, 04 Jul 2026 12:00:01 GMT v0 o- 12345 67890 IN IP4 192.168.1.1 sLive Stream iH264 Video Stream t0 0 atool:LIVE555 Streaming Media mvideo 0 RTP/AVP 96 cIN IP4 0.0.0.0 artpmap:96 H264/90000 afmtp:96 profile-level-id4D401F;sprop-parameter-setsZ00AHukCgH8BQAAAAwAAA... maudio 0 RTP/AVP 0 cIN IP4 0.0.0.0 artpmap:0 PCMU/80003.4SETUP - 建立传输通道作用协商传输参数建立 RTP/RTCP 通道指定客户端端口范围RTP: 1234, RTCP: 1235服务器分配端口RTP: 5000, RTCP: 5001返回Session ID后续请求必需多轨道处理如果有多个媒体轨道如视频音频需要为每个轨道发送独立的 SETUP 请求。客户端请求视频轨道SETUP rtsp://192.168.1.1:554/stream/track1 RTSP/1.0 CSeq: 3 Transport: RTP/AVP/UDP;client_port1234-1235 User-Agent: LIVE555 Streaming Media v2026.07.04服务器响应RTSP/1.0 200 OK CSeq: 3 Session: 8976543210;timeout60 Transport: RTP/AVP/UDP;client_port1234-1235;server_port5000-5001;ssrc0x12345678 Date: Wed, 04 Jul 2026 12:00:02 GMT3.5PLAY - 开始播放关键参数Range播放范围npt0.0-表示从开始播放到结束Scale播放速度1.0 正常速度RTP-Info包含 RTP 序列号和时间戳客户端请求PLAY rtsp://192.168.1.1:554/stream RTSP/1.0 CSeq: 4 Session: 8976543210 Range: npt0.0- Scale: 1.0 User-Agent: LIVE555 Streaming Media v2026.07.04服务器响应RTSP/1.0 200 OK CSeq: 4 Session: 8976543210 RTP-Info: urlrtsp://192.168.1.1:554/stream/track1;seq12345;rtptime987654321 Date: Wed, 04 Jul 2026 12:00:03 GMT3.6RTP/RTCP 数据传输PLAY 之后服务器开始通过 RTP/RTCP 传输媒体数据RTCP 功能SRSender Report发送方报告包含发送统计RRReceiver Report接收方报告包含丢包率、延迟等SDESSource Description源描述信息BYE结束传输通知┌─────────────────────────────────────────────────────────────────┐ │ RTP/RTCP 数据传输 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 服务器 ──► RTP (视频数据) ──► 客户端 (UDP 5000) │ │ 服务器 ──► RTCP (控制信息) ──► 客户端 (UDP 5001) │ │ │ │ RTP 包结构: │ │ ┌────────┬────────┬────────┬────────┬──────────────┐ │ │ │版本(2) │填充标志│扩展标志│CSRC计数│序列号(16位) │ │ │ ├────────┼────────┼────────┼────────┼──────────────┤ │ │ │ 时间戳(32位) │ SSRC(32位) │ │ │ ├─────────────────────────────────┴──────────────┤ │ │ │ RTP 负载数据 │ │ │ │ (H264 NAL单元 / PCMU音频) │ │ │ └──────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘3.7TEARDOWN - 结束会话作用释放会话资源关闭 RTP/RTCP 通道。客户端请求TEARDOWN rtsp://192.168.1.1:554/stream RTSP/1.0 CSeq: 5 Session: 8976543210 User-Agent: LIVE555 Streaming Media v2026.07.04服务器响应RTSP/1.0 200 OK CSeq: 5 Session: 8976543210 Date: Wed, 04 Jul 2026 12:05:00 GMT四、