RTSP实例解析

来源:互联网 发布:mysql语句查询语句大全 编辑:程序博客网 时间:2024/04/29 19:11


RTSPReal Time Streaming Protocol,实时流媒体协议),是由Real network 和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP提供一种可扩展的框架,使能够提供能控制的,按需传输实时数据,比如音频和视频文件。源数据可以包括现场数据的反馈和存贮的文件。rtsp对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,rtsp作用相当于流媒体服务器的远程控制。传输数据可以通过传输层的tcp,udp协议,rtsp也提供了基于rtp传输机制的一些有效的方法。 

一. 参考资料  
    
        1. 《RTSP简单命令》:http://blog.csdn.net/feidragon319/archive/2007/08/14/1742357.aspx 
        2. 《RTSP客户端的Java实现》:http://hi.baidu.com/ssyuan/blog/item/566df6defac1dc5094ee37eb.html
        3.《RTSP歇息学习笔记》:http://wenku.baidu.com/view/32a66e1c59eef8c75fbfb3c3.html

二. RTSP的常用命令与解释

       其中C是客户端,S是服务端。

2.1  OPTIONS
       C->S:       OPTION request //询问S有哪些方法可用
       S->C:       OPTION response //S回应信息中包括提供的所有可用方法
     
  • 客户端到服务端: 
OPTIONS rtsp://218.207.101.236:554/mobile/3/67A451E937422331 RTSP/1.0Cseq: 1
  • 服务端对OPTIONS的回应:
(服务器的回应信息会在Public字段列出提供的方法。)
RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 1Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD

2.2  DESCRIBE
      C->S:      DESCRIBE request //要求得到S提供的媒体初始化描述信息
      S->C:      DESCRIBE response //S回应媒体初始化描述信息,主要是sdp

  • 客户端到服务端的请求举例:
(客户端向服务器端发送DESCRIBE,用于得到URI所指定的媒体描述信息,一般是SDP信息。客户端通过Accept头指定客户端可以接受的媒体述信息类型。)
DESCRIBE rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.sdp RTSP/1.0Cseq: 2
  • 服务端对DESCRIBE的回应:
(服务器回应URI指定媒体的描述信息)
RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 2Content-length: 421Date: Mon, 03 Aug 2009 08:21:33 GMTExpires: Mon, 03 Aug 2009 08:21:33 GMTContent-Type: application/sdpx-Accept-Retransmit: our-retransmitx-Accept-Dynamic-Rate: 1Content-Base: rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.sdp/v=0o=MediaBox 127992 137813 IN IP4 0.0.0.0s=RTSP Sessioni=Starv Box Live Castc=IN IP4 218.207.101.236t=0 0a=range:npt=now-a=control:*m=video 0 RTP/AVP 96b=AS:20a=rtpmap:96 MP4V-ES/1000a=fmtp:96 profile-level-id=8; config=000001b008000001b5090000010000000120008440fa282c2090a31f; decode_buf=12586a=range:npt=now-a=framerate:5a=framesize:96 176-144a=cliprect:0,0,144,176a=control:trackID=1

2.3  SETUP 
        C->S:        SETUP request //设置会话的属性,以及传输模式,提醒S建立会话
        S->C:        SETUP response //S建立会话,返回会话标识符,以及会话相关信息
SETUP 用于确定转输机制,建立RTSP会话。
  • 客户端到服务端的请求:
(Request 中的Transport头字段指定了客户端可接受的数据传输参数)
SETUP rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.sdp/trackID=1 RTSP/1.0Cseq: 3Transport: RTP/AVP;UNICAST;client_port=16264-16265;mode=play
  • 服务端对客户端的回应:
(Response中的Transport 头字段包含了由服务器选出的传输参数。并确定一个Session ID作为会话的唯一标识)
RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 3Session: 26633092229589Date: Mon, 03 Aug 2009 08:21:33 GMTExpires: Mon, 03 Aug 2009 08:21:33 GMTTransport: RTP/AVP;UNICAST;mode=play;client_port=16264-16265;server_port=20026-20027

 2.4  PLAY
          PLAY方法告知服务器通过SETUP中指定的机制开始发送数据 。在尚未收到SETUP请求的成功应答之前,客户端不可以发出PLAY请求。PLAY请求将正常播放时间(normal play time)定位到指定范围的起始处,并且传输数据流直到播放范围结束。PLAY请求可能被管道化(pipelined),即放入队列中(queued);服务器必须将PLAY请求放到队列中有序执行。也就是说,后一个PLAY请求需要等待前一个PLAY请求完成才能得到执行。
         Range头可能包含一个时间参数。该参数以UTC格式指定了播放开始的时间。如果在这个指定时间后收到消息,那么播放立即开始。时间参数可能用来帮助同步从不同数据源获取的数据流。 不含Range头的PLAY请求也是合法的。它从媒体流开头开始播放,直到媒体流被暂停。如果媒体流通过PAUSE暂停,媒体流传输将在暂停点(the pause point)重新开始。 如果媒体流正在播放,那么这样一个PLAY请求将不起更多的作用,只是客户端可以用此来测试服务器是否存活。

        C->S:      PLAY request //C请求播放
        S->C:      PLAY response //S回应该请求的信息
  •  客户端到服务端的请求:
PLAY rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.sdp RTSP/1.0Session: 26633092229589Cseq: 4
  • 服务端对客户端的回应:
RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 4Session: 26633092229589RTP-Info: url=rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.sdp/trackID=1;seq=0;rtptime=0

2.5  PAUSE

        C->S:      PAUSE request //C请求暂停播放
        S->C:      PAUSE response //S回应该请求的信息

  • 客户端到服务端的请求:
PAUSE rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.sdp/ RTSP/1.0Cseq: 5Session: 26633092229589
  • 服务端对客户端的回应:
RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 5Session: 26633092229589

2.6  TEARDOWN 

        C->S:        TEARDOWN request //C请求关闭会话
        S->C:        TEARDOWN response //S回应该请求
  • 客户端到服务端的请求举例:
TEARDOWN rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.sdp/ RTSP/1.0Cseq: 6User-Agent: RealMedia Player HelixDNAClient/10.0.0.11279 (win32)Session: 26633092229589
  • 服务端对客户端的回应举例:
RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 6Session: 26633092229589Connection: Close
3.RTSP方法
方法
方向
对象
要求
含义
DESCRIBE
C->S
P,S
推荐
检查演示或媒体对象的描述,也允许使用接收头指定用户理解的描述格式。DESCRIBE的答复-响应组成媒体RTSP初始阶段
ANNOUNCE
C->S
S->C
P,S
可选
当从用户发往服务器时,ANNOUNCE将请求URL识别的演示或媒体对象描述发送给服务器;反之,ANNOUNCE实时更新连接描述。如新媒体流加入演示,整个演示描述再次发送,而不仅仅是附加组件,使组件能被删除
GET_PARAMETER
C->S
S->C
P,S
可选
GET_PARAMETER请求检查RUL指定的演示与媒体的参数值。没有实体体时,GET_PARAMETER也许能用来测试用户与服务器的连通情况
OPTIONS
C->S
S->C
P,S
要求
可在任意时刻发出OPTIONS请求,如用户打算尝试非标准请求,并不影响服务器状态
PAUSE
C->S
P,S
推荐
PAUSE请求引起流发送临时中断。如请求URL命名一个流,仅回放和记录被停止;如请求URL命名一个演示或流组,演示或组中所有当前活动的流发送都停止。恢复回放或记录后,必须维持同步。在SETUP消息中连接头超时参数所指定时段期间被暂停后,尽管服务器可能关闭连接并释放资源,但服务器资源会被预订
PLAY
C->S
P,S
要求
PLAY告诉服务器以SETUP指定的机制开始发送数据;直到一些SETUP请求被成功响应,客户端才可发布PLAY请求。PLAY请求将正常播放时间设置在所指定范围的起始处,发送流数据直到范围的结束处。PLAY请求可排成队列,服务器将PLAY请求排成队列,顺序执行
RECORD
C->S
P,S
可选
该方法根据演示描述初始化媒体数据记录范围,时标反映开始和结束时间;如没有给出时间范围,使用演示描述提供的开始和结束时间。如连接已经启动,立即开始记录,服务器数据请求URL或其他URL决定是否存储记录的数据;如服务器没有使用URL请求,响应应为201(创建),并包含描述请求状态和参考新资源的实体与位置头。支持现场演示记录的媒体服务器必须支持时钟范围格式,smpte格式没有意义
REDIRECT
S->C
P,S
可选
重定向请求通知客户端连接到另一服务器地址。它包含强制头地址,指示客户端发布URL请求;也可能包括参数范围,以指明重定向何时生效。若客户端要继续发送或接收URL媒体,客户端必须对当前连接发送TEARDOWN请求,而对指定主执新连接发送SETUP请求
SETUP
C->S
S
要求
对URL的SETUP请求指定用于流媒体的传输机制。客户端对正播放的流发布一个SETUP请求,以改变服务器允许的传输参数。如不允许这样做,响应错误为"455 Method Not Valid In This State”。为了透过防火墙,客户端必须指明传输参数,即使对这些参数没有影响
SET_PARAMETER
C->S
S->C
P,S
可选
这个方法请求设置演示或URL指定流的参数值。请求仅应包含单个参数,允许客户端决定某个特殊请求为何失败。如请求包含多个参数,所有参数可成功设置,服务器必须只对该请求起作用。服务器必须允许参数可重复设置成同一值,但不让改变参数值。注意:媒体流传输参数必须用SETUP命令设置。将设置传输参数限制为SETUP有利于防火墙。将参数划分成规则排列形式,结果有更多有意义的错误指示
TEARDOWN
C->S
P,S
要求
TEARDOWN请求停止给定URL流发送,释放相关资源。如URL是此演示URL,任何RTSP连接标识不再有效。除非全部传输参数是连接描述定义的,SETUP请求必须在连接可再次播放前发布


4.RTSP请求和应答中使用的有用的标签值:

------------------------------------------------------------

Accept:            用于指定客户端可以接受的媒体描述信息类型。比如: Accept: application/rtsl, application/sdp;level=2 

Bandwidth:       用于描述客户端可用的带宽值。 

CSeq: 
指定了RTSP请求回应对的序列号,在每个请求或回应中都必须包括这个头字段。对每个包含一个给定序列号的请求消息,都会有一个相同序                列号的回应消息。 

Rang: 用于指定一个时间范围,可以使用SMPTE、NTP或clock时间单元。 

Session:  Session头字段标识了一个RTSP会话。Session ID 是由服务器在SETUP的回应中选择的,客户端一当得到Session ID后,在以后的对                            Session 的操作请求消息中都要包含Session ID. 

Transport:  Transport头字段包含客户端可以接受的转输选项列表,包括传输协议,地址端口,TTL等。服务器端也通过这个头字段返回实际选择的具                     体选项。
--------------------------------------------------------------
 
CSeq
:                      命令的序列号,逐1增加。 所有的请求和应答都用得到。
 
Content-Length:      这个标记的存在说明后面有实体数据,而且给出了这个数据块的大小,单位是byte
 
X-Playlist-Gen-Id:    用来检查播放列表是否有效。这个标记最初在客户端发送DESCRIBE命令后使用。  客户端在发送“SETUP”命令给服务器时必须回                                   应一样的值
                                          
X-Playlist-Seek-Id:   值必须和X-Playlist-Gen-Id 域的值相同,在PLAY请求命令中使用.
 
Blocksize:                 媒体包的总长度,单位是byte
 
Session:      Session ID是用作客户端和服务器之间是否是正确的连接。在客户端发送SETUP命令,服务器会在应答消息头里面发送这个值给                                    客 户端。 We only see the Session value on the first stream selected (usually this is the audio stream)。Session 值相当的长,一                              共有20个阿拉伯数字。紧跟着Session值, 你可以看到一个值:“timeout= xxxx”。. 这是服务器需要得到回应或者ACK回应(为了保                                持连接)的时间。客户端必须在这个时段内发送一个ACK ,要不然连接就要被强制中断。一个ACK就是发送一条                                                          GET_PARAMETER命令到服务器。
 
X-Accept-Authentication:     允许的authentication 方法 NTLM, Digest 和 Basic 是标准的
 
X-Broadcast-Id:                   是否是实况或者是先期录制的流。0 表示先期录制,其他的值表示是实况。

Range:                                Range is the offset and end time positions to stream the media. For a zero start and full file stream, this value is set                                                   to:npt=0.000-where 0.000 is the offset and –0.000 (optional) is the ending time. Values are stated in seconds.
 
Speed:                                  用来调整传输到客户端的流得速度。假如你的带宽可以接受更高速的数据传送,这个域的值可以设置大于1来加速下载数                                                据普通情况  Speed: 1.0       i.e. x1 rate Media player 使用 :     Speed: 1.294     这个主要取决于你的网络连接速度。
 
Server:                                 服务器类型和软件版本
 
EOF:                                    文件结束标记,也是流的结束标记
 
Date:                                   日期时间,下面举个例子:Tue, 18 Nov 2003 15:57:07 GMT
 
Bandwidth:                              流需要的最大带宽,bits/秒
 
Transport:                              使用什么协议来传输数据,比如TCP或者UDP等
 
Etag:                                   实体标记Entity tag,是一个分配给会话的值,就像"23180160"
 

5、 RTSP请求消息 

消息格式: 
 
其中
方法包括OPIONS、DESCRIBE、SETUP、PLAY、TEARDOWN等,
URI是接受方的地址,例如:rtsp://192.168.0.1/video1.3gp。 
RTSP版本一般都是 RTSP/1.0。
每行后面的 CR LF 表示回车换行,需要接受端有相应的解析,最后一个消息头需要有两个CR LF 
消息体是可选的,有的Request消息并不带消息体。 

6、 RTSP回应消息 
消息格式: 


其中
RTSP版本一般都是RTSP/1.0,
状态码是一个数值,用于表示Request消息的执行结果,比如200表示成功,
解释是与状态码对应的文本解释. 

7.实况流程图:


8.参考资料:

《RTSP协议 RFC2326》
《RTP协议 RFC3550》
《SDP协议 RFC2327》

原创粉丝点击