rtsp简介(ZT)
Real
Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP提供一
种可扩展的框架,使能够提供能控制的,按需传输实时数据,比如音频和视频文件。源
数据可以包括现场数据的反馈和存贮的文件。rtsp对流媒体提供了诸如暂停,快进等控
制,而它本身并不传输数据,rtsp作用相当于流媒体服务器的远程控制。传输数据可以
通过传输层的tcp,udp协议,rtsp也提供了基于rtp传输机制的一些有效的方法。
RTSP消息格式:
RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种
消息的格式不同.
请求消息:
方法
消息头
消息体
其中方法包括OPTION回应中所有的命令,URI是接受方的地址,例如
:rtsp://192.168.20.136
RTSP版本一般都是
析,最后一个消息头需要有两个CR
回应消息:
RTSP版本
消息头
消息体
其中RTSP版本一般都是RTSP/1.0,状态码是一个数值,200表示成功,解释是与状态码对应
的文本解释.
简单的rtsp交互过程:
C表示rtsp客户端,S表示rtsp服务端
1.C->S:OPTION
1.S->C:OPTION
2.C->S:DESCRIBE
2.S->C:DESCRIBE
3.C->S:SETUP
话
3.S->C:SETUP
4.C->S:PLAY
4.S->C:PLAY
S->C:发送流媒体数据
5.C->S:TEARDOWN
5.S->C:TEARDOWN
上述的过程是标准的、友好的rtsp流程,但实际的需求中并不一定按部就班来。
其中第3和4步是必需的!第一步,只要服务器客户端约定好,有哪些方法可用,则
option请求可以不要。第二步,如果我们有其他途径得到媒体初始化描述信息(比如
http请求等等),则我们也不需要通过rtsp中的describe请求来完成。第五步,可以根
据系统需求的设计来决定是否需要。
rtsp中常用方法:
1.OPTION
目的是得到服务器提供的可用方法:
OPTIONS
CSeq:
User-Agent:
服务器的回应信息包括提供的一些方法,例如:
RTSP/1.0
Server:
Cseq:
Public:
GET_PARAMETER
2.DESCRIBE
C向S发起DESCRIBE请求,为了得到会话描述信息(SDP):
DESCRIBE
CSeq:
token:
Accept:
User-Agent:
服务器回应一些对此会话的描述信息(sdp):
RTSP/1.0
Server:
Cseq:
x-prev-url:
x-next-url:
x-Accept-Retransmit:
x-Accept-Dynamic-Rate:
Cache-Control:
Last-Modified:
Date:
Expires:
Content-Base:
Content-Length:
Content-Type:
v=0
o=OnewaveUServerNG
s=/xxx666
u=http:///
e=admin@
c=IN
t=0
a=isma-compliance:1,1.0,1
a=range:npt=0-
m=video
a=rtpmap:96
a=fmtp:96
profile-level-id=245;config=000001B0F5000001B5090000
a=control:trackID=0//trackID=0表示视频流用的是通道0
3.SETUP
客户端提醒服务器建立会话,并确定传输模式:
SETUP
CSeq:
Transport:
User-Agent:
//uri中带有trackID=0,表示对该通道进行设置。Transport参数设置了传输模式,包
的结构。接下来的数据包头部第二个字节位置就是interleaved,它的值是每个通道都
不同的,trackID=0的interleaved值有两个0或1,0表示rtp包,1表示rtcp包,接受端
根据interleaved的值来区别是哪种数据包。
服务器回应信息:
RTSP/1.0
Server:
Cseq:
Session:
Cache-Control:
Transport:
4.PLAY
客户端发送播放请求:
PLAY
CSeq:
Session:
Range:
User-Agent:
服务器回应信息:
RTSP/1.0
Server:
Cseq:
Session:
Range:
RTP-Info:
//seq和rtptime都是rtp包中的信息
5.TEARDOWN
客户端发起关闭请求:
TEARDOWN
CSeq:
Session:
User-Agent:
服务器回应:
RTSP/1.0
Server:
Cseq:
Session:
Connection:
以上方法都是交互过程中最为常用的,其它还有一些重要的方法如
get/set_parameter,pause,redirect等等
ps:
sdp的格式
v=<version>
o=<username>
s=<session
i=<session
u=<URI>
e=<email
p=<phone
c=<network
b=<modifier>:<bandwidth-value>
t=<start
r=<repeat
z=<adjustment
k=<method>
k=<method>:<encryption
a=<attribute>
a=<attribute>:<value>
m=<media>
v
o
s
i
u
e
p
c
b
z
k
a
时间描述:
t
r
媒体描述:
m
i
c
b
k
a
参考文章:rfc2326(rtsp);rfc2327(sdp)
RTSP点播消息流程实例(客户端:VLC,
1)C(Client)->
OPTIONS
CSeq:
user-Agent:
1)M
RTSP/1.0
CSeq:
Date:
Public:
2)C
DESCRIBE
CSeq:
Accept:
User-Agent:
2)M
RTSP/1.0
CSeq:
Date:
Content-Base:
Content-type:
Content-length:
v=0
o
s=MPEG-1
i=1.mpg
t=0
a=tool:LIVE555
a=type:broadcast
a=control:*
a=range:npt=0-66.181
a=x-qt-text-nam:MPEG-1
a=x-qt-text-inf:1.mpg
m=video
c=IN
a=control:track1
m=audio
c=IN
a=control:track2
3)C
SETUP
CSeq:
Transport:
User-Agent:
3)M
RTSP/1.0
CSeq:
Date:
Transport:
Session:
4)C
SETUP
CSeq:
Transport:
Session:
User-Agent:
4)M
RTSP/1.0
CSeq:
Date:
Transport:
Session:
5)C
PLAY
CSeq:
Session:
Range:
User-Agent:
5)M
RTSP/1.0
CSeq:
Range:
Session:
RTP-Info:
(开始传输流媒体...)