基于文本的协议使得易于以自描述方式增加可选参数。由于参数的数量和命令出现的频率较低,处理效率不予考虑。如定义得较仔细,文本协议很容易以脚本语言(如:Tcl、Visual Basic与Perl)实现研究原型。
10646字符集避免了繁琐的字符集切换,但若应用程序使用US-ASCII字符集,它将不可见。RTCP也采用这种编码方案。ISO 8859-1通过在高位填充0,直接转成Unicode。标志位不为0的ISO 8859-1字符被表示如100001x 10xxxxxx.。(见 RFC 2279 [21])
RTSP信息可通过任何8-bit clean的低层传输协议传送。
请求包括方法、方法作用于其上的对象和进一步描述方法的参数。除非另外说明,否则方法是幂等的。方法还被设计为在服务器端只需要少量或不需要状态维护。
4.1 消息类型
见[H4.1]
********************
[H4.1]:
RTSP消息由客户端到服务器的请求和由服务器到客户端的响应组成。
RTSP -message = Request |Response ;RTSP /1.0 messages
请求(Request)和响应(Response)消息都使用RFC822中实体传输部分规定(作为消息中的有效载荷)的消息式。两者的消息都可能包括一起始行,一个或多个头部域(headers)、一行表示头部域结束的空行(即CRLF前没有内容的行),和一个消息主体(message-body, 可选)。
generic-message = start-line *message-header
CRLF
[ message-body ]
start-line = Request-Line | Status-Line
为了健壮性考虑,服务器应该忽略任何在期望收到请求行时收到的空行。换句话说,如果服务器正在读协议流,在一个消息开始时如果首先收到了CRLF,这个CRLF符应被忽略。
********************
4.2 消息头部
见[H4.2]。
********************
[H4.2]:
RTSP头部域,包括主头部(General-Header,4.3节)、请求头部(Request-Header ,5.2节)、响应头部(Response-Header ,6.2节)及实体头部(Entity-Header,7.1节),都遵照RFC822-3.1节[7]给出的通用式定义。每个头部域由后紧跟冒号的名字,单空(SP),字符及域组成。域名是大小写敏感的。虽然不提倡,头部域还是可以扩展成多行使用,只要这些行以一个以上的SP或HT开头就行。
RTSP-header= field-name ":" [ field-value ] CRLF
field-name= token
field-value= *( field-content | LWS )
field-content= <the OCTETs make up the field-value
and consisting of either *TEXT or combinations
of token, tspecials, and quoted-string>
头部域接收的顺序并不重要,但良好的习惯是,先发送主头部,然后是请求头部或响应头部,最后是实体头部。
当且仅当头部域的全部域都用逗号分隔的列表示时(即,#()),多个有相同域名的RTSP头部域才可以表示在一个消息里。而且必须能在不改变消息语法的前提下,将并发的域加到第一个后面,之间用逗号分隔,最终能将多个头部域结合成"域名:域"对。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-47669-12.html
敢到朝鲜打击美国佬