﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-奋斗在魔都的IT工作者-随笔分类-协议介绍</title><link>http://www.blogjava.net/AlanLiu/category/51401.html</link><description>山不在高，有仙则名，水不在深，有龙则灵。</description><language>zh-cn</language><lastBuildDate>Mon, 16 Apr 2012 15:20:42 GMT</lastBuildDate><pubDate>Mon, 16 Apr 2012 15:20:42 GMT</pubDate><ttl>60</ttl><item><title>RTSP协议介绍</title><link>http://www.blogjava.net/AlanLiu/archive/2012/04/16/374775.html</link><dc:creator>AlanLiu</dc:creator><author>AlanLiu</author><pubDate>Mon, 16 Apr 2012 13:37:00 GMT</pubDate><guid>http://www.blogjava.net/AlanLiu/archive/2012/04/16/374775.html</guid><wfw:comment>http://www.blogjava.net/AlanLiu/comments/374775.html</wfw:comment><comments>http://www.blogjava.net/AlanLiu/archive/2012/04/16/374775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/AlanLiu/comments/commentRss/374775.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AlanLiu/services/trackbacks/374775.html</trackback:ping><description><![CDATA[<h2></h2><h2>1.&nbsp;实时流协议RTSP</h2><p>RTSP[3]协议以客户服务器方式工作，它是一个多媒体播放控制协议，用来使用户在播放从因特网下载的实时数据时能够进行控制，如：暂停/继续、后退、前进等。因此&nbsp;RTSP&nbsp;又称为&#8220;因特网录像机遥控协议&#8221;。</p><h3>1.1.&nbsp;&nbsp;&nbsp;RTSP协议简介</h3><p>要实现&nbsp;RTSP&nbsp;的控制功能，不仅要有协议，而且要有专门的媒体播放器(media player)和媒体服务器(media server)。媒体服务器与媒体播放器的关系是服务器与客户的关系。</p><p>媒体服务器与普通的万维网服务器的最大区别就是媒体服务器支持流式音频和视频的传送，因而在客户端的媒体播放器可以边下载边播放（需要先缓存一小段时间的节目）。但从普通万维网服务器下载多媒体节目时，是先将整个文件下载完毕，然后再进行播放。</p><p align="center" forimg="1"><img src="http://www.blogjava.net/images/blogjava_net/alanliu/1.jpg" border="0" alt="" width="562" height="273" /><br /></p><p>&nbsp;</p><p align="center"></p><p align="center">图1 RTSP与RTP和RTCP的关系</p><p>RTSP&nbsp;仅仅是使媒体播放器能控制多媒体流的传送。因此，RTSP&nbsp;又称为带外协议，而多媒体流是使用&nbsp;RTP&nbsp;在带内传送的。</p><h3>1.2.&nbsp;&nbsp;&nbsp;&nbsp;RTSP的报文结构</h3><p>RTSP有两类报文：请求报文和响应报文。请求报文是指从客户向服务器发送请求报文，响应报文是指从服务器到客户的回答。</p><p>由于&nbsp;RTSP&nbsp;是面向正文的(text-oriented)，因此在报文中的每一个字段都是一些&nbsp;ASCII&nbsp;码串，因而每个字段的长度都是不确定的。</p><p>RTSP报文由三部分组成，即开始行、首部行和实体主体。在请求报文中，开始行就是请求行，RTSP请求报文的结构如图2所示。</p><p style="text-align: center;"><img src="http://www.blogjava.net/images/blogjava_net/alanliu/2.jpg" border="0" alt="" width="532" height="336" /><br /></p><p>&nbsp;</p><p align="center"></p><p align="center">图2 RTSP请求报文的结构</p><p>RTSP请求报文的方法包括：OPTIONS、DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、GET_PARAMETER和SET_PARAMETER。RTSP请求报文的常用方法及作用如表1所示。</p><p align="center">表1 RTSP请求报文的常用方法及作用</p><p><table cellspacing="0" cellpadding="0" width="488" border="1" style="text-align: center; " bordercolor="" align="center"><tbody><tr><td valign="top" width="140"><p>方法</p></td><td valign="top" width="348"><p>作用</p></td></tr><tr><td valign="top" width="140"><p>OPTIONS</p></td><td valign="top" width="348"><p>获得服务器提供的可用方法</p></td></tr><tr><td valign="top" width="140"><p>DESCRIBE</p></td><td valign="top" width="348"><p>得到会话描述信息</p></td></tr><tr><td valign="top" width="140"><p>SETUP</p></td><td valign="top" width="348"><p>客户端提醒服务器建立会话，并确定传输模式</p></td></tr><tr><td valign="top" width="140"><p>TEARDOWN</p></td><td valign="top" width="348"><p>客户端发起关闭请求</p></td></tr><tr><td valign="top" width="140"><p>PLAY</p></td><td valign="top" width="348"><p>客户端发送播放请求</p></td></tr></tbody></table></p><p style="text-align: center;">&nbsp;</p><p>响应报文的开始行是状态行，RTSP响应报文的结构如图3所示。</p><p><div align="center"><img src="http://www.blogjava.net/images/blogjava_net/alanliu/3.jpg" width="534" height="336" alt="" /></div><br /></p><p>&nbsp;</p><p align="center"></p><p align="center">图3 RTSP响应报文的结构</p><h3>1.3.&nbsp;&nbsp;&nbsp;&nbsp;RTSP交互过程</h3><p>C表示RTSP客户端，S表示RTSP服务端</p><p><strong>&#9312;</strong>&nbsp;C-&gt;S:&nbsp;<strong>OPTION</strong>&nbsp;request&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//询问S有哪些方法可用</p><p>S-&gt;C: OPTION response&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//S回应信息中包括提供的所有可用方法</p><p><strong>&#9313;</strong>&nbsp;C-&gt;S:&nbsp;<strong>DESCRIBE</strong>&nbsp;request&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//要求得到S提供的媒体初始化描述信息</p><p>S-&gt;C: DESCRIBE response&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//S回应媒体初始化描述信息，主要是sdp</p><p><strong>&#9314;</strong>&nbsp;C-&gt;S:&nbsp;<strong>SETUP</strong>&nbsp;request&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置会话属性，以及传输模式，提醒S建立会话</p><p>S-&gt;C: SETUP response&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//S建立会话，返回会话标识符及会话相关信息</p><p><strong>&#9315;</strong>&nbsp;C-&gt;S:&nbsp;<strong>PLAY</strong>&nbsp;request&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//C请求播放</p><p>S-&gt;C: PLAY response&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//S回应请求信息</p><p><strong>S-&gt;C:&nbsp;</strong><strong>发送流媒体数据</strong></p><p><strong>&#9316;</strong>&nbsp;C-&gt;S:&nbsp;<strong>TEARDOWN</strong>&nbsp;request&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//C请求关闭会话</p><p>S-&gt;C: TEARDOWN response&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//S回应请求</p><p>上述的过程是标准的RTSP流程，其中第3步和第4步是必需的。</p><p>&nbsp;</p><img src ="http://www.blogjava.net/AlanLiu/aggbug/374775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AlanLiu/" target="_blank">AlanLiu</a> 2012-04-16 21:37 <a href="http://www.blogjava.net/AlanLiu/archive/2012/04/16/374775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>