【rtspserver】协议篇 - RTSP协议
1.RTSP协议概述
RTSP标准手册:
https://datatracker.ietf.org/doc/html/rfc2326
RTSP(Real Time Streaming Protocaol),RFC2326,实时流传输协议,属于应用层协议,此协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,使用TCP和UDP完成数据传输
Real-time Transport Protocol或简写RTP,RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它是创建在UDP协议之上
Real-time Transport Control Protocol或RTP Control Protocol或简写RTCP)是实时传输协议(RTP)的一个姐妹协议。RTCP由RFC 3550定义(取代作废的RFC 1889)。RTP 使用一个 偶数 UDP port ;而RTCP 则使用 RTP 的下一个 port,也就是一个奇数 port。RTCP与RTP联合工作,RTP实施实际数据的传输,RTCP则负责将控制包送至电话中的每个人。其主要功能是就RTP正在提供的服务质量做出反馈。
简单的说,以上三个协议就是负责以下图片内容:

1.1 基本特性
- 工作方式:基于文本的客户端-服务器协议
- 默认端口: 554 (TCP/UDP)
- 协议定位: 介于应用层和传输层之间
- 与HTTP关系:语法和操作类似HTTP,但不兼容
2.RTSP协议特点
1.控制协议:仅负责媒体会话控制,不直接传输媒体数据
2.状态协议:维护会话状态
3.多传输支持:可与RTP/RTCP、TCP、UDP等配合使用
4.时间敏感性:支持NTP时间戳
5.扩展性:支持自定义方法和头部
3.RTSP核心方法
| 方法 | 功能描述 |
|---|---|
| OPTIONS | 查询服务器支持的方法 |
| DESCRIBE | 获取媒体描述信息(SDP格式) |
| ANNOUNCE | 客户端或服务器更新会话描述 |
| SETUP | 建立传输会话,指定传输方式 |
| PLAY | 开始数据传输 |
| PAUSE | 暂停数据传输 |
| RECORD | 启动媒体录制 |
| TEARDOWN | 终止会话,释放资源 |
| GET_PARAMETER | 查询参数值 |
| SET_PARAMETER | 设置参数值 |
4.RTSP重要头部字段
| 头部字段 | 说明 |
|---|---|
| CSeq | 命令序列号,用于匹配请求响应 |
| Session | 会话标识符 |
| Transport | 指定传输参数(RTP/AVP;unicast;client_port=8000-8001) |
| Range | 指定播放时间范围 |
| Authorization | 认证信息 |
| Content-Type | 内容类型(通常为application/sdp) |
| Content-Length | 内容长度 |
5.RTSP传输模式
RTP over UDP
- 媒体数据通过RTP over UDP传输
- 控制命令通过RTSP over TCP传输
- 需要打开额外端口
2.RTP over TCP
- 媒体数据和控制命令共用TCP连接
- 媒体数据以$前缀标识
- 格式: $ + 1字节通道号 + 2字节长度 + 数据
3.Multicast
- 服务器选择组播地址和端口
- 客户端加入组播组接收数据
6.RTSP状态码
| 状态码 | 含义 |
|---|---|
| 200 | OK - 请求成功 |
| 400 | Bad Request - 错误请求 |
| 401 | Unauthorized - 未授权 |
| 404 | Not Found - 未找到 |
| 405 | Method Not Allowed - 方法不允许 |
| 456 | Header Field Not Valid - 头部字段无效 |
| 461 | Unsupported Transport - 不支持的传输 |
| 500 | Internal Server Error - 服务器内部错误 |
| 503 | Service Unavailable - 服务不可用 |
7.SDP协议(会话描述协议)
RTSP使用SDP描述媒体信息,包含:
- 会话名称和目的
- 媒体类型(视频/音频等)
- 传输协议(RTP/UDP等)
- 媒体格式(H.264/MPEG-4等)
- 媒体传输地址和端口
示例SDP片段:
v=0
o=- 123456 1 IN IP4 192.168.1.1
s=Example Stream
t=0 0
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=control:track1
8.RTSP协议完整交互流程
RTSP 交互 = OPTIONS → DESCRIBE → SETUP × N → PLAY → [PAUSE] → TEARDOWN,配合 RTP/RTCP 完成媒体传输。

以客户端要播放的URL为 tsp://192.168.1.100:554/stream 的视频流
8.1 OPTIONS - 探测服务器
作用:查询服务器支持哪些RTSP方法
// Client -> Server
OPTIONS rtsp://192.168.1.100:554/stream RTSP/1.0
CSeq: 1
User-Agent: LibVLC/3.0
// Server → Client
RTSP/1.0 200 OK
CSeq: 1
Public: OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN, GET_PARAMETER
User-Agent:当前网路请求是以LibVLC 3.0版本库的程序发起
CSeq : 请求序列号
Public:列出服务器支持的方法
8.2 DESCRIBE - 获取媒体描述(SDP)
作用:获取流的元数据,比如:编码格式,分辨率,通道数等,以SDP的格式返回
// Clinet → Server
DESCRIBE rtsp://192.168.1.100:554/stream RTSP/1.0
CSeq: 2 // 命令序列号
Accept: application/sdp // 期望Server以SDP格式返回描述
User-Agent: LibVLC/3.0 // 客户端是基于VLC构建的应用
// Server → Client
RTSP/1.0 200 OK
CSeq: 2
Content-Base: rtsp://192.168.1.100:554/stream/ // 基准URL,后续SETUP中请求的轨道将基于此拼接
Content-Type: application/sdp // 响应体是SDP格式,符合客户端Accept要求
Content-Length: 376 // SDP 内容长度为 376 字节,用于接收端判断数据是否完整。
// 以下为sdp主体内容
v=0
o=- 123456 1 IN IP4 192.168.1.100
s=Streaming Session
c=IN IP4 0.0.0.0
t=0 0
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=42001F;sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM48gA==
a=control:trackID=1
m=audio 0 RTP/AVP 97
a=rtpmap:97 MPEG4-GENERIC/44100/2
a=control:trackID=2
sdp主体逐行解析:
- 会话级描述(session-level)
| 行 | 含义 |
|---|---|
| v=0 | SDP协议版本号(目前只有0) |
| o=- 123456 1 IN IP4 192.168.1.100 | 会话所有者/创建者信息: - : 用户名(匿名) 123456 : 会话ID 1 : 版本号 IN IP4 192.168.1.100:网络类型+创建者IP |
| s=Streaming Session | 会话名称 |
| c=IN IP4 0.0.0.0 | 连接信息,表示媒体流地址不会在会话级指定,而在每个媒体行(m=)中单独定义 |
| t=0 0 | 时间描述:start = 0,stop = 0,表示永久会话(无结束时间),使用于直播流 |
- 媒体级描述(Media-level) - 视频轨道
| 行 | 含义 |
|---|---|
| m=video 0 RTP/AVP 96 | 媒体行: video : 媒体类型 0 : 端口号(RTSP 中通常为 0,实际端口由 SETUP 协商) RTP/AVP : 传输协议(RTP Audio/Video Profile) 96 : RTP payload type(动态类型) |
| a=rtpmap:96 H264/90000 | 属性行: 96对应H.264编码,时钟频率90000Hz(视频标准) |
| a=fmtp:96 ... | 格式参数 packetization-mode = 1: 支持交错打包 profile-level-id:H.264 BaseLine Profile Level 3.1 sprop-parameter-sets:SPS/PPS基础编码,解码器初始化必需 |
| a=control:trackID=1 | 关键字段: 用于构造SETUP请求的URL: rtsp://.../stream/trackID=1 |
- 媒体级描述 - 音频轨道
| 行 | 含义 |
|---|---|
| m=audio 0 RTP/AVP 97 | 音频媒体,payload type 97。 |
| a=rtpmap:97 MPEG4-GENERIC/44100/2 | AAC-LC 音频(MPEG4-GENERIC),采样率 44.1kHz,双声道 |
| a=control:trackID=2 | 音频轨道控制 URL 后缀为 trackID=2 |
8.3 SETUP - 建立媒体通道
作用:为每个媒体轨道(如 video、audio)协商传输参数(UDP/TCP、端口、单播/组播)。
比如:设置视频轨道(trackID=1)
// Client → Server
SETUP rtsp://192.168.1.100:554/stream/trackID=1 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=5000-5001
User-Agent: LibVLC/3.0
// Server → Client
RTSP/1.0 200 OK
CSeq: 3
Session: 12345678;timeout=60
Transport: RTP/AVP;unicast;source=192.168.1.100;server_port=6000-6001;client_port=5000-5001
Transport :
RTP/AVP:使用RTP over UDP(RTP/AVP/TCP表示TCP interleaved 模式)
client_port = 5000-5001:客户端RTP端口5000,RTCP端口5001
server_port=6000-6001: 服务器分配的发送端口
Session : 12345678:会话ID,后续所有请求必须携带此字段
若有音频轨道,需对trackID = 2再发一次SETUP
Note:
TCP intgerleaved模式(RTP over TCP),当防火墙阻断UDP时,可使用TCP传输RTP:
// SETUP 请求
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
// 响应
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
interleaved=0-1 : RTP 包用 $0 前缀,RTCP 用 $1,嵌入在 RTSP TCP 连接中
8.4 PLAY - 开始播放媒体流
作用:命令服务器开始通过RTP发送媒体数据
// Client → Server
PLAY rtsp://192.168.1.100:554/stream RTSP/1.0
CSeq: 4
Session: 12345678
Range: npt=0.000-
// Server → Client
RTSP/1.0 200 OK
CSeq: 4
Session: 12345678
RTP-Info: url=trackID=1;seq=12345;rtptime=789012345
Range: npt=0.000- : 从时间0开始播放(npt = Normal Play time)
RTP-Info: url=trackID=1;seq=12345;rtptime=789012345 : 返回初始RTP序列号和时间戳,用于同步
此时服务器开始向客户端5000/5001端口发送RTP/RTCP包
8.5 PAUSE/RESUME - 暂停/恢复
// 暂停
PAUSE rtsp://... RTSP/1.0
CSeq: 5
Session: 12345678
// 恢复(再次发送 PLAY)
PLAY rtsp://... RTSP/1.0
CSeq: 6
Session: 12345678
Range: npt=10.000- // 从 10 秒处继续
8.6 TEARDOWN - 终止会话
作用:释放服务器资源,关闭RTP流
// Client → Server
TEARDOWN rtsp://192.168.1.100:554/stream RTSP/1.0
CSeq: 7
Session: 12345678
// Server → Client
RTSP/1.0 200 OK
CSeq: 7
Session: 12345678
Connection: Close
服务器停止发送RTP数据,销毁会话上下文

浙公网安备 33010602011771号