http://zhaostudy2.blog.163.com/blog/static/135350205201091305381/
一、简介
流媒体强调的是媒体的实时传输。它是应用流技术在网络上传输的多媒体文件。流技术就是把连续的影象和声音信息经过压缩处理后放上网站服务器,让用户一边下载一边观看、收听,而不需要等整个文件下载完后才可以观看的网络传输技术。
它与普通的万维网服务器的最大区别是:流媒体服务器支持流式音频和视频的传送,在客户端的媒体播放器可以边下载边播放。而从普通万维网服务器下载多媒体节目时,要等到整个文件下载完毕后才能播放。
流媒体的传输协议
1、RTSP:实时流协议
2、RTP:实时传输协议
3、RTCP:实时传输控制协议
4、RSVP:资源预留协议
5、MMS:微软流媒体服务协议
6、MIME:多目因特网电子邮件扩展协议
1、实时流协议RTSP
RTSP,是Real Time Streaming Protocol(实时流协议)的缩写,是由Real network 和Netscape共同提出的,关于如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP是一个多媒体播放控制协议,提供了对流媒体的暂停、快进等控制功能,而它本身并不传输媒体数据。
图1. RTSP与RTP和RTCP的关系
RTSP有两类报文:请求报文(request)和响应报文(response)。请求报文,指客户端向服务器发送请求报文;响应报文,指从服务器到客户端的回答。
由于 RTSP 是面向正文的(text-oriented),在报文中的每一个字段都是一些 ASCII 码串,因而每个字段的长度都是不确定的。
RTSP报文由三部分组成,即开始行、首部行和实体主体。
RTSP请求报文的结构如图2所示。请求报文中,开始行就是请求行。请求报文中的方法,包括:OPTIONS、DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、GET_PARAMETER和SET_PARAMETER。
(1) OPTIONS: 获得服务器提供的可用方法
(2) DESCRIBE: 获取绘画描述信息
(3) SETUP: 客户端请求服务器建立会话,并确定传输模式
(4) TEARDOWN: 客户端请求关闭
(5) PLAY: 客户端发送播放请求
图2. RTSP请求报文的结构
RTSP响应报文的结构如图3所示。响应报文的开始行是状态行。
图3. RTSP响应报文的结构
RTSP的交互过程如下: C表示客户端,S表示服务器
① C->S: OPTION request // 客户端询问服务器有哪些方法可用
S->C: OPTION response // 服务器回应信息中包括所有可用方法
② C->S: DESCRIBE request // 客户端要求得到服务器提供的媒体初始化描述信息
S->C: DESCRIBE response // 服务器回应媒体初始化描述信息,主要是sdp
③ C->S: SETUP request // 设置会话属性,以及传输模式,请求服务器建立会话
S->C: SETUP response // 服务器建立会话,返回会话标识符及会话相关信息
④ C->S: PLAY request // 客户端请求播放媒体数据
S->C: PLAY response // 服务器回应请求信息
S->C: 发送流媒体数据
⑤ C->S: TEARDOWN request // 客户端请求关闭会话
S->C: TEARDOWN response // 服务器回应请求
上述的过程是标准的RTSP流程,其中第3步和第4步是必需的。
二、流媒体协议在Live555中的具体应用
live555中的RTSP服务器实例mediaServer,使用了实时传输协议RTP、实时传输控制协议RTCP和实时流协议RTSP三种流媒体协议。
下面首先介绍RTSP连接建立及请求响应过程,然后介绍RTP数据包的封装及发送过程,最后分析RTCP包的接收处理及发送等相关内容。
2.1 RTSP连接建立及请求响应过程
mediaServer运行时,先等待客户端连接。当客户端(支持RTSP协议的流媒体播放器)发起URL请求(如输入rtsp://localhost/1.mpg)时,服务器建立RTSP连接,它是基于TCP的可靠连接。mediaServer在刚建立的连接上等待客户发起RTSP会话,包括OPTIONS、DESCRIBE、SETUP、PLAY等一系列请求。mediaServer收到请求后发送响应报文的过程将详述如下。
2.1.1 OPTIONS请求及响应报文
连接建立后,客户端向服务器发送OPTIONS请求,服务器的响应报文中包括能提供的方法。如表1所示。第一项是请求报文,第二项是响应报文。响应报文的最后给出了服务器提供的可用方法。
表1. OPTIONS请求及响应报文
OPTIONS rtsp://localhost/1.mpg RTSP/1.0 CSeq: 1 User-Agent: openRTSP.exe (LIVE555 Streaming Media v2009.03.22) |
RTSP/1.0 200 OK CSeq: 1 Date: Tue, Apr 14 2009 04:27:44 GMT Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER |
2.1.2 DESCRIBE请求及响应报文
服务器收到DESCRIBE请求后,如果请求的资源存在,则服务器回应一些对此会话的描述信息(sdp) (红色部分),包括视音频的相关信息,视频和音频是分开的。由表2可知,视频子会话对应track1,音频子会话对应track2。
表2. DESCRIBE请求及响应报文
DESCRIBE rtsp://localhost/1.mpg RTSP/1.0 CSeq: 2 Accept: application/sdp User-Agent: openRTSP.exe (LIVE555 Streaming Media v2009.03.22) |
RTSP/1.0 200 OK CSeq: 2 Date: Tue, Apr 14 2009 04:27:44 GMT Content-Base: rtsp://127.0.0.1/1.mpg/ Content-Type: application/sdp Content-Length: 447 v=0 o=- 328484373446 1 IN IP4 100.0.0.101 s=MPEG-1 or 2 Program Stream, streamed by the LIVE555 Media Server i=1.mpg t=0 0 a=tool:LIVE555 Streaming Media v2009.03.22 a=type:broadcast a=control:* a=range:npt=0-410.134 a=x-qt-text-nam:MPEG-1 or 2 Program Stream, streamed by the LIVE555 Media Server a=x-qt-text-inf:1.mpg m=video 0 RTP/AVP 32 c=IN IP4 0.0.0.0 a=control:track1 m=audio 0 RTP/AVP 14 c=IN IP4 0.0.0.0 a=control:track2 |
sdp的格式如下
v=<version>
o=<username> <session id> <version> <network type> <address type> <address>
s=<session name>
i=<session description>
u=<URI>
e=<email address>
p=<phone number>
c=<network type> <address type> <connection address>
b=<modifier>:<bandwidth-value>
t=<start time> <stop time>
r=<repeat interval> <active duration> <list of offsets from start-time>
z=<adjustment time> <offset> <adjustment time> <offset> ....
k=<method>
k=<method>:<encryption key>
a=<attribute>
a=<attribute>:<value>
m=<media> <port> <transport> <fmt list>
v = (协议版本)
o = (所有者/创建者和会话标识符)
s = (会话名称)
i = * (会话信息)
u = * (URI 描述)
e = * (Email 地址)
p = * (电话号码)
c = * (连接信息)
b = * (带宽信息)
z = * (时间区域调整)
k = * (加密密钥)
a = * (0 个或多个会话属性行)
时间描述:
t = (会话活动时间)
r = * (0或多次重复次数)
媒体描述:
m = (媒体名称和传输地址)
i = * (媒体标题)
c = * (连接信息 — 如果包含在会话层则该字段可选)
b = * (带宽信息)
k = * (加密密钥)
a = * (0 个或多个媒体属性行)
2.1.3 SETUP请求及响应报文
mpg类型文件包含的音频和视频数据是分开传送的,所以客户端要向服务器发送两个SETUP请求,分别用于建立视频和音频的RTP及RTCP连接。
服务器从SETUP请求中获取会话属性、传输模式及客户端RTP和RTCP端口号,然后分别建立视频及音频子会话的RTP及RTCP连接。从表3可知,UDP端口6970和6971分别用于传送视频数据对应的RTP包和RTCP包,而端口6972和6973分别用于传送音频数据对应的RTP包和RTCP包。会话描述符(session id)为1,服务器将这些参数组装成响应消息返回给客户端。
表3. SETUP请求及响应报文
SETUP rtsp://127.0.0.1/1.mpg/track1 RTSP/1.0 CSeq: 3 Transport: RTP/AVP;unicast;client_port=59532-59533 User-Agent: openRTSP.exe (LIVE555 Streaming Media v2009.03.22) |
RTSP/1.0 200 OK CSeq: 3 Date: Tue, Apr 14 2009 04:27:44 GMT Transport:RTP/AVP;unicast;destination=127.0.0.1;source=127.0.0.1; client_port=59532-59533;server_port=6970-6971 Session: 1 |
SETUP rtsp://127.0.0.1/1.mpg/track2 RTSP/1.0 CSeq: 4 Transport: RTP/AVP;unicast;client_port=59534-59535 Session: 1 User-Agent: openRTSP.exe (LIVE555 Streaming Media v2009.03.22) |
RTSP/1.0 200 OK CSeq: 4 Date: Tue, Apr 14 2009 04:27:44 GMT Transport:RTP/AVP;unicast;destination=127.0.0.1;source=127.0.0.1; client_port=59534-59535;server_port=6972-6973 Session: 1 |
2.1.4. PLAY请求及响应报文
表4 显示了服务器会话发送给客户会话的RTP信息,包括视音频的URL请求地址、起始序列号和RTP时间戳信息。
表4 PLAY请求及响应报文
PLAY rtsp://127.0.0.1/1.mpg/ RTSP/1.0 CSeq: 5 Session: 1 Range: npt=0.000-410.134 User-Agent: openRTSP.exe (LIVE555 Streaming Media v2009.03.22) |
RTSP/1.0 200 OK CSeq: 5 Date: Tue, Apr 14 2009 04:27:44 GMT Range: npt=0.000-410.134 Session: 1 RTP-Info:url=rtsp://127.0.0.1/1.mpg/track1;seq=31382;rtptime=4728, url=rtsp://127.0.0.1/1.mpg/track2;seq=18774;rtptime=8208 |
2.1.5 TEARDOWN请求及响应报文
流媒体数据接收完毕后,客户端会发送TEARDOWN请求,此时服务器关闭该RTSP会话并发送响应报文,报文内容如表5所示。
表5. TEARDOWN请求及响应报文
TEARDOWN rtsp://127.0.0.1/1.mpg/ RTSP/1.0 CSeq: 6 Session: 1 User-Agent: openRTSP.exe (LIVE555 Streaming Media v2009.03.22) |
RTSP/1.0 200 OK CSeq: 6 Date: Tue, Apr 14 2009 05:06:27 GMT |
rtsp_st->control_url = "rtsp://192.168.0.65:554/108.sdp/trackID=1"
OPTIONS rtsp://192.168.0.65:554/108.sdp RTSP/1.0\r\nCSeq: 1\r\n\r\n
DESCRIBE rtsp://192.168.0.65:554/108.sdp RTSP/1.0\r\nAccept: application/sdp\r\nCSeq: 2\r\n\r\n
SETUP rtsp://192.168.0.65:554/108.sdp/trackID=1 RTSP/1.0\r\nTransport: RTP/AVP/UDP;unicast;client_port=20084-20085\r\nx-Dynamic-Rate: 0\r\nCSeq: 3\r\n\r\n
PLAY rtsp://192.168.0.65:554/108.sdp/ RTSP/1.0\r\nRange: npt=0.000-\r\nCSeq: 4\r\nSession: 120748710588179\r\n\r\n
PAUSE rtsp://192.168.0.65:554/108.sdp/ RTSP/1.0\r\nCSeq: 5\r\nSession: 120748710588179\r\n\r\n
参考了 :
http://fonter.javaeye.com/blog/622107
http://hi.baidu.com/studyarea/blog/item/3ff4e4024dcc95074bfb510b.html
http://hi.baidu.com/studyarea/blog/item/de41b0887ea6fa9ca4c272c2.html
rfc2326(rtsp);rfc2327(sdp)