RTSP部分翻译整理
1 RTSP简介
建立和控制一路或多路连续媒体流的协议,比如视频流、音频流。其不能通过本身递送连续的媒体流。具有易扩展性及易解析性等特点。
1.1 RTSP和HTTP的区别
RTSP的描述和HTTP基本一致,但还是有些区别,比如:
Ø RTSP重新定义了方法类型,以及自己的协议描述
Ø RTSP通常是有状态的,而HTTP是无状态的
Ø 在RTSP服务和客户端之间可以相互发送请求
Ø 媒体数据通常是通过别的协议传送的
Ø RTSP的编码格式为UTF-8
Ø RTSP的Request-URI通常包含绝对URI,而HTTP为了向后兼容,仅仅包含了绝对路径
1.2 RTSP支持的操作
Ø 从媒体服务器查询媒体信息
Ø 将媒体服务加入到某一媒体会议中
Ø 添加媒体到已经存在的直播会话中
2 RTSP参数说明
以下为RTSP部分参数说明。
2.1 RTSP版本
2.2 RTSP URL:
语法:
("rtsp:" | "rtspu:")"//" host [ ":" port ] [ abs_path ]
注:
Ø rtsp 表示RTSP需要可靠的传输协议(TCP),rtspu 表示RTSP需要不可靠的传输协议(UDP)
Ø port 假如没指定,默认为554
示例:
Ø rtsp://media.example.com:554/twister
Ø 表示RTSP通过TCP的方式控制twister描述的音频和视频
Ø rtsp://media.example.com:554/twister/
audiotrack
Ø 表示RTSP通过TCP的方式控制twister描述的音频
会话标识是随机选择的任意长的字符串
2.4 Normal Play Time(NPT)
NPT表示了相对于开始的绝对位置
语法:
npt-range = ( npt-time"-" [ npt-time ] ) | ( "-" npt-time )
npt-time = "now" |npt-sec | npt-hhmmss
npt-sec = 1*DIGIT [ "."*DIGIT ]
npt-hhmmss = npt-hh ":"npt-mm ":" npt-ss [ "." *DIGIT ]
npt-hh = 1*DIGIT ; any positivenumber
npt-mm = 1*2DIGIT ; 0-59
npt-ss = 1*2DIGIT ; 0-59
示例:
npt=123.45-125
npt=12:05:35.3-
npt=now
3 RTSP消息
RTSP是基于文本格式并通过UTF-8编码的协议。协议的每一行是通过CRLF结尾的,但是接收者需要按CR和LF解析。RTSP分为以下部分:
1) 消息类型(Message Types)
2) 消息头(Message Headers)
3) 消息体(Message Body)
当RTSP消息中包含有消息体时,其长度是由以下任何一项决定的:
Ø 任何RTSP response消息以跟在消息头之后的空白行(指该行只含有CRLF)结束的话,禁止含有消息体,比如返回的状态为1xx、204、304等。
Ø 假如RTSP消息中包含Content-Length消息头,该消息头的值指定了消息体的长度,如果没有该消息头,那么默认消息体长度为0。
Ø 被服务关闭的连接
3.1 消息请求(Request)
Request = Request-Line
*(general-header| request-header | entity-header )
CRLF
[message-body ]
Request-Line = MethodSP Request-URI SP RTSP-Version
CRLF
Method = "DESCRIBE"
|"ANNOUNCE"
|"GET_PARAMETER"
|"OPTIONS"
|"PAUSE"
|"PLAY"
|"RECORD"
|"REDIRECT"
|"SETUP"
| "SET_PARAMETER"
|"TEARDOWN"
|extension-method
extension-method =token
Request-URI ="*" | absolute_URI (
见2.2)
RTSP-Version ="RTSP" "/" 1*DIGIT "." 1*DIGIT
general-header =Cache-Control | Connection | Date | Via
request-header = Accept
|Accept-Encoding
|Accept-Language
|Authorization
|From
|If-Modified-Since
|Range
|Referer
|User-Agent
entity-header = Allow
|Content-Base
|Content-Encoding
|Content-Language
|Content-Length
|Content-Location
|Content-Type
|Expires
|Last-Modified
|extension-header
extension-header = message-header
注:
Ø 和HTTP/1.1不同,RTSP通常包含的是绝对URL(包括:协议类型、IP、PORT),并非只包含绝对路径。
Ø “*”星号在Request-URL中表示该请求不是针对具体的资源的,因此该方式只能应用到和资源不相关的方法,比如:OPTIONS * RTSP/1.0
3.2 消息回复(Response)
Response = Status-Line
*(general-header | response-header | entity-header )
CRLF
[message-body ]
Status-Line =RTSP-Version SP Status-Code SP Reason-Phrase CRLF
Status-Code = "100" ; Continue
|"200" ; OK
|"201" ; Created
|"250" ; Low on Storage Space
| "300"; Multiple Choices
|"301" ; Moved Permanently
|"302" ; Moved Temporarily
|"303" ; See Other
|"304" ; Not Modified
|"305" ; Use Proxy
|"400" ; Bad Request
|"401" ; Unauthorized
|"402" ; Payment Required
|"403" ; Forbidden
|"404" ; Not Found
|"405" ; Method Not Allowed
|"406" ; Not Acceptable
|"407" ; Proxy Authentication Required
|"408" ; Request Time-out
|"410" ; Gone
|"411" ; Length Required
|"412" ; Precondition Failed
|"413" ; Request Entity Too Large
|"414" ; Request-URI Too Large
|"415" ; Unsupported Media Type
|"451" ; Parameter Not Understood
|"452" ; Conference Not Found
|"453" ; Not Enough Bandwidth
|"454" ; Session Not Found
|"455" ; Method Not Valid in This State
|"456" ; Header Field Not Valid for Resource
|"457" ; Invalid Range
|"458" ; Parameter Is Read-Only
|"459" ; Aggregate operation not allowed
|"460" ; Only aggregate operation allowed
|"461" ; Unsupported transport
|"462" ; Destination unreachable
|"500" ; Internal Server Error
|"501" ; Not Implemented
|"502" ; Bad Gateway
|"503" ; Service Unavailable
|"504" ; Gateway Time-out
|"505" ; RTSP Version not supported
|"551" ; Option not supported
|extension-code
extension-code =3DIGIT
Reason-Phrase =*
general-header = Cache-Control| Connection | Date | Via
response-header = Location
|Proxy-Authenticate
|Public
|Retry-After
|Server
|Vary
|WWW-Authenticate
entity-header = Allow
|Content-Base
|Content-Encoding
|Content-Language
|Content-Length
| Content-Location
|Content-Type
|Expires
|Last-Modified
|extension-header
extension-header = message-header
注:
Ø Status-Code是由3个数字组成的请求的返回码,Reason-Phrase是对Status-Code的文字表述,主要是为了让使用的人阅读方便,而Status-Code主要是为了让机器阅读方便。客户端不需要检查或者显示Reason-Phrase。
Ø Status-Code第一个数字表示了返回的一组Response类别,后两个并没有分类。第一个数字目前有5种含义:
* 1xx: Informational- Request received, continuing process
* 2xx: Success - Theaction was successfully received, understood,and accepted
* 3xx: Redirection -Further action must be taken in order tocomplete the request
* 4xx: Client Error -The request contains bad syntax or cannot befulfilled
* 5xx: Server Error - The serverfailed to fulfill an apparentlyvalid request
4 RTSP方法
下图C代表客户端,S代表服务端。
注:
Ø RTSP的方法名是区分大小写
Ø RTSP方法是可以扩展的但是不能以$符号开始
Ø PAUSE是建议实现的(recommended),但不是必须的(required),比如在直播的时候。假如服务器不支持某一特定的方法,其必须返回501 Not Implemented,之后客户端不应该再次请求该方法。
4.1 OPTIONS
该方法可以列出服务目前支持的RTSP方法种类,任何时候都可以发送该方法,发送该方法并不会影响服务的状态。
示例:
C->S: OPTIONS *RTSP/1.0
CSeq: 1
Require:implicit-play
Proxy-Require:gzipped-messages
S->C: RTSP/1.0 200OK
CSeq: 1
Public: DESCRIBE, SETUP,TEARDOWN, PLAY, PAUSE
4.2 DESCRIBE
该方法用于请求URL指定的媒体描述信息,通过Content-Type字段指定描述信息个格式。
示例:
C->S: DESCRIBErtsp://server.example.com/fizzle/foo RTSP/1.0
CSeq: 312
Accept:application/sdp, application/rtsl, application/mheg
S->C: RTSP/1.0 200OK
CSeq: 312
Date: 23 Jan 199715:35:06 GMT
Content-Type:application/sdp
Content-Length: 376
v=0
o=mhandley 28908445262890842807 IN IP4 126.16.64.4
s=SDP Seminar
i=A Seminar on thesession description protocol
u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
e=mjh@isi.edu (MarkHandley)
c=IN IP4224.2.17.12/127
t=28733974962873404696
a=recvonly
m=audio 3456 RTP/AVP0
m=video 2232 RTP/AVP31
m=whiteboard 32416UDP WB
a=orient:portrait
4.3 ANNOUNCE
当从客户端发给服务端是表示媒体文件的描述信息,当从服务端发给客户端是表示给新直播会话的媒体描述信息。
示例:
C->S: ANNOUNCErtsp://server.example.com/fizzle/foo RTSP/1.0
CSeq: 312
Date: 23 Jan 199715:35:06 GMT
Session: 47112344
Content-Type:application/sdp
Content-Length: 332
v=0
o=mhandley 28908445262890845468 IN IP4 126.16.64.4
s=SDP Seminar
i=A Seminar on thesession description protocol
u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
e=mjh@isi.edu (MarkHandley)
c=IN IP4224.2.17.12/127
t=28733974962873404696
a=recvonly
m=audio 3456 RTP/AVP0
m=video 2232 RTP/AVP31
S->C: RTSP/1.0 200OK
CSeq: 312
4.4 SETUP
SETUP 方法用于请求URI指定的媒体数据。该方法的request消息头指定了客户端选定的参数,response消息头包含了服务端选定的参数。
示例:
C->S: SETUPrtsp://example.com/foo/bar/baz.rm RTSP/1.0
CSeq: 302
Transport:RTP/AVP;unicast;client_port=4588-4589
S->C: RTSP/1.0 200OK
CSeq: 302
Date: 23 Jan 1997 15:35:06GMT
Session: 47112344
Transport:RTP/AVP;unicast;
client_port=4588-4589;server_port=6256-6257
注:
Ø response返回的Session是和request对应的
Ø 如果request请求存在Session标志符,服务器应该将该SETUP Request添加到已经存在的相同Session会话中,或者直接返回459 Aggregate Operation Not Allowed
4.5 PLAY
PLAY方法告诉服务器按SETUP指定的方式传输媒体数据,该方法必须在SETUP返回之后且状态为成功后才能发送。媒体数据会按照PLAY 请求的NPT时间范围不停的传输。客户端可以不停地发送PLAY请求,但是服务端必须按顺序处理这些PLAY请求,即只有在前一个PLAY 请求处理完之后才能处理下一个。
示例:
C->S: PLAYrtsp://audio.example.com/audio RTSP/1.0
CSeq: 835
Session: 12345678
Range: npt=10-15
注:
假如没有Range头字段,媒体流就会从开始处播放。如果媒体流是通过PAUSE请求暂停的,当没有Range头字段时,媒体就会从暂停的位置开始播放。当媒体正在播放并不会产生什么影响。
Range也可以指定UTC时间来启动回放,也可以用于同步不同的媒体源。
4.6 PAUSE
暂停URI指定的媒体传输。发送该命令会导致之前发送的时间在PAUSE指定的时间之后的所有PLAY命令被服务器丢弃。
示例:
C->S: PAUSErtsp://example.com/fizzle/foo RTSP/1.0
CSeq: 834
Session: 12345678
S->C: RTSP/1.0 200OK
CSeq: 834
Date: 23 Jan 1997 15:35:06 GMT
4.7 TEARDOWN
停止URI指定的媒体传输,并释放相关资源。如果需要再次请求媒体需要重新发送SETUP命令。
示例:
C->S: TEARDOWNrtsp://example.com/fizzle/foo RTSP/1.0
CSeq: 892
Session: 12345678
S->C: RTSP/1.0 200OK
CSeq: 892
获取URI指定的媒体的参数的值。该命令返回的消息由具体的实现而定。如果该命令不含有消息体,一般被用于测试客户端或服务端的活动状态。
示例:
S->C:GET_PARAMETER rtsp://example.com/fizzle/foo RTSP/1.0
CSeq: 431
Content-Type:text/parameters
Session: 12345678
Content-Length: 15
packets_received
jitter
C->S: RTSP/1.0 200OK
CSeq: 431
Content-Length: 46
Content-Type:text/parameters
packets_received: 10
jitter: 0.3838
4.9 SET_PARAMETER
设置URI指定的媒体的参数值
示例:
C->S:SET_PARAMETER rtsp://example.com/fizzle/foo RTSP/1.0
CSeq: 421
Content-length: 20
Content-type:text/parameters
barparam: barstuff
S->C: RTSP/1.0 451Invalid Parameter
CSeq: 421
Content-length: 10
Content-type:text/parameters
barparam
重定向客户端到另一台服务器,它包含了强制客户端应该请求的URL,也可能会包含重定向生效的时间。如果客户端想继续发送和接收URL媒体,必须在当前的session上发送TEARDOWN request,再重新向新的地址发送SETUP request。
示例:
S->C: REDIRECTrtsp://example.com/fizzle/foo RTSP/1.0
CSeq: 732
Location:rtsp://bigserver.com:8001
Range: clock=19960213T143205Z-
4.11 RECORD
该方法用于记录一段时间内的媒体数据。
示例:
C->S: RECORDrtsp://example.com/meeting/audio.en RTSP/1.0
CSeq: 954
Session: 12345678
Conference: 128.16.64.19/32492374
4.12 Embedded (Interleaved) Binary Data
1字节长的$符 1字节长的信道 2字节长的RTP/RCTP包长度 RTP/RTCP数据包
Embedded(Interleaved) Binary Data只能用于RTSP over TCP的形式。该模式下RTP/RTCP数据包的格式为:
示例:
C->S: SETUPrtsp://foo.com/bar.file RTSP/1.0
CSeq: 2
Transport:RTP/AVP/TCP;interleaved=0-1
S->C: RTSP/1.0 200OK
CSeq: 2
Date: 05 Jun 199718:57:18 GMT
Transport:RTP/AVP/TCP;interleaved=0-1
Session: 12345678
C->S: PLAYrtsp://foo.com/bar.file RTSP/1.0
CSeq: 3
Session: 12345678
S->C: RTSP/1.0 200OK
CSeq: 3
Session: 12345678
Date: 05 Jun 199718:59:15 GMT
RTP-Info:url=rtsp://foo.com/bar.file;
seq=232433;rtptime=972948234
S->C: $