RTSP协议文档翻译

网络协议 专栏收录该内容
3 篇文章 0 订阅

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 =*<TEXT, excluding CR, LF>

 

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: $\000{2 bytelength}{"length" bytes data, w/RTP header}

S->C: $\001{2 bytelength}{"length" bytes RTCP packet}

5        状态码

RTSP的状态码复用了HTTP部分状态码并且是可以扩展的。对于所有的状态码并不是需要全部实现,但是应用程序必须明白该状态码属于哪一类别。除了不能缓存不认识的回复外,必须将不支持的状态码等价为状态码属于的类别(以00结尾的状态码)看待,比如客户端收到一个不认识的431状态码,应该将其按400看待。在这种情况下,用户代理应该将其接收到的回复也返回给用户,因为该回复包含有人们可以理解的异常状态的信息。下图为哪些状态码会被相应的方法返回。

5.1      Success 2xx

5.2      Redirection 3xx

在RTSP中,重定向用于负载均衡或者将客户端的请求重定向到离其比较近的服务。

5.3      Client Error 4xx

以下为部分以4xx开头的状态码:

1)       405 Method Not Allowed

该状态码表示URI指定的资源不允许发送某些方法请求。当返回该错误码时,回复消息中应该包含Allow header头字段,指明该资源允许的发送的方法。该状态码可能也会在发送SETUP方法中没指明的方法时返回,比如SETUP的Transport header消息头中只指明了PLAY请求,但是却发送了RECORD请求。

2)       451 Parameter Not Understood

接收者不支持请求中的一些参数。

3)       454 Session Not Found

RTSP消息中的Session header指定的session描述符不存在、非法或者超时。

4)       461 Unsupported Transport

Transport消息头中没有包含被支持的传输方式。

6        Header Field Definitions

上图中的type指明的意思为:g表示会出现在requests和responses中的header,R表示只会出现在requests中的header,r表示只会出现在responses中的header,e表示实体头域(entity header fields)。support指明的意思为:req.表示对部分方法来说接收者必须实现,而opt.是可选的。注意,没有被标记为req.的header也会被发送,req.只是指明客户端和服务器必须实现。最后一列表明该类型对什么方法是有意义的。”entity”指的是所有返回消息体的方法,比如:DESCRIBE 和GET_PARAMETER。

以下为部分消息头域说明。

6.1      Accept

表示客户端支持的消息体描述格式

示例:

Accept: application/rtsl,application/sdp;level=2

6.2      Accept-Encoding

约束了内容的编码。

示例:

Accept-Encoding:compress, gzip

6.3      Allow

Allow表示URI指定的资源支持的方法,必须在返回405 (Method not allowed)时使用。

示例:

Allow: SETUP, PLAY, RECORD,SET_PARAMETER

6.4      Content-Length

其指定了消息体的长度,如果没该字段,默认消息体的长度为0.

6.5      Content-Encoding

表示消息体的编码方式。

示例:

Content-Encoding: gzip

6.6      Content-Type

表示消息体的类型。

示例:

Content-Type: text/html;charset=ISO-8859-4

6.7      CSeq

CSeq指定了request和response的序列号,request和response都必须含有该字段。对于任何一个request,其对应的response必须含有相同的序列号,即使是通过转发的。

6.8      Date

表示消息发起的时间。

示例:

Date: Tue, 15 Nov 1994 08:12:31GMT

6.9      Range

表示时间范围。

语法:

Range ="Range" ":" 1\#ranges-specifier[ ";""time" "=" utc-time ]

ranges-specifier =npt-range | utc-range | smpte-range

示例:

Range: clock=19960213T143205Z-;time=19970123T143720Z

6.10 RTP-Info

由PLAY返回,用于设置RTP-specific的参数。

语法:

RTP-Info ="RTP-Info" ":" 1#stream-url 1*parameter

stream-url ="url" "=" url

parameter =";" "seq" "=" 1*DIGIT| ";""rtptime" "=" 1*DIGIT

注释:

url:对应RTP流的URL

seq:第一个媒体包的序号

rtptime:RTP帧的时间戳

示例:

RTP-Info:url=rtsp://foo.com/bar.avi/streamid=0;seq=45102,

url=rtsp://foo.com/bar.avi/streamid=1;seq=30211

6.11 Session

由服务器自动生成并通过SETUP response返回的会话ID。

语法:

Session ="Session" ":" session-id [ ";""timeout" "=" delta-seconds ]

注释:

timeout:该字段只能出现在response中,意思是告诉客户端,为了减少非活跃状态,服务器会在RTSP命令之间等待多久,超时将会关闭session会话,默认为60秒。

6.12 Transport

表明什么传输协议将被使用,以及配置参数,比如:目的地址、端口等。

语法:

Transport ="Transport" ":"1\#transport-spec

transport-spec =transport-protocol/profile[/lower-transport]*parameter

transport-protocol ="RTP"

profile ="AVP"

lower-transport ="TCP" | "UDP"

parameter = ("unicast" | "multicast" )

|";" "destination" [ "=" address ]

|";" "interleaved" "=" channel [ "-"channel ]

|";" "append"

|";" "ttl" "=" ttl

|";" "layers" "=" 1*DIGIT

|";" "port" "=" port [ "-" port ]

|";" "client_port" "=" port [ "-" port ]

|";" "server_port" "=" port [ "-" port ]

|";" "ssrc" "=" ssrc

|";" "mode" = <"> 1\#mode <">

ttl = 1*3(DIGIT)

port = 1*5(DIGIT)

ssrc = 8*8(HEX)

channel = 1*3(DIGIT)

address = host

mode = <">*Method <"> | Method

示例:

Transport:RTP/AVP;multicast;ttl=127;mode="PLAY",

RTP/AVP;unicast;client_port=3456-3457;mode="PLAY"

                   注释:

                   RTP/AVP默认为UDP

7        RTSP示例

示例请参见RFC2326    14 Examples

8        RTSP状态机制

请参见RFC2326附录Appendix A: RTSP Protocol StateMachines

9        SDP对会话的描述

请参见RFC2326附录Appendix C: Use of SDP for RTSPSession Descriptions

10  最小RTSP实现

请参见RFC2326附录Appendix D: Minimal RTSPimplementation

 

 

 

 

 

参考文献

1.      http://datatracker.ietf.org/doc/rfc2326/

2.      http://datatracker.ietf.org/doc/rfc2616/

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值