RTSP重要方法

xiaoxiao2021-02-28  71

转自http://blog.csdn.net/caoshangpa/article/details/53191630

.RTSP重要方法

##################################### ################################################

RTSP URL的语法结构

一个终端用户是通过在播放器中输入URL地址开始进行观看流媒体业务的第一步,而对于使用RTSP协议的移动流媒体点播而言,URL的一般写法如下

一个以“rtsp”或是“rtspu”开始的URL链接用于指定当前使用的是RTSP 协议。RTSP URL的语法结构如下:

rtsp_url = (“rtsp:”| “rtspu:”) “//” host [“:”port”] /[abs_path]/content_name

host:可以是一个有效的域名或是IP地址。

port:端口号,对于RTSP协议来说,缺省的端口号为554。当我们在确认流媒体服务器提供的端口号为554时,此项可以省略 说明:当HMS服务器使用的端口号为554时,我们在写点播链接时,可以不用写明端口号,但当使用非554端口时,在RTSP URL中一定要指定相应的端口。

abs_path: 为RTSPServer中的媒体流资源标识,见下章节的录像资源命名。 

RTSPURL用来标识RTSPServer的媒体流资源,可以标识单一的媒体流资源,也可以标 识多个媒体流资源的集合。 

请求消息的第一行的语法结构如下:

Request-Line    =   Method 空格 Request-URI 空格 RTSP-Version CRLF

响应消息的第一行是状态行(status-line),每个元素之间用空格分开。除了最后的CRLF之外,在此行的中间不得有CR或是LF的出现。它的语法格式如下,

Status-Line = RTSP-Version 空格Status-Code 空格Reason-Phrase CRLF

状态码(Status-Code) 是一个三位数的整数,用于描述接收方对所收到请求消息的执行结果

##################################### ################################################

1.OPTIONS: 用于得到服务器提供的可用方法。 如:

C->S:OPTIONS rtsp://192.168.20.136:5000/xxx666 RTSP/1.0           CSeq: 1         服务器的回应信息会在Public字段列出提供的方法。

如: S->C:RTSP/1.0 200 OK          CSeq: 1        //每个回应消息的cseq数值和请求消息的cseq相对应          Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

2.DESCRIBE: 客户端向服务器端发送DESCRIBE,用于得到URL所指定的媒体描述信息一般是SDP信息。客户端通过Accept头指定客户端可以接受的媒体述信息类型。 如: C->S:DESCRIBE rtsp://server.example.com/fizzle/foo RTSP/1.0           CSeq: 312           Accept: application/sdp, application/rtsl,application/mheg 服务器回应URL指定媒体的描述信息: 如: S->C:RTSP/1.0 200 OK           CSeq: 312            Date: 23 Jan 1997 15:35:06 GMT            Content-Type: application/sdp  //表示回应为SDP信息            Content-Length: 376            //这里为一个空行,以下为具体的SDP信息             v=0              o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4             s=SDP Seminar             i=A Seminar on the session description protocol             u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps             e=mjh@isi.edu (Mark Handley)             c=IN IP4 224.2.17.12/127             t=2873397496 2873404696             a=recvonly             m=audio 3456 RTP/AVP 0             m=video 2232 RTP/AVP 31             m=whiteboard 32416 UDP WB             a=orient:portrait   媒体初始化是任何基于RTSP系统的必要条件,但RTSP规范并没有规定它必须通过DESCRIBE方法完成。RTSP客户端可以通过以下方法来接收初始化信息: a)  通过DESCRIBE方法; b)  其它一些协议(HTTP,Email附件等); c)  通过命令行或标准输入设备。

3.SETUP: 用于确定转输机制,建立RTSP会话。客户端能够发出一个SETUP请求为正在播放的媒体流改变传输参数,服务器可能同意这些参数的改变。若是不同意,它必须响应错误"455 Method Not Valid In This State"。 请求中的Transport头字段指定了客户端可接受的数据传输参数响应中的Transport头字段包含了由服务器选出的传输参数。 如: C->S:SETUP rtsp://example.com/foo/bar/baz.rm RTSP/1.0           CSeq: 302           Transport: RTP/AVP;unicast;client_port=4588-4589 服务器端对SETUP请求产生一个Session ID。 如: S->C:RTSP/1.0 200 OK           CSeq: 302           Date: 23 Jan 1997 15:35:06 GMT           Session: 47112344 //产生一个Session ID           Transport: RTP/AVP;unicast;   //unicast表示单播           client_port=4588-4589;server_port=6256-6257   4.PLAY: PLAY方法告知服务器通过SETUP中指定的机制开始发送数据 。在尚未收到SETUP请求的成功应答之前,客户端不可以发出PLAY请求。 PLAY请求将正常播放时间(normal play time)定位到指定范围的起始处,并且传输数据流直到播放范围结束。PLAY请求可能被管道化(pipelined),即放入队列中(queued);服务器必须将PLAY请求放到队列中有序执行。也就是说,后一个PLAY请求需要等待前一个PLAY请求完成才能得到执行。 比如,在下例中,不管到达的两个PLAY请求之间有多紧凑,服务器首先play第10到15秒,然后立即第20到25秒,最后是第30秒直到结束。 C->S:PLAY rtsp://audio.example.com/audio RTSP/1.0           CSeq: 835           Session: 12345678           Range: npt=10-15   C->S:PLAY rtsp://audio.example.com/audio RTSP/1.0          CSeq: 836          Session: 12345678           Range: npt=20-25   C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0           CSeq: 837           Session: 12345678           Range: npt=30-   Range头可能包含一个时间参数。该参数以UTC格式指定了播放开始的时间。如果在这个指定时间后收到消息,那么播放立即开始。时间参数可能用来帮助同步从不同数据源获取的数据流。 不含Range头的PLAY请求也是合法的。它从媒体流开头开始播放,直到媒体流被暂停。如果媒体流通过PAUSE暂停,媒体流传输将在暂停点(the pause point)重新开始。 如果媒体流正在播放,那么这样一个PLAY请求将不起更多的作用,只是客户端可以用此来测试服务器是否存活。

5.PAUSE: PAUSE请求引起媒体流传输的暂时中断。如果请求URL中指定了具体的媒体流,那么只有该媒体流的播放和记录被暂停(halt)。比如,指定暂停音频,播放将会无声。如果请求URL指定了一组流,那么在该组中的所有流的传输将被暂停。

如: C->S:PAUSE rtsp://example.com/fizzle/foo RTSP/1.0           CSeq: 834           Session: 12345678   S->C:RTSP/1.0 200 OK          CSeq: 834           Date: 23 Jan 1997 15:35:06 GMT   PAUSE请求中可能包含一个Range头用来指定何时媒体流暂停,我们称这个时刻为暂停点(pause point)。该头必须包含一个精确的值,而不是一个时间范围。媒体流的正常播放时间设置成暂停点。当服务器遇到在任何当前挂起(pending)的PLAY请求中指定的时间点后,暂停请求生效。如果Range头指定了一个时间超出了任何一个当前挂起的PLAY请求,将返回错误"457 Invalid Range" 。如果一个媒体单元(比如一个音频或视频禎)正好在一个暂停点开始,那么表示将不会被播放或记录。如果Range头缺失,那么在收到暂停消息后媒体流传输立即中断,并且暂停点设置成当前正常播放时间。

6.TEARDOWN: TEARDOWN请求终止了给定URL的媒体流传输,并释放了与该媒体流相关的资源。

如: C->S:TEARDOWN rtsp://example.com/fizzle/foo RTSP/1.0           CSeq: 892           Session: 12345678   S->C: RTSP/1.0 200 OK            CSeq: 892

转载请注明原文地址: https://www.6miu.com/read-35362.html

最新回复(0)