zoukankan      html  css  js  c++  java
  • RTSP(Real Time Streaming Protocol)学习笔记 -- RFC2326

    Real Time Streaming Protocol (RTSP) 

    RTSP是用在娱乐或通讯中控制流媒体服务器的网络协议,它可以创建和控制两个端点之间的会话. Client发出一些命令来控制media streaming。例如:play, record and pause.

    RTSP is a text-based protocol.
    Lines are terminated by CRLF.
    Text-based protocols make it easier to add optional parameters in a self-describing manner.

    1. RTSP URL

    rtsp_URL = ( "rtsp:" | "rtspu:" )"//" host [ ":" port ] [ abs_path ]
    host = <A legal Internet host domain name of IP address
    port = *DIGIT 

    example: rtsp://media.example.com:554/twister/audiotrack

    2. RTSP Message

        The message type, message headers and message body reuse the HTTP protocol. 

    3. Method:

    1). OPTIONS

      An OPTIONS request returns the request types the server will accept.

    2). DESCRIBE

      A DESCRIBE request includes an RTSP URL (rtsp://...), and the type of reply data that can be handled. This reply includes the presentation description, typically in Session Description Protocol (SDP) format. 

    3). SETUP          

      Causes the server to allocate resources for a stream and start an RTSP session.

    4). PLAY & RECORD 

      Starts data transmission on a stream allocated via SETUP.

    5). PAUSE

      Temporarily halts a stream without freeing server resources.

    6). RECORD

      Same as PLAY 

    7). ANNOUNCE

      When sent from client to server, ANNOUNCE posts the description of a presentation or media object identified by the request URL to a 

    server. When sent from server to client, ANNOUNCE updates the session description in real-time.

    8). TEARDOWN

      Frees resources associated with the stream. The RTSP session ceases to exist on the server. 

    9). GET_PARAMETER

      The GET_PARAMETER request retrieves the value of a parameter of a presentation or stream specified in the URI.

    10). SET_PARAMETER

      This method requests to set the value of a parameter for a presentation or stream specified by the URI.

    11). REDIRECT

       A REDIRECT request informs the client that it must connect to another server location.

    12). Embedded (Interleaved) Binary Data 

          某些防火墙设计和其他情况可能迫使服务器交错RTSP方法和流数据。该交错通常应避免使用,除非必要的,因为它的复杂性使得客户端和服务器的操作会增加额外的开销。

      如果RTSP通过TCP进行,才应使用交错的二进制数据。

    4. 一些定义原RFC直接copy过来放这里。 

    6 Request

       A request message from a client to a server or vice versa includes,
       within the first line of that message, the method to be applied to
       the resource, the identifier of the resource, and the protocol
       version in use.

           Request      =       Request-Line          ; Section 6.1
                        *(      general-header        ; Section 5
                        |       request-header        ; Section 6.2
                        |       entity-header )       ; Section 8.1
                                CRLF
                                [ message-body ]      ; Section 4.3

    6.1 Request Line

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

       Method         =         "DESCRIBE"              ; Section 10.2
                      |         "ANNOUNCE"              ; Section 10.3
                      |         "GET_PARAMETER"         ; Section 10.8
                      |         "OPTIONS"               ; Section 10.1
                      |         "PAUSE"                 ; Section 10.6
                      |         "PLAY"                  ; Section 10.5
                      |         "RECORD"                ; Section 10.11
                      |         "REDIRECT"              ; Section 10.10
                      |         "SETUP"                 ; Section 10.4
                      |         "SET_PARAMETER"         ; Section 10.9
                      |         "TEARDOWN"              ; Section 10.7
                      |         extension-method

      extension-method = token

      Request-URI = "*" | absolute_URI

      RTSP-Version = "RTSP" "/" 1*DIGIT "." 1*DIGIT

    6.2 Request Header Fields

      request-header  =          Accept                   ; Section 12.1
                      |          Accept-Encoding          ; Section 12.2
                      |          Accept-Language          ; Section 12.3
                      |          Authorization            ; Section 12.5
                      |          From                     ; Section 12.20
                      |          If-Modified-Since        ; Section 12.23
                      |          Range                    ; Section 12.29
                      |          Referer                  ; Section 12.30
                      |          User-Agent               ; Section 12.41

       Note that in contrast to HTTP/1.1 [2], RTSP requests always contain
       the absolute URL (that is, including the scheme, host and port)
       rather than just the absolute path.


         HTTP/1.1 requires servers to understand the absolute URL, but
         clients are supposed to use the Host request header. This is purely
         needed for backward-compatibility with HTTP/1.0 servers, a
         consideration that does not apply to RTSP.

       The asterisk "*" in the Request-URI means that the request does not
       apply to a particular resource, but to the server itself, and is only
       allowed when the method used does not necessarily apply to a
       resource.  One example would be:

         OPTIONS * RTSP/1.0

    7 Response

       [H6] applies except that HTTP-Version is replaced by RTSP-Version.
       Also, RTSP defines additional status codes and does not define some
       HTTP codes. The valid response codes and the methods they can be used
       with are defined in Table 1.

       After receiving and interpreting a request message, the recipient
       responds with an RTSP response message.

         Response    =     Status-Line         ; Section 7.1
                     *(    general-header      ; Section 5
                     |     response-header     ; Section 7.1.2
                     |     entity-header )     ; Section 8.1
                           CRLF
                           [ message-body ]    ; Section 4.3

    7.1 Status-Line

       The first line of a Response message is the Status-Line, consisting
       of the protocol version followed by a numeric status code, and the
       textual phrase associated with the status code, with each element
       separated by SP characters. No CR or LF is allowed except in the
       final CRLF sequence.

       Status-Line =   RTSP-Version SP Status-Code SP Reason-Phrase CRLF

    7.1.1 Status Code and Reason Phrase

       The Status-Code element is a 3-digit integer result code of the
       attempt to understand and satisfy the request. These codes are fully
       defined in Section 11. The Reason-Phrase is intended to give a short
       textual description of the Status-Code. The Status-Code is intended
       for use by automata and the Reason-Phrase is intended for the human
       user. The client is not required to examine or display the Reason-
       Phrase.

       The first digit of the Status-Code defines the class of response. The
       last two digits do not have any categorization role. There are 5
       values for the first digit:

         * 1xx: Informational - Request received, continuing process
         * 2xx: Success - The action was successfully received, understood,
           and accepted
         * 3xx: Redirection - Further action must be taken in order to
           complete the request
         * 4xx: Client Error - The request contains bad syntax or cannot be
           fulfilled
         * 5xx: Server Error - The server failed to fulfill an apparently
           valid request

       The individual values of the numeric status codes defined for
       RTSP/1.0, and an example set of corresponding Reason-Phrase's, are
       presented below. The reason phrases listed here are only recommended
       - they may be replaced by local equivalents without affecting the
       protocol. Note that RTSP adopts most HTTP/1.1 [2] status codes and
       adds RTSP-specific status codes starting at x50 to avoid conflicts
       with newly defined HTTP status codes.


       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>

       RTSP status codes are extensible. RTSP applications are not required
       to understand the meaning of all registered status codes, though such
       understanding is obviously desirable. However, applications MUST
       understand the class of any status code, as indicated by the first
       digit, and treat any unrecognized response as being equivalent to the
       x00 status code of that class, with the exception that an
       unrecognized response MUST NOT be cached. For example, if an
       unrecognized status code of 431 is received by the client, it can
       safely assume that there was something wrong with its request and
       treat the response as if it had received a 400 status code. In such
       cases, user agents SHOULD present to the user the entity returned
       with the response, since that entity is likely to include human-
       readable information which will explain the unusual status.

       Code           reason

       100            Continue                         all

       200            OK                               all
       201            Created                          RECORD
       250            Low on Storage Space             RECORD

       300            Multiple Choices                 all
       301            Moved Permanently                all
       302            Moved Temporarily                all
       303            See Other                        all
       305            Use Proxy                        all
       400            Bad Request                      all
       401            Unauthorized                     all
       402            Payment Required                 all
       403            Forbidden                        all
       404            Not Found                        all
       405            Method Not Allowed               all
       406            Not Acceptable                   all
       407            Proxy Authentication Required    all
       408            Request Timeout                  all
       410            Gone                             all
       411            Length Required                  all
       412            Precondition Failed              DESCRIBE, SETUP
       413            Request Entity Too Large         all
       414            Request-URI Too Long             all
       415            Unsupported Media Type           all
       451            Invalid parameter                SETUP
       452            Illegal Conference Identifier    SETUP
       453            Not Enough Bandwidth             SETUP
       454            Session Not Found                all
       455            Method Not Valid In This State   all
       456            Header Field Not Valid           all
       457            Invalid Range                    PLAY
       458            Parameter Is Read-Only           SET_PARAMETER
       459            Aggregate Operation Not Allowed  all
       460            Only Aggregate Operation Allowed all
       461            Unsupported Transport            all
       462            Destination Unreachable          all

       500            Internal Server Error            all
       501            Not Implemented                  all
       502            Bad Gateway                      all
       503            Service Unavailable              all
       504            Gateway Timeout                  all
       505            RTSP Version Not Supported       all
       551            Option not support               all


          Table 1: Status codes and their usage with RTSP methods

    7.1.2 Response Header Fields

       The response-header fields allow the request recipient to pass
       additional information about the response which cannot be placed in
       the Status-Line. These header fields give information about the
       server and about further access to the resource identified by the
       Request-URI.


       response-header  =     Location             ; Section 12.25
                        |     Proxy-Authenticate   ; Section 12.26
                        |     Public               ; Section 12.28
                        |     Retry-After          ; Section 12.31
                        |     Server               ; Section 12.36
                        |     Vary                 ; Section 12.42
                        |     WWW-Authenticate     ; Section 12.44

       Response-header field names can be extended reliably only in
       combination with a change in the protocol version. However, new or
       experimental header fields MAY be given the semantics of response-
       header fields if all parties in the communication recognize them to
       be response-header fields. Unrecognized header fields are treated as
       entity-header fields.

    8 Entity

       Request and Response messages MAY transfer an entity if not otherwise
       restricted by the request method or response status code. An entity
       consists of entity-header fields and an entity-body, although some
       responses will only include the entity-headers.

       In this section, both sender and recipient refer to either the client
       or the server, depending on who sends and who receives the entity.

    8.1 Entity Header Fields

       Entity-header fields define optional metainformation about the
       entity-body or, if no body is present, about the resource identified
       by the request.

         entity-header       =    Allow               ; Section 12.4
                             |    Content-Base        ; Section 12.11
                             |    Content-Encoding    ; Section 12.12
                             |    Content-Language    ; Section 12.13
                             |    Content-Length      ; Section 12.14
                             |    Content-Location    ; Section 12.15
                             |    Content-Type        ; Section 12.16
                             |    Expires             ; Section 12.19
                             |    Last-Modified       ; Section 12.24
                             |    extension-header
         extension-header    =    message-header

       The extension-header mechanism allows additional entity-header fields
       to be defined without changing the protocol, but these fields cannot
       be assumed to be recognizable by the recipient. Unrecognized header
       fields SHOULD be ignored by the recipient and forwarded by proxies.
  • 相关阅读:
    Pyspider
    tornado websocket
    cookie、session、csrf
    python图片拼接
    SQLAlchemy查询
    tornado的ORM
    模板继承和UImodul 和 UImethods
    图像处理-05-浮雕效果处理
    图像处理-04-图像的黑白处理
    图像处理-03-实现图像的旋转
  • 原文地址:https://www.cnblogs.com/awiki/p/5018062.html
Copyright © 2011-2022 走看看