RTSP协议

简介

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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值