RTSP(
Real Time Streaming Protocol,实时流媒体协议),是由Real network 和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP提供一种可扩展的框架,使能够提供能控制的,按需传输实时数据,比如音频和视频文件。源数据可以包括现场数据的反馈和存贮的文件。rtsp对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,rtsp作用相当于流媒体服务器的远程控制。传输数据可以通过传输层的tcp,udp协议,rtsp也提供了基于rtp传输机制的一些有效的方法。
一. 参考资料
1. 《RTSP简单命令》: http://blog.youkuaiyun.com/feidragon319/archive/2007/08/14/1742357.aspx
2. 《RTSP客户端的Java实现》: http://hi.baidu.com/ssyuan/blog/item/566df6defac1dc5094ee37eb.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.0
Cseq: 1
- 服务端对OPTIONS的回应:
(服务器的回应信息会在Public字段列出提供的方法。)
RTSP/1.0 200 OK
Server: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )
Cseq: 1
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD
2.2 DESCRIBE
C->S: DESCRIBE request //要求得到S提供的媒体初始化描述信息
S->C: DESCRIBE response //S回应媒体初始化描述信息,主要是sdp
C->S: DESCRIBE request //要求得到S提供的媒体初始化描述信息
S->C: DESCRIBE response //S回应媒体初始化描述信息,主要是sdp
- 客户端到服务端的请求举例:
(客户端向服务器端发送DESCRIBE,用于得到URI所指定的媒体描述信息,一般是SDP信息。客户端通过Accept头指定客户端可以接受的媒体述信息类型。)
2.3 SETUP
DESCRIBE rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.sdp RTSP/1.0
Cseq: 2
- 服务端对DESCRIBE的回应:
(服务器回应URI指定媒体的描述信息)
RTSP/1.0 200 OK
Server: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )
Cseq: 2
Content-length: 421
Date: Mon, 03 Aug 2009 08:21:33 GMT
Expires: Mon, 03 Aug 2009 08:21:33 GMT
Content-Type: application/sdp
x-Accept-Retransmit: our-retransmit
x-Accept-Dynamic-Rate: 1
Content-Base: rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.sdp/
v=0
o=MediaBox 127992 137813 IN IP4 0.0.0.0
s=RTSP Session
i=Starv Box Live Cast
c=IN IP4 218.207.101.236
t=0 0
a=range:npt=now-
a=control:*
m=video 0 RTP/AVP 96
b=AS:20
a=rtpmap:96 MP4V-ES/1000
a=fmtp:96 profile-level-id=8; config=000001b008000001b5090000010000000120008440fa282c2090a31f; decode_buf=12586
a=range:npt=now-
a=framerate:5
a=framesize:96 176-144
a=cliprect:0,0,144,176
a=control:trackID=1
2.3 SETUP
C->S:
SETUP request //设置会话的属性,以及传输模式,提醒S建立会话
S->C: SETUP response //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.0
Cseq: 3
Transport: RTP/AVP;UNICAST;client_port=16264-16265;mode=play
- 服务端对客户端的回应:
(Response中的Transport 头字段包含了由服务器选出的传输参数。并确定一个Session ID作为会话的唯一标识)
RTSP/1.0 200 OK
Server: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )
Cseq: 3
Session: 26633092229589
Date: Mon, 03 Aug 2009 08:21:33 GMT
Expires: Mon, 03 Aug 2009 08:21:33 GMT
Transport: 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.0
Session: 26633092229589
Cseq: 4
- 服务端对客户端的回应:
RTSP/1.0 200 OK
Server: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )
Cseq: 4
Session: 26633092229589
RTP-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.0
Cseq: 5
Session: 26633092229589
- 服务端对客户端的回应:
RTSP/1.0 200 OK
Server: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )
Cseq: 5
Session: 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.0
Cseq: 6
User-Agent: RealMedia Player HelixDNAClient/10.0.0.11279 (win32)
Session: 26633092229589
- 服务端对客户端的回应举例:
RTSP/1.0 200 OK
Server: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )
Cseq: 6
Session: 26633092229589
Connection: 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等。服务器端也通过这个头字段返回实际选择的具 体选项。
--------------------------------------------------------------
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 表示先期录制,其他的值表示是实况。
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"
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。
RTSP版本一般都是 RTSP/1.0。
每行后面的
CR LF 表示回车换行,需要接受端有相应的解析,最后一个消息头需要有两个CR LF
消息体是可选的,有的Request消息并不带消息体。
消息体是可选的,有的Request消息并不带消息体。
6、 RTSP回应消息
消息格式:
其中
RTSP版本一般都是RTSP/1.0,
状态码是一个数值,用于表示Request消息的执行结果,比如200表示成功,
解释是与
状态码对应的文本解释.
7.实况流程图:
8.参考资料:
《RTP协议 RFC3550》
《SDP协议 RFC2327》