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