RTSP中文版实时流媒体协议.docx
《RTSP中文版实时流媒体协议.docx》由会员分享,可在线阅读,更多相关《RTSP中文版实时流媒体协议.docx(104页珍藏版)》请在冰豆网上搜索。
RTSP中文版实时流媒体协议
实时流协议(RTSP)
本文为Internet社区描述了一种Internet标准跟踪协议 ,还需要讨论和建议以便进行改善。
请查看最新版本的"Internet正式协议标准"(STD1)了解本协议的标准化进程和状态。
本备忘录的传播不受限制。
版权声明:
摘要:
实时流协议(RTSP)是应用层协议,控制实时数据的传送 。
RTSP提供了一个可扩展框架,使受控、按需传输实时数据(如音频与视频)成为可能。
数据源包括现场数据与存储在剪辑中的数据。
本协议旨在于控制多个数据发送会话,提供了一种选择传送途径(如UDP、组播UDP与TCP)的方法,并提供了一种选择基于RTP(RFC1889)的传送机制的方法。
目录:
1介绍
1.1目的
1.2要求
1.3术语
1.4协议特性
1.5RTSP扩展
1.6整体运作
1.7RTSP状态
1.8与其他协议的关系
2符号协定
3协议参数
3.1RTSP版本
3.2RTSPURL
3.3会议标识
3.4会话标识
3.5SMPTE相对时间戳
3.6正常播放时间
3.7绝对时间
3.8选项标签
3.8.1用IANA注册新的选项标签
*4RTSP消息
4.1消息类型
4.2消息头
4.3消息主体
4.4消息长度
*5普通头部段
*6请求
6.1请求行
6.2请求消息头段
*7响应
7.1状态行
7.1.1状态码和原因短语
7.1.2响应头部段
*8实体
8.1实体头部域
8.2实体主体24
*9连接
9.1流水线化25
9.2可靠性及确认25
*10方法定义25
10.1可选项26
10.2描述26
10.3通知26
10.4建立26
10.5播放27
10.6暂停27
10.7断开27
10.8获取参数28
10.9设置参数28
10.10重定向28
10.11录制29
10.12嵌入(交织)的二进制数据29
*11状态码定义29
11.1成功2xx30
11.1.1存储空间低25030
11.2重定向3xx31
11.3客户端错误4xx31
11.3.1方法不允许32
11.3.2无法理解参数32
11.3.3会议未找到33
11.3.4带宽不足33
11.3.5会话未找到34
11.3.6本状态下该方法无效34
11.3.7头部域与资源不匹配34
11.3.8无效范围35
11.3.9参数为只读35
11.3.10不允许合操作36
11.3.11只允许合操作36
11.3.12不支持的传输36
11.3.13目标不可达37
11.3.14不支持的选项37
12头部段定义(HeaderFieldDefinitins)38
12.1接受38
12.2接受-编码38
12.3接受-语言39
12.4允许(Allw)39
12.5授权(Authrizatin)40
12.6带宽40
12.7块大小 40
12.8缓存控制41
12.9会议41
12.10连接41
12.11内容-基础42
12.12内容-编码(Cntent-Encding)42
12.13内容-语言43
12.14内容-长度(Cntent-Length)43
12.15内容-位置43
12.16内容-类型(Cntent-Type)44
12.17命令序列题头(CSeq)44
12.18日期(Date)44
12.19过期(Expires)45
12.20来自(Frm)45
12.21主机45
12.22如果匹配45
12.23如果-被修改-自从(If-Mdified-Since)46
12.24最后修改(Last-Mdified)46
12.25位置(Lcatin)46
12.26代理认证47
12.27代理要求47
12.28公布 47
12.29范围49
12.30提交方(Referer)49
12.31稍后重试49
12.32要求49
12.33RTP信息49
12.34倍速(Scale)
12.35速度49
12.36服务器(Server)49
12.37会话49
12.38时间戳49
12.39传输49
12.40不支持49
12.41用户代理(User-Agent)49
12.42变化49
12.43通过49
12.44WWW-认证(WWW-Authenticate)50
*13缓存50
*14例子50
14.1按需点播(单播)50
14.2容器文件的流化51
14.3单个流容器文件51
14.4实况媒体表示的组播51
14.5在存在的会话中播放媒体51
14.6录制52
*15语法52
15.1基本语法52
16安全考虑(SecurityCnsideratins)52
*附录A RTSP协议状态机53
*A.1客户端状态机53
*A.2服务器端状态机53
*附录B与RTP协议的交互53
*附录C使用SDP进行RTSP会话描述54
+C.1定义54
C.1.1控制URL55
C.1.2媒体流55
C.1.3有效载荷类型55
C.1.4详细格式参数55
C.1.5表示的范围56
C.1.6有效时间56
C.1.7连接信息56
C.1.8实体标签57
+C.2合控制不可用57
+C.3合控制可用57
*附录D最小RTSP实现58
+D.1客户端58
D.1.1基本回放58
D.1.2认证enabled58
+D.2服务器59
D.2.1基本回放 59
D.2.2认证enabled59
*附录E作者地址60
*附录F致谢60
*参考书目60
*版权申明61
1介绍
1.1目的
实时流协议(RTSP)建立并控制一个或几个时间同步的连续流媒体,比如音频或视频。
尽管在连续媒体流中有可能插入控制流(见10.12节),但RTSP本身通常并不发送连续媒体流。
换言之,RTSP充当多媒体服务器的"网络遥控器"。
表示描述定义了流的控制操作的集合,但本文并没有规定表示描述的格式。
RTSP没有"连接"这个概念,而由RTSP会话(sessin)代替(服务器端保持一个由识别符标记的会话)。
RTSP会话没有绑定传输层连接(如TCP连接)。
在RTSP会话期间,RTSP客户端可以打开或关闭多个到服务器端的可靠传输连接以发出RTSP请求。
但也可以使用无连接传输协议,比如UDP,来发送RTSP请求。
RTSP所控制的流可能用到RTP,但RTSP的操作并不依赖用来传送连续媒体的传输机制。
实时流协议在语法和操作上有意地类似于HTTP/1.1,使得HTTP的扩展机制大都可加入RTSP。
尽管如此,RTSP在很多重要方面与HTTP有所不同:
*RTSP引入了很多新方法并且有不同的协议标识符。
*RTSP服务器在绝大多数默认情况下需要维持状态,而HTTP是无状态协议。
*RTSP客户机和服务器都可以发出请求。
*数据由信带外的另一个协议传送(但有一个特例)。
*RTSP使用IS10646(UTF-8)而不是IS8859-1,以配合当前HTML的国际化。
*RTSP的URI请求时总是包含绝对URI。
而由于历史原因造成的后向兼容性问题,HTTP/1.1只在请求中包含绝对路径,把主机名放入单独的头部域中。
当只有一个IP的主机要提供多个文档树时,可使"虚拟主机"的实现更简单。
协议支持以下操作:
从媒体服务器上获得媒体:
用户可通过HTTP或其它途径请求一个表示描述。
如果该表示是组播,表示描述就包含用于该连续媒体的的多播地址和端口。
如表示仅通过单播发送给用户,用户为了安全应起见要提供目的地址。
邀请媒体服务器进入会议:
媒体服务器可被"邀请"加入已存在的的会议,包括向该表示内回放媒体,或记录此表示中的一部分或全部媒体。
这种模式在分布式教学应用上很有用。
会议中的各方可轮流"按网络遥控器的按钮"。
将媒体加到已存在的表示中:
现场表示 的专用概念。
当服务器可以告诉客户端"可以附加媒体"时有用。
和HTTP/1.1类似,RTSP的请求可由代理、通道与缓存处理。
1.2要求
在本文档中的关键字"必须","必须不"、"需要"、"必须"、"必须不"、"应该"、"不应该"、"推荐"、"可能"、和"可选的",都和RFC2119[4]中的解释一致。
1.3术语
一些HTTP/1.1的术语被采用。
这里没有举出的术语,其定义与HTTP/1.1相同。
合控制:
服务器使用一条时间线对多个流进行控制。
对音频/视频的回放来讲,这意味着客户端仅需发送一条播放或者暂停消息就可同时控制音频和视频的回放。
会议:
多方参与的多媒体表示,这里的多方意味着大于或等于一方。
客户端:
指请求媒体服务器上连续流媒体数据的客户端。
连接:
以通讯为目的,在传输层建立的两个程序间的虚拟信道。
容器文件:
可以容纳多个媒体流的文件,而这些媒体流共同播放时通常还包含一个表示。
RTSP服务器可以为这些容器文件提供合控制,但容器文件的概念本身并不包含在本协议中。
连续媒体:
接受器和数据源之间存在时序关系的数据。
也就是说,接受器需要重放原来存在于源数据中的时序关系。
最普通的连续媒体的例子是音频和动画视频。
连续媒体可以是实时的(交互的),它们在源和接受器之间是一种紧密的时序关系;或者是流(回放)的形式,时序关系没那么严格。
实体:
请求或者响应的载荷部分中所传输的信息。
实体由信息元组成,而每个信息元由由实体头部域和实体主体组成。
实体头部域内是信息格式,实体主体内是信息内容,如第8章所述。
媒体初始化:
数据类型/编码的具体初始化。
这包括时钟频率,颜色空间等。
客户端请求一个媒体流回放时所需的任何独立于传输的信息,都是在流创建时媒体初始化阶段产生的。
媒体参数:
对于某种特定的媒体类型来说,回放前或者回放中有可能会发生改变的一些参数。
媒体服务器:
提供一个或多个媒体流之回放或录制服务的服务器。
同一个表示(presentatin)中不同的媒体流可能来自于不同的媒体服务器。
媒体服务器可以建在激活该表示(presentatin)的Web服务器上,也可以建立在不同的主机上。
媒体服务器重定向:
重新把媒体客户端定向到另外一个媒体服务器。
(媒体)流:
单个媒体实例,比如,一个音频流或者一个视频流,连同一个白板或者共享程序组。
当使用RTP时,流包括由RTP会话(sessin)中同一个源所创建的所有RTP和RTCP包。
这和DSM-CC流([5])的定义相同。
消息:
RTSP通讯的基本单元。
由15章语法定义的结构化八位位组序列组成,并通过有连接或者无连接协议传送。
参与者:
一个会议的成员。
参与者可以是机器,比如是媒体记录或回放服务器。
表示(presentatin):
作为一个完整的媒体信息,回馈性地表述给客户端的一个或多个流的集合。
表示使用下面的表示描述进行表述。
大部分情况下,在RTSP中的文字部分中,这暗示集合中的流的合控制,但并非必须。
表示描述(presentatindescriptin):
表示描述包含在表示(presentatin)中一个或者多个媒体流的信息。
比如,编码,网络地址和内容的信息,的集合。
另外,其他IETF协议,如SDP协议使用术语"会话(sessin)"代替"现场表示"。
表示描述可以采用包括会话描述(sessindescriptin)SDP在内的多种格式。
响应:
RTSP响应。
如果能理解HTTP响应,就能清楚地理解RTSP响应。
请求:
RTSP请求。
如果能理解HTTP请求,就能清楚地理解RTSP请求。
RTSP会话(sessin):
包括一次RTSP"事务"(transactin)的全过程。
比如,一个电影的观看过程。
会话(sessin)一般包括由客户端为连续媒体建立传输机制(SETUP),使用播放(PLAY)或录制(RECRD)开始传送流,用停止(TEARDWN)关闭流。
传输初始化:
客户端和服务器端之间关于传输所需的相关信息(端口号,传输协议等)的协商。
1.4协议特点
RTSP有以下特性:
易于扩展:
可以很容易地向RTSP加入新方法和参数。
易解析:
RTSP可由标准HTTP或MIME解析器解析。
安全:
RTSP重用 了网页安全机制。
所有HTTP授权机构如basic(RFC2068[2,Sectin11.1])和digest(RFC2069[8])授权都可直接使用。
也可以重用传输层或网络层安全机制。
独立于传输:
RTSP即可使用不可靠数据报协议(UDP)、可靠数据报协议(RDP),如要实现应用级可靠,也可使用可靠流协议如TCP。
多服务器支持:
表示(presentatin)中的每个流可放在不同服务器上,客户端自动同不同服务器建立几个并发控制的会话,媒体同步在传输层执行。
录制设备控制:
协议可控制记录和回放设备,以及可在两种模式之间切换的设备(VCR)。
流控制与会议初始化分离:
流控制与邀请媒体服务器入会相分离;仅要求会议初始化协议可提供,或可用来创建具有唯一性的会议标识号。
具体地说,SIP或H.323可用来邀请服务器入会。
适合专业应用:
通过SMPTE时标,RTSP支持帧级别精度,以支持远程数字编辑。
适合专业应用:
RTSP依赖SMPTE时间戳支持帧级精度,使得可以进行远程数字编辑。
表示描述中立:
协议没强行指定特定的表示或元文件格式,可传达所用的格式类型;然而,表示描述必须至少包含一个RTSPURI。
代理与防火墙友好:
协议需由应用层协同传输层(SCKS[14])防火墙友好地进行处理。
防火墙需要理解SETUP方法,以为UDP媒体流打开一个"洞口"。
HTTP友好:
此处,RTSP明智地重用了HTTP概念,使现有的基础结构可被重用。
这些基础结构包括Internet内容选择平台(PICS:
PlatfrmfrInternetCntentSelectin[15,16]),以便通过相关标签访问内容。
但由于在大多数情况下,控制连续媒体需要服务器状态 ,RTSP不仅仅向HTTP添加方法。
合适的服务器控制:
若客户端能启动一个流,它必须也能停止一个流。
服务器不能启动一个用户不能停止的流。
传输协商:
实际处理连续媒体流前,客户端可协商传输方法。
性能协商:
若基础特性被禁用,必须有某种明确的机制让用户决定哪种方法将不不被实现。
这允许用户提出适合的用户界面。
例如,如果不允许寻找,用户界面必须能禁止位置条滑动。
早期曾要求RTSP支持多用户,但现在有了更好的方案,就是保证RTSP能很容易扩展成支持多用户即可。
因为流的标志可以被多个控制流使用,因此可以"轮换持有控制器"。
协议不涉及到多个客户端如何协调入口--这项任务被留给"社会协议"或其他层。
1.5扩展RTSP
由于不是所有媒体服务器有着相同的功能,媒体服务器有必要支持不同的请求集。
例如:
服务器可能只能回放,因此不必支持录制请求。
用于提供现场直播的服务器可能不支持寻找(绝对位置)功能。
一些服务器可能不支持设置流参数,因此不支持GET_PARAMETER和SET_PARAMETER请求。
但服务器应该实现所有12章中要求的标题域。
表示描述(presentatindescriptin)应当保证不提出服务器不支持的功能,这种情形和HTTP/1.1[2]中,[H19.6]所描述的方法不太可能被所有服务器都支持的情形一致。
RTSP可以如下三种方式扩展,按所支持的改变多少排序:
*已有的方法可以扩展加入新参数,只要这些参数可以被接收方安全地忽略。
(这和给一种HTMLtag增加新标签是一样的)如果客户端在请求失败时需要一个拒绝确认,需要在请求:
字段(见Sectin12.32)中加入一个对应于该扩展的标签。
*可以加入新方法。
如果接收方不理解请求,它就返回一个501错误码(意指未实现),发送方就不应再尝试这种方法。
客户端可以用PTINS方法去询问服务器支持的方法。
服务器应该在公共回应头里列出它所支持的所有方法。
*可以定义新版本的协议,以支持几乎所有方面的改变(除了版本协议号的位置)。
1.6整体运作
每个表示和媒体流可用RTSPURL识别。
表示组成的整个表示与媒体属性由表示描述(presentatindescriptin)文件定义,其格式不在本协议中定义。
客户端可以通过HTTP或其它途径(如email)获得此表示描述文件,它没有必要保存在媒体服务器上。
根据此规范的目标,我们假想一个表示描述(presentatindescriptin)描述了多个表示(presentatin),每个表示(presentatin)维持一个统一的时间轴。
为简明但不失一般性,假定表示描述(presentatindescriptin)正好包含一个这样的表示(presentatin)。
表示(presentatin)可包含多个媒体流。
表示描述(presentatindescriptin)包含组成表示的流的描述,包括它们的编码,语言和使用户可以选择最符合要求媒体的其他参数。
在表示描述中,各个由RTSP分别控制的媒体流各有一个RTSPURL。
RTSPURL指出了处理具体媒体流的服务器以及存在于该服务器上流的名字。
多个媒体流可以放到不同的服务器上,比如音频和视频流可以分别放到不同服务器而实现均分负载。
描述(descriptin)还列出了服务器可使用的传输方法。
除媒体参数外,网络目标地址和端口也需要决定。
下面区分几种操作模式:
单播:
以用户选择的端口号将媒体发送到RTSP请求的来源处。
另一种选择是,用和RTSP相同的可靠流传输媒体 。
多播,服务器选择地址:
媒体服务器选择多播地址和端口,这是现场直播或准点播常用的方式。
多播,用户选择地址:
若服务器要加入正在进行的多播会议,多播地址、端口和密匙由会议描述给出。
会议描述的建立不在此规范中讨论。
1.7RTSP状态
RTSP控制通过与控制通道无关的独立协议发送的流。
例如,RTSP控制可能是使用TCP连接,而数据流使用UDP。
因此,即使媒体服务器没有收到请求,数据也会继续发送。
在会话生命期,单个媒体流可通过不同TCP连接按顺序发出的请求来控制。
所以,服务器需要维护"会话状态"以便使RTSP请求和流相互关联。
状态之间的转换在附录A中描述。
RTSP中很多方法与状态无关,但下列方法在服务器流资源的定位和应用上起着重要的作用:
SETUP,PLAY,RECRD,PAUSE,和TEARDWN.
SETUP:
让服务器给流分配资源,启动RTSP会话。
PLAY与RECRD:
启动SETUP所分配的流的数据传输。
PAUSE:
临时暂停流,而不释放服务器资源。
TEARDWN:
释放流占用的资源,RTSP会话停止,从服务器端退出。
与状态相关的RTSP方法使用会话头部域(Sessinheaderfield(Sectin12.37))来识别哪个RTSP会话的状态需要处理,在SETUP请求(章节10.4)的响应中,服务器生成会话标识。
1.8与其他协议关系
RTSP在功能上与HTTP有重叠。
它也可能与HTTP相互作用,体现在与流内容的初始接触是通过网页的。
目前的协议规范目的在于允许网页服务器与RTSP媒体服务器之间有多种接力点。
例如,表示描述(presentatindescriptin)可通过HTTP和RTSP得到,这降低了基于浏览器的应用模式的往返传递,也允许完全不依赖HTTP的独立RTSP服务器与客户端。
但是,RTSP与HTTP的本质差别在于数据发送以信带外的不同协议 进行。
HTTP是不对称协议,用户发送请求,服务器作出响应。
RTSP中,媒体用户和服务器都可发送请求。
RTSP请求也不是无状态 的;在请求确认后很长时间后,仍可设置参数,继续控制媒体流。
重用HTTP功能至少在两个方面有好处,即安全和代理。
要求非常接近,在缓存、代理和授权上采用HTTP功能是有价值的。
虽然大多数实时媒体使用RTP作为传输层协议,RTSP并没有绑定到RTP。
RTSP假设存在可表示包含几个媒体流的表示的静态与临时属性的表示描述格式。
2符号约定
既然很多定义和语法与HTTP/1.1中相同,这里仅指出它们在HTTP/1.1中定义的位置而并没有拷贝它们到本文档。
为简便起见,本文档中[HX.Y]表示对应HTTP/1.1(RFC2068[2])中的X.Y部分。
([译者注:
]为更方便学习RTSP,本翻译文档将相关段落完全译出)
与[H2.1]类似,本文对所有机制的说明都是以增广BNF的形式来描述的。
此形式在RFC2234中有详细的描述,唯一的不同是RTSP中以"1#"代替","为分隔符。
********************
简单说明增广BNF如下:
增广BNF(augmentedBNF)包括下面的结构:
要解释的名词=名词解释(name=definitin)
规则的名字(name)就是它本身(不带任何尖括号,"<",">"),后面跟个等号=,然后就是该规则的定义。
如果规则需要用多个行来描述,利用空格进行缩进格式排版。
某些基本的规则使用大写,如SP,LWS,HT,CRLF,DIGIT,ALPHA,等等。
定义中还可以使用尖括号来帮助理解规则名的使用。
字面意思("literal")
文字的字面意思放在引号中间,若无特别指定,则该段文字是大小写敏感的。
规则1|规则2(rule1|rule2)
"|"表示其分隔的元素是可选的,比如,"是|否"要选择‘是’或‘否’