RTSP协议与HTTP协议一样,也是一种文本传输协议。
其请求格式如图:

其中,Method通常有 “DESCRIBE”
| “ANNOUNCE”
| “GET_PARAMETER”
| “OPTIONS”
| “PAUSE”
| “PLAY”
| “RECORD”
| “REDIRECT”
| “SETUP”
| “SET_PARAMETER”
| “TEARDOWN”
请求详解#
OPTIONS#
查询服务器支持的方法。有助于客户端了解服务器具有的功能,以便后续操作
示例:
1
2
3
4
5
6
7
8
9
| # request
OPTIONS rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 1
User - Agent: MyRTSPPlayer/1.0
# response
RTSP/1.0 200 OK
CSeq: 1
Public: OPTIONS, PLAY, PAUSE, SETUP, TEARDOWN
|
字段解释:
- CSeq : 流水号,请求与响应对应
- User-Agent: 标识客户端应用类型
- Public: 列出服务器支持的方法
DESCRIBE#
获取SDP信息
客户端使用 DESCRIBE 请求来获取媒体资源的描述信息。这些信息包括媒体类型(如视频是 H.264 格式、音频是 AAC 格式等)、编码参数、分辨率(对于视频)、采样率(对于音频)等。通过这些信息,客户端可以确定自己是否能够播放该媒体资源,以及如何进行播放。
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # request
DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 1
Accept: application/sdp
# response
RTSP/1.0 200 OK
CSeq: 1
Content-Type: application/sdp
Content-Length: xxx
v = 0
o = - 2987346807 2987346807 IN IP4 127.0.0.1
s = Session streamed by "example server"
i = This is a sample media stream
c = IN IP4 127.0.0.1
t = 0 0
m = video 0 RTP/AVP 96
a = rtpmap:96 H.264/90000
m = audio 0 RTP/AVP 97
a = rtpmap:97 MP3/44100
|
字段解释:
参考SDP解释
SETUP#
用于建立一个媒体流传输会话,确定传输参数,如传输协议(UDP 或 TCP)、端口号等。
示例:
1
2
3
4
5
6
7
8
9
10
| # request
SETUP rtsp://example.com/media.mp4/trackID=1 RTSP/1.0
CSeq: 2
Transport: RTP/AVP;unicast;client_port=49152-49153
# response
RTSP/1.0 200 OK
CSeq: 2
Session: 12345678
Transport: RTP/AVP;unicast;server_port=6970-6971;client_port=49152-49153
|
字段解释:
Session: 会话标识符,用于后续请求中标识这个会话。
RTP/AVP : 表示RTP通过UDP发送,如果是RTP/AVP/TCP则表示RTP通过TCP发送
unicast:表示单播,如果是multicast则表示多播
client_port: 由于这里希望采用的是RTP OVER UDP,所以客户端发送了两个用于传输数据的端口,客户端已经将这两个端口绑定到两个udp套接字上,49152表示是RTP端口,49153表示RTCP端口(RTP端口为某个偶数,RTCP端口为RTP端口+1)
server_port: 同上
PLAY#
开始播放之前通过 SETUP 建立会话的媒体流。
示例:
1
2
3
4
5
6
7
8
9
10
11
| # request
PLAY rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 3
Session: 12345678
Range: npt=0.00-
# response
RTSP/1.0 200 OK
CSeq: 3
Session: 12345678
RTP-Info: url=rtsp://example.com/media.mp4/trackID=1;seq=1024;rtptime=0
|
字段解释:
- Range : 可以指定播放范围,这里 “npt = 0.00-” 表示从媒体流的开头开始播放。
- RTP-Info : 提供了关于实时传输协议(RTP)的信息,包括媒体流的 URL、RTP 包序列号(seq)和 RTP 时间戳(rtptime)的起始值。
PAUSE#
暂停正在播放的媒体流。
示例:
1
2
3
4
5
6
7
8
9
| # request
PAUSE rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 4
Session: 12345678
# response
RTSP/1.0 200 OK
CSeq: 4
Session: 12345678
|
TEARDOWN#
终止媒体流传输会话,释放资源。
示例:
1
2
3
4
5
6
7
8
| # request
TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 5
Session: 12345678
# response
RTSP/1.0 200 OK
CSeq: 5
|