RTSP重要方法

来源:互联网 发布:为知云笔记使用教程 编辑:程序博客网 时间:2024/06/09 17:06

转自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


原创粉丝点击