DSP

RTSP协议文档翻译

2019-07-13 18:32发布

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.3      会话标识(session identifiers

会话标识是随机选择的任意长的字符串

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

4.8      GET_PARAMETER

获取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

4.10 REDIRECT

重定向客户端到另一台服务器,它包含了强制客户端应该请求的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: $