1.简单RTSP交互过程
2.RTSP的请求响应示例(其中C是客户端,S是服务端)
(1)OPTIONS
C–>S
OPTIONS rtsp://127.0.0.1:1051/live RTSP/1.0\r\n
CSeq: 2\r\n
\r\n
客户端向服务器请求可用方法
S–>C
RTSP/1.0 200 OK\r\n
CSeq: 2\r\n
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY\r\n
\r\n
服务端回复客户端,当前可用方法OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY
(2)DESCRIBE
C–>S
DESCRIBE rtsp://127.0.0.1:1051/live RTSP/1.0\r\n
CSeq: 3\r\n
Accept: application/sdp\r\n
\r\n
客户端向服务器请求媒体描述文件,格式为sdp
S–>C
RTSP/1.0 200 OK\r\n
CSeq: 3\r\n
Content-length: 146\r\n
Content-type: application/sdp\r\n
\r\n
v=0\r\n
o=- 91565340853 1 in IP4 127.0.0.1\r\n
t=0 0\r\n
a=contol:*\r\n
m=video 0 RTP/AVP 96\r\n
a=rtpmap:96 H264/90000\r\n
a=framerate:25\r\n
a=control:track0\r\n
服务器回复了sdp文件,这个文件告诉客户端当前服务器有哪些音视频流,有什么属性,具体稍后再讲解
这里只需要直到客户端可以根据这些信息得知有哪些音视频流可以发送
(3)SETUP
C–>S
SETUP rtsp://127.0.0.1:1051/live/track0 RTSP/1.0\r\n
CSeq: 4\r\n
Transport: RTP/AVP;unicast;client_port=54492-54493\r\n
\r\n
客户端发送建立请求,请求建立连接会话,准备接收音视频数据
解析一下Transport: RTP/AVP;unicast;client_port=54492-54493\r\n
RTP/AVP:表示RTP通过UDP发送,如果是RTP/AVP/TCP则表示RTP通过TCP发送
unicast:表示单播,如果是multicast则表示多播
client_port=54492-54493:由于这里希望采用的是RTP OVER UDP,所以客户端发送了两个用于传输数据的端口,客户端已经将这两个端口绑定到两个udp套接字上,54492表示是RTP端口,54493表示RTCP端口(RTP端口为某个偶数,RTCP端口为RTP端口+1)
S–>C
RTSP/1.0 200 OK\r\n
CSeq: 4\r\n
Transport: RTP/AVP;unicast;client_port=54492-54493;server_port=56400-56401\r\n
Session: 66334873\r\n
\r\n
服务端接收到请求之后,得知客户端要求采用RTP OVER UDP发送数据,单播,客户端用于传输RTP数据的端口为54492,
RTCP的端口为54493服务器也有两个udp套接字,绑定好两个端口,一个用于传输RTP,一个用于传输RTCP,
这里的端口号为56400-56401之后客户端会使用54492-54493这两端口和服务器通过udp传输数据,
服务器会使用56400-56401这两端口和这个客户端传输数据
(4)PLAY
C–>S
PLAY rtsp://127.0.0.1:1051/live RTSP/1.0\r\n
CSeq: 5\r\n
Session: 66334873\r\n
Range: npt=0.000-\r\n
\r\n
客户端请求播放媒体
S–>C
RTSP/1.0 200 OK\r\n
CSeq: 5\r\n
Range: npt=0.000-\r\n
Session: 66334873; timeout=60\r\n
\r\n
服务器回复之后,会开始使用RTP通过udp向客户端的54492端口发送数据
(5)TEARDOWN
C–>S
TEARDOWN rtsp://192.168.31.115:8554/live RTSP/1.0\r\n
CSeq: 6\r\n
Session: 66334873\r\n
\r\n
S–>C
RTSP/1.0 200 OK\r\n
CSeq: 6\r\n
\r\n
|