RTSP协议

mac2025-04-16  3

简介

RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,属于应用层。RTSP以客户端方式工作,对流媒体提供播放、暂停、后退、前进等操作。该标准由IETF指定,对应的协议是RFC2326。

RTSP作为一个应用层协议,提供了一个可供扩展的框架,使得流媒体的受控和点播变得可能,它主要用来控制具有实时特性的数据的发送,但其本身并不用于传送流媒体数据,而必须依赖下层传输协议(如RTP/RTCP)所提供的服务来完成流媒体数据的传送。RTSP负责定义具体的控制信息、操作方法、状态码,以及描述与RTP之间的交互操作。RTSP媒体服务协议框架如下:

 

RTSP传输的一般是TS、MP4格式的流,其传输一般需要2~3个通道,命令和数据通道分离。使用RTSP协议传输流媒体数据需要有专门的媒体播放器和媒体服务器,也就是需要支持RTSP协议的客户端和服务器。

客户端要播放RTSP媒体流,就需要知道媒体源的URL,RTSP的URL格式一般如下:

rtsp://host[:port]/[abs_path]/content_name

host: 有效的域名或IP地址;

port: 端口号,缺省为554,若为缺省可不填写,否则必须写明。

例如,一个完整的RTSP URL可写为:

Request: PLAY rtsp://192.168.135.247/wfd1.0/streamid=0 RTSP/1.0\r\n

RTSP报文

RTSP是一种基于文本的协议,用CRLF(回车换行)作为每一行的结束符,其好处是,在使用过程中可以方便地增加自定义参数,也方便抓包分析。从消息传送方向上来分,RTSP的报文有两类:请求报文和响应报文。请求报文是指从客户端向服务器发送的请求(也有少量从服务器向客户端发送的请求),响应报文是指从服务器到客户端的回应。

方法作用OPTIONS获得服务器提供的可用方法DESCRIBE得到会话描述信息SETUP客户端请求建立,会话,并确立传输模式TEARDOWN客户端发起关闭回话请求PLAY客户端发起播放请求

 

RTSP的工作过程:

OPTIONS

OPTIONS请求是客户端向服务器询问可用的方法,请求和回复实例如下:

192.168.135.216向192.168.135.1询问可用的方法:

36 3.934630 192.168.135.247 192.168.135.1 RTSP 194 OPTIONS * RTSP/1.0 37 3.942393 192.168.135.1 192.168.135.247 RTSP 175 Reply: RTSP/1.0 200 OK

192.168.135.216发送request:

Real Time Streaming Protocol   Request: OPTIONS * RTSP/1.0\r\n       Method: OPTIONS       URL: *   Date: Wed, 16 Oct 2019 06:45:13 +0000\r\n   Server: stagefright/1.2 (Linux;Android 9)\r\n   CSeq: 1\r\n   Require: org.wfa.wfd1.0\r\n   \r\n

192.168.135.1回复response:

Real Time Streaming Protocol   Response: RTSP/1.0 200 OK\r\n       Status: 200   Date: Tue, 22 Oct 2019 01:20:00 GMT\r\n   Public: org.wfa.wfd1.0, GET_PARAMETER, SET_PARAMETER\r\n   CSeq: 1\r\n   \r\n

 

DESCRIBE

客户端向服务器请求媒体资源描述,服务器端通过SDP(Session Description Protocol)格式回应客户端的请求。资源描述中会列出所请求媒体的媒体流及其相关信息,典型情况下,音频和视频分别作为一个媒体流传输。

SETUP SETUP请求确定了具体的媒体流如何传输,该请求必须在PLAY请求之前发送。SETUP请求包含媒体流的URL和客户端用于接收RTP数据(audio or video)的端口以及接收RTCP数据(meta information)的端口。服务器端的回复通常包含客户端请求参数的确认,并会补充缺失的部分,比如服务器选择的发送端口。每一个媒体流在发送PLAY请求之前,都要首先通过SETUP请求来进行相应的配置。

192.168.135.1向192.168.135.216发送请求:

50 4.036375 192.168.135.1 192.168.135.247 RTSP 178 SETUP rtsp://192.168.135.247/wfd1.0/streamid=0 RTSP/1.0 52 4.332918 192.168.135.247 192.168.135.1 RTSP 276 Reply: RTSP/1.0 200 OK

192.168.135.1发送请求:

Real Time Streaming Protocol Request: SETUP rtsp://192.168.135.247/wfd1.0/streamid=0 RTSP/1.0\r\n Method: SETUP URL: rtsp://192.168.135.247/wfd1.0/streamid=0 CSeq: 2\r\n Transport: RTP/AVP/UDP;unicast;client_port=1028-1029 \r\n

192.168.135.216回复:

Real Time Streaming Protocol   Response: RTSP/1.0 200 OK\r\n       Status: 200   Date: Wed, 16 Oct 2019 06:45:14 +0000\r\n   Server: stagefright/1.2 (Linux;Android 9)\r\n   CSeq: 2\r\n   Session: 1066963014;timeout=60   Transport: RTP/AVP/UDP;unicast;client_port=1028-1029;server_port=44396-44397   \r\n

PLAY 客户端通过PLAY请求来播放一个或全部媒体流,PLAY请求可以发送一次或多次,发送一次时,URL为包含所有媒体流的地址,发送多次时,每一次请求携带的URL只包含一个相应的媒体流。PLAY请求中可指定播放的range,若未指定,则从媒体流的开始播放到结束,如果媒体流在播放过程中被暂停,则可在暂停处重新启动流的播放。

192.168.135.1向192.168.135.247发送请求:

126 5.592780 192.168.135.1 192.168.135.247 RTSP 144 PLAY rtsp://192.168.135.247/wfd1.0/streamid=0 RTSP/1.0 128 5.594535 192.168.135.247 192.168.135.1 RTSP 215 Reply: RTSP/1.0 200 OK

192.168.135.1发送:

Real Time Streaming Protocol Request: PLAY rtsp://192.168.135.247/wfd1.0/streamid=0 RTSP/1.0\r\n Method: PLAY URL: rtsp://192.168.135.247/wfd1.0/streamid=0 Session: 1066963014 CSeq: 3\r\n \r\n

192.168.135.247回复:

Real Time Streaming Protocol   Response: RTSP/1.0 200 OK\r\n       Status: 200   Date: Wed, 16 Oct 2019 06:45:15 +0000\r\n   Server: stagefright/1.2 (Linux;Android 9)\r\n   CSeq: 3\r\n   Session: 1066963014;timeout=60   Range: npt=now-\r\n   \r\n

PAUSE

PAUSE请求会暂停一个或所有媒体流,后续可通过PLAY请求恢复播放。PAUSE请求中携带所请求媒体流的URL,若参数range存在,则指明在何处暂停,若该参数不存在,则暂停立即生效,且暂停时长不确定。

TEARDOWN

结束会话请求,该请求会停止所有媒体流,并释放服务器上的相关会话数据。

192.168.135.1向192.168.135.247发送:

2311 28.850201 192.168.135.1 192.168.135.247 RTSP 148 TEARDOWN rtsp://192.168.135.247/wfd1.0/streamid=0 RTSP/1.0 2315 28.858902 192.168.135.247 192.168.135.1 RTSP 217 Reply: RTSP/1.0 200 OK

192.168.135.1发送:

Real Time Streaming Protocol Request: TEARDOWN rtsp://192.168.135.247/wfd1.0/streamid=0 RTSP/1.0\r\n Method: TEARDOWN URL: rtsp://192.168.135.247/wfd1.0/streamid=0 Session: 1066963014 CSeq: 4\r\n \r\n

192.168.135.247回复:

Real Time Streaming Protocol   Response: RTSP/1.0 200 OK\r\n       Status: 200   Date: Wed, 16 Oct 2019 06:45:38 +0000\r\n   Server: stagefright/1.2 (Linux;Android 9)\r\n   CSeq: 4\r\n   Session: 1066963014;timeout=60   Connection: close\r\n   \r\n

GET_PARAMETER

检索指定URI数据中的参数值。不携带消息体的GET_PARAMETER可用来测试服务器端或客户端是否可通(类似ping的功能)。

192.168.135.247向192.168.135.1发送:

42 3.964623 192.168.135.247 192.168.135.1 RTSP 307 GET_PARAMETER rtsp://localhost/wfd1.0 RTSP/1.0 (text/parameters) 44 3.973575 192.168.135.1 192.168.135.247 RTSP 411 Reply: RTSP/1.0 200 OK (text/parameters)

192.168.135.247发送:

Real Time Streaming Protocol Request: GET_PARAMETER rtsp://localhost/wfd1.0 RTSP/1.0\r\n Method: GET_PARAMETER URL: rtsp://localhost/wfd1.0 Date: Wed, 16 Oct 2019 06:45:13 +0000\r\n Server: stagefright/1.2 (Linux;Android 9)\r\n CSeq: 2\r\n Content-type: text/parameters Content-length: 59 \r\n Line-based text data: text/parameters (3 lines)

192.168.135.1回复:

Real Time Streaming Protocol Response: RTSP/1.0 200 OK\r\n Status: 200 Content-length: 275 Content-type: text/parameters CSeq: 2\r\n \r\n Line-based text data: text/parameters (3 lines)

SET_PARAMETER

用于设置指定媒体流的参数。

192.168.135.247向192.168.135.1发送:

45 3.978510 192.168.135.247 192.168.135.1 RTSP 498 SET_PARAMETER rtsp://localhost/wfd1.0 RTSP/1.0 (text/parameters) 46 3.986845 192.168.135.1 192.168.135.247 RTSP 84 Reply: RTSP/1.0 200 OK

192.168.135.247发送:

Real Time Streaming Protocol Request: SET_PARAMETER rtsp://localhost/wfd1.0 RTSP/1.0\r\n Method: SET_PARAMETER URL: rtsp://localhost/wfd1.0 Date: Wed, 16 Oct 2019 06:45:13 +0000\r\n Server: stagefright/1.2 (Linux;Android 9)\r\n CSeq: 3\r\n Content-type: text/parameters Content-length: 249 \r\n Line-based text data: text/parameters (4 lines)

192.168.135.1回复:

Real Time Streaming Protocol Response: RTSP/1.0 200 OK\r\n Status: 200 CSeq: 3\r\n \r\n

REDIRECT

重定向请求,用于服务器通知客户端新的服务地址,客户端需要向这个新地址重新发起请求。重定向请求中可能包含Range参数,指明重定向生效的时间。客户端若需向新服务地址发起请求,必须先teardown当前会话,再向指定的新主机setup一个新的会话。

 

ANNOUNCE

ANNOUNCE请求有两个用途:(1)C->S:客户端向服务器端发布URL指定的媒体信息描述;(2) S->C:实时更新对话描述。若媒体表示中新增了一个媒体流,例如在直播过程中,则整个媒体表示的description都要被重新发送,而不是只发送新增部分。

RECORD

请求录制指定范围的媒体数据,请求中可指定录制的起止时间戳;若未指定时间范围,则使用presentation description中的开始和结束时间,这种情况下,如果会话已开始,则立即启动录制操作。

 

最新回复(0)