Chinaunix首页 | 论坛 | 博客

TGL

  • 博客访问: 44241
  • 博文数量: 12
  • 博客积分: 490
  • 博客等级: 下士
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-12 17:07
文章分类
文章存档

2010年(2)

2009年(10)

我的朋友

分类: LINUX

2009-11-11 15:10:04

RTSP (Real-Time Streaming Protocol)
rfc2326

1概念

1.1 RTSP目的

RTSP建立并控制一个或几个时间同步的连续流媒体。
RTSP本身通常并不发送连续媒体流。
RTSP充当多媒体服务器的网络远程控制。

1.2 RTSP会话

每次服务由服务器端保持一个代标签的会话。

1.3 RTSP状态

SETUP        让服务器给流分配资源,启动RTSP会话。
PLAY与RECORD 启动SETUP分配流的数据传输。
PAUSE        临时停止流,而不释放服务器资源。
TEARDOWN     释放流的资源,RTSP会话停止。

1.4 RTSP标识

会议标识
conference-id = 1*xchar
会话标识
session-id = 1*( ALPHA | DIGIT | safe )

1.5 RTSP时间

SMPTE相对时间戳
    SMPTE表示相对于开始剪辑的时间。
正常播放时间
    NPT指出了流相对于表示开始时的绝对位置。
绝对时间
    绝对时间表示为ISO 8601时间戳,使用UTC(GMT)小数法表示。

2 RTSP消息

RTSP是基于文本的协议,采用ISO 10646字符集,使用UTF-8编码方案。行以CRLF中断,但接收者本身可将CR和LF解释成行终止符。

2.1 RTSP消息的组成

RTSP消息由客户端到服务器的请求和由服务器到客户端的回应组成。
RTSP-message = Request | Response
请求和回应都可能包括一个起始行,一个或多个标题域,一行表示标题域结束的空格和一个消息主体。
generic-message = start-line
                  *message-header
                  CRLF
                  [ message-body ]

2.2 起始行start-line

  start-line = Request-Line | Status-Line

2.3 标题域RTSP-header

2.3.1 RTSP-header的种类

RTSP标题域,包括主标题(General-Header)、请求标题(Request-Header)、回应标题(Response-Header)及实体标题(Entity-Header)。
RTSP-header = field-name ":" [ field-value ] CRLF
field-name = token
field-value = *( field-content | LWS )
field-content =         and consisting of either *TEXT or combinations
        of token, tspecials, and quoted-string>

2.3.2 普通标题域

  General-Header = Date
                 | Pragma

2.3.3 标题域定义Header Field Definitions

RTSP标题域小结如下:
Header             type  support      methods
Accept             R     opt.         entity                ;接受
Accept-Encoding    R     opt.         entity                ;接受编码
Accept-Language    R     opt.         all                ;接受语言
Allow              r     opt.         all                ;允许
Authorization      R     opt.         all                ;授权
Bandwidth          R     opt.         all                ;带宽
Blocksize          R     opt.         all but OPTIONS, TEARDOWN    ;块大小
Cache-Control      g     opt.         SETUP                ;缓存控制
Conference         R     opt.         SETUP                ;会议
Connection         g     req.         all                ;连接
Content-Base       e     opt.         entity                ;基本内容
Content-Encoding   e     req.         SET_PARAMETER            ;内容编码
Content-Encoding   e     req.         DESCRIBE, ANNOUNCE        ;
Content-Language   e     req.         DESCRIBE, ANNOUNCE        ;内容语言
Content-Length     e     req.         SET_PARAMETER, ANNOUNCE        ;内容长度
Content-Length     e     req.         entity                ;
Content-Location   e     opt.         entity                ;内容位置
Content-Type       e     req.         SET_PARAMETER, ANNOUNCE        ;内容类型
Content-Type       r     req.         entity                ;
CSeq               g     req.         all                ;序列号
Date               g     opt.         all                ;日期
Expires            e     opt.         DESCRIBE, ANNOUNCE        ;过期
From               R     opt.         all                ;来自
If-Modified-Since  R     opt.         DESCRIBE, SETUP            ;从何时更改
Last-Modified      e     opt.         entity                ;最近更改
Proxy-Authenticate                                ;代理授权
Proxy-Require      R     req.         all                ;代理要求
Public             r     opt.         all                ;公用性
Range              R     opt.         PLAY, PAUSE, RECORD        ;范围
Range              r     opt.         PLAY, PAUSE, RECORD        ;
Referer            R    opt.         all                ;提交方
Require            R     req.         all                ;要求
Retry-After        r     opt.         all                ;稍后再试
RTP-Info           r     req.         PLAY                ;RTP信息
Scale              Rr     opt.         PLAY, RECORD            ;比例
Session            Rr     req.         all but SETUP, OPTIONS        ;会话
Server             r     opt.         all                ;服务器
Speed              Rr     opt.         PLAY                ;速度
Transport          Rr     req.         SETUP                ;传输
Unsupported        r     req.         all                ;不支持
User-Agent         R     opt.         all                ;用户代理
Via                g     opt.         all                ;通过
WWW-Authenticate   r     opt.         all                ;WWW-授权

2.4 消息主体message-body

  message-body = entity-body
               |

2.5 消息长度

3 RTSP请求

3.1 RTSP请求的组成

Request = Request-Line
        *( general-header
        | request-header
        | entity-header )
          CRLF
          [ message-body ]

3.2 请求队列Request-Line

  Request-Line = Method SP Request-URI SP RTSP-Version CRLF

3.2.1 RTSP方法

    Method  = "DESCRIBE"
        | "ANNOUNCE"
        | "GET_PARAMETER"
        | "OPTIONS"
        | "PAUSE"
        | "PLAY"
        | "RECORD"
        | "REDIRECT"
        | "SETUP"
        | "SET_PARAMETER"
        | "TEARDOWN"
        | extension-method
      extension-method = token

方法定义(method token)表示了对请求统一资源标志符(Request-URI)识别的资源所执行的操作。
RTSP方法小结如下:
method         direction     object       requirement
DESCRIBE     C -> S         P,S       recommended
ANNOUNCE     C -> S, S ->C     P,S       optional
GET PARAMETER     C -> S, S ->C     P,S       optional
OPTIONS     C -> S, S ->C     P,S       required
                      (S -> C: optional)
PAUSE         C -> S         P,S       recommended
PLAY         C -> S         P,S       required
RECORD         C -> S         P,S       optional
REDIRECT     S -> C         P,S       optional
SETUP         C -> S         S       required
SET PARAMETER     C -> S, S ->C     P,S       optional
TEARDOWN     C -> S         P,S       required

3.2.1.1 OPTIONS
OPTIONS请求可能在任何时候发出,并且不影响服务器状态。

3.2.1.2 DESCRIBE
DESCRIBE方法从服务器检索表示的描述或媒体对象,这些资源通过请求统一资源定位符(the request URL)识别。

3.2.1.3 ANNOUNCE
ANNOUNCE方法有两个用途:
当客户端向服务器发送时,ANNOUNCE将通过请求URL识别的表示描述或者媒体对象提交给服务器;
当服务器相客户端发送时,ANNOUNCE实时更新会话描述。

3.2.1.4 SETUP
SETUP请求为URI指定流式媒体的传输机制。

3.2.1.5 PLAY
PLAY方法告知服务器通过SETUP中指定的机制开始发送数据 。

3.2.1.6 PAUSE
PAUSE请求引起媒体流传输的暂时中断。

3.2.1.7 TEARDOWN
TEARDOWN请求终止了给定URI的媒体流传输,并释放了与该媒体流相关的资源。

3.2.1.8 GET PARAMETER
GET PARAMETER请求检索URI指定的表示或媒体流的参数值。

3.2.1.9 SET PARAMETER
SET PARAMETER方法给URI指定的表示或媒体流设置参数值。

3.2.1.10 REDIRECT
REDIRECT请求告知客户端连接到另一个服务器位置。

3.2.1.11 RECORD
RECORD方法根据表示描述开始记录媒体数据。

3.2.2 RTSP URL

    Request-URI = "*" | absolute_URI

“rtsp”和“rtspu”表示要通过RTSP协议来定位网络资源。
rtsp_URL = ( "rtsp:" | "rtspu:" ) "//" host [ ":" port ] [ abs_path ]
  host = <合法的Internet主机域名或IP地址(用十进制数及点组成)>
  port = *DIGIT

例如:RTSP URL:
rtsp://media.example.com:554/twister/audiotrack

3.2.3 RTSP版本

    RTSP-Version = "RTSP" "/" 1*DIGIT "." 1*DIGIT
如:RTSP/1.0。

3.3 请求标题域

request-header  = Accept
        | Accept-Encoding
        | Accept-Language
        | Authorization
        | From
        | If-Modified-Since
        | Range
        | Referer
        | User-Agent

3.3.1 接受 Accept
接受请求报头区域可以同作详细说明特定对于响应来说可以接受的媒体形式。
例如:
    Accept: application/rtsl, application/sdp;level=2
3.3.2 接受编码 Accept-Encoding
接收编码(Accept-Encoding)请求报头域和接收(Accept)相似,但限定响应中可接收的内容码(content-codings)。
3.3.3 接受语言 Accept-Language
接受语言(Accept-Language)请求报头区与认可是相近的,但规定了一套自然语言用来响应请求。
3.3.4 授权 Authorization
用户代理通过包括Authorization请求报头域的请求那样做。Authorization请求报头域的值由包含用户代理验证信息的信任状所组成,这些用户代理处于请求资源的领域。
3.3.5 来自 From
From请求报头域,如果给定的话,应该(SHOULD)包括控制请求用户代理的人的互联网E-MAIL地址。
3.3.6 从何时更改 If-Modified-Since
用一种方法使If-Modified-Since请求报头域被用来使得如果请求的变量自从这个域说明的时间以来没有被修改过,实体将不会从服务器返回;相反的,将返回304响应(没有修改的)而没有任何报文实体。
3.3.7 范围 Range
一个字节范围操作可以确定字节的单一范围,或一个单一实体里的一组范围。
3.3.8 提交方 Referer
参考者(Referer)请求头域允许客户确定获得请求URI的资源地址(URI)-为了服务器的利益。Referer请求头允许服务器生成关于到资源的反向连接(back-link)的列表,为了兴趣,记录,优化的高速缓存等等。它也允许追踪过时的或错误类型的连接(link)以便维护。如果请求URI是从一个没有自己的URI的源获得的,如从使用者键盘的输入,那么一定不要发送Referer域。
3.3.9 用户代理 User-Agent
用户代理请求头包括发出请求的用户代理的信息。

4 RTSP回应

4.1 RTSP回应的组成
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

4.2 状态代码
状态代码的第一位数字定义了回应的类别,后面两位数字没有具体分类。首位数字有5种取值可能:
* 1xx: 保留,将来使用。
* 2xx: 成功 - 操作被接收、理解、接受(received,understood,accepted)。
* 3xx: 重定向(Redirection)- 要完成请求必须进行进一步操作。
* 4xx: 客户端出错 - 请求有语法错误或无法实现。
* 5xx: 服务器端出错 - 服务器无法实现合法的请求。

  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            请求URI过长
          | "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        RTSP版本不支持
          | "551"     ; Option not supported            选择不支持
          | extension-code
    extension-code = 3DIGIT

4.3 原因表示
  Reason-Phrase = *

4.4 回应标题域
response-header = Location
        | Proxy-Authenticate
        | Public
        | Retry-After
        | Server
        | Vary
        | WWW-Authenticate

4.4.1 位置 Location
除了应用于关于请求完成或新资源确认的请求,URI位置响应报头域还用于使收件人重发到某个地址。对201(Created)响应,位置是请求建立的新资源。对3xx响应.Location应当指出服务器的关于资源自动重定向的首选URI。该域的值由单个绝对的URI组成。
Location = "Location" ":" absoluteURI
4.4.2 代理授权 Proxy-Authenticate
代理认证的响应头域必须是407响应的一部分。这个域的值由表示认证方案的复杂问题和应用于这个请求URI的代理的参数组成。
Proxy-Authenticate  = "Proxy-Authenticate" ":" 1#challenge
4.4.3 公用性 Public
4.4.4 稍后再试 Retry-After
4.4.5 服务器 Server
4.4.6 变化 Vary
更正头域是在响应开始的时候变更完全接收的请求头域设置,而不管高速缓存是否允许用响应回复后续的请求。对于非高速缓存或者旧的响应,更正头域值建议用户代理用来选择请求的标准。
一个为“*”的更正域意味着高速缓存不能根据后来的请求的请求头判断而不管这个请求是否是恰当请求。
Vary  = "Vary" ":" ( "*" | 1#field-name )
4.4.7 WWW-授权 WWW-Authenticate

5 RTSP实体

5.1 实体标题域
entity-header   = Allow
        | Content-Base
        | Content-Encoding
        | Content-Language
        | Content-Length
        | Content-Location
        | Content-Type
        | Expires
        | Last-Modified
        | extension-header
  extension-header = message-header

5.1.1 允许 Allow
例如:
    Allow: SETUP, PLAY, RECORD, SET_PARAMETER
5.1.2 基本内容 Content-Base
5.1.3 内容编码 Content-Encoding
内容编码值表示一种已经或可以应用于实体的编码变换。内容编码主要用来允许文档压缩,换句话说,有效的变换而不损失它的基本媒体类型的特性,也不丢失信息。经常地,实体以编码形式储存,直接传送,只能由接收者译码。
content-coding = token
5.1.4 内容语言 Content-Language
内容语言实体报头域描述了实体面向的受众的使用语言。请注意,这不一定等同于实体正文中用到的所有语言。
Content-Language = "实体语言"":"1#语言标记
5.1.5 内容长度 Content-Length
内容长度实体报头域按十进制或八位字节数指明了发给接收者的实体正文的大小,或是在使用HEAD方法的情况下,指明若请求为GET时将发送实体正文的大小。
Content-Length = "内容长度"":"1*DIGIT
5.1.6 内容位置 Content-Location
内容位置(Content-Location)可用来在从一独立于请求资源的URI的位置访问实体时提供报文中实体的资源位置。服务器应根据应答实体为此变量提供一内容位置;尤其是在资源和多个实体相联系,而这些实体各享独立位置,可被分别访问时,服务器应为特定的返回变量提供内容位置。
Content-Location="内容位置"":"(绝对URI|相对URI)
5.1.7 内容类型 Content-Type
内容类型实体报头域指明发给接收者的实体正文的媒体类型,或在HEAD方法中指明若请求为GET时将发送的媒体类型。
Content-Type = "内容-类型"":"媒体类型
5.1.8 过期 Expires
"过期"实体报头域给出了在何日何时之后应答即被视为陈旧。除非首先经原服务器(或含有此实体较新拷贝的中介代理服务器缓存)确认为有效,缓存一般不会返回陈旧的缓存目录值。
其格式为由HTTP-日期定义的绝对日期与时间; 它必须遵照RFC 1123的日期格式:
过期="过期"":" HTTP-日期
5.1.9 最近更改 Last-Modified

5.2 实体主体
Entity-Body = *OCTET

6 连接
RTSP请求可以几种不同方式传送:
  1.持久传输连接,用于多个请求/回应传输。
  2.每个请求/回应传输一个连接。
  3.无连接模式。

7 实例分析

    Request: SETUP rtsp://192.168.0.166/stone.ts/track1 RTSP/1.0\r\n
    CSeq: 5\r\n
    Transport: RTP/AVP;unicast;client_port=41658-41659
    User-Agent: VLC media player (LIVE555 Streaming Media v2008.07.24)\r\n
    \r\n

    Response: RTSP/1.0 200 OK\r\n
    Server: VSS/0.4.0 (Build/242; Platform/Linux; Release/Video Streaming Server)\r\n
    Cseq: 5\r\n
    Session: 2174075922979178184
    Date: Thu, 03 Sep 2009 07:31:23 GMT\r\n
    Expires: Thu, 03 Sep 2009 07:31:23 GMT\r\n
    Transport: RTP/AVP;unicast;source=192.168.0.166;client_port=41658-41659;server_port=6970-6971;ssrc=459ABBF5
    \r\n
阅读(1859) | 评论(0) | 转发(2) |
0

上一篇:没有了

下一篇:Linux内核块IO学习笔记

给主人留下些什么吧!~~