rfc2326.txt
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:190k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. Network Working Group                                     H. Schulzrinne
  2. Request for Comments: 2326                                   Columbia U.
  3. Category: Standards Track                                         A. Rao
  4.                                                                 Netscape
  5.                                                              R. Lanphier
  6.                                                             RealNetworks
  7.                                                               April 1998
  8.                   Real Time Streaming Protocol (RTSP)
  9. Status of this Memo
  10.    This document specifies an Internet standards track protocol for the
  11.    Internet community, and requests discussion and suggestions for
  12.    improvements.  Please refer to the current edition of the "Internet
  13.    Official Protocol Standards" (STD 1) for the standardization state
  14.    and status of this protocol.  Distribution of this memo is unlimited.
  15. Copyright Notice
  16.    Copyright (C) The Internet Society (1998).  All Rights Reserved.
  17. Abstract
  18.    The Real Time Streaming Protocol, or RTSP, is an application-level
  19.    protocol for control over the delivery of data with real-time
  20.    properties. RTSP provides an extensible framework to enable
  21.    controlled, on-demand delivery of real-time data, such as audio and
  22.    video. Sources of data can include both live data feeds and stored
  23.    clips. This protocol is intended to control multiple data delivery
  24.    sessions, provide a means for choosing delivery channels such as UDP,
  25.    multicast UDP and TCP, and provide a means for choosing delivery
  26.    mechanisms based upon RTP (RFC 1889).
  27. Table of Contents
  28.    * 1 Introduction .................................................  5
  29.         + 1.1 Purpose ...............................................  5
  30.         + 1.2 Requirements ..........................................  6
  31.         + 1.3 Terminology ...........................................  6
  32.         + 1.4 Protocol Properties ...................................  9
  33.         + 1.5 Extending RTSP ........................................ 11
  34.         + 1.6 Overall Operation ..................................... 11
  35.         + 1.7 RTSP States ........................................... 12
  36.         + 1.8 Relationship with Other Protocols ..................... 13
  37.    * 2 Notational Conventions ....................................... 14
  38.    * 3 Protocol Parameters .......................................... 14
  39.         + 3.1 RTSP Version .......................................... 14
  40. Schulzrinne, et. al.        Standards Track                     [Page 1]
  41. RFC 2326              Real Time Streaming Protocol            April 1998
  42.         + 3.2 RTSP URL .............................................. 14
  43.         + 3.3 Conference Identifiers ................................ 16
  44.         + 3.4 Session Identifiers ................................... 16
  45.         + 3.5 SMPTE Relative Timestamps ............................. 16
  46.         + 3.6 Normal Play Time ...................................... 17
  47.         + 3.7 Absolute Time ......................................... 18
  48.         + 3.8 Option Tags ........................................... 18
  49.              o 3.8.1 Registering New Option Tags with IANA .......... 18
  50.    * 4 RTSP Message ................................................. 19
  51.         + 4.1 Message Types ......................................... 19
  52.         + 4.2 Message Headers ....................................... 19
  53.         + 4.3 Message Body .......................................... 19
  54.         + 4.4 Message Length ........................................ 20
  55.    * 5 General Header Fields ........................................ 20
  56.    * 6 Request ...................................................... 20
  57.         + 6.1 Request Line .......................................... 21
  58.         + 6.2 Request Header Fields ................................. 21
  59.    * 7 Response ..................................................... 22
  60.         + 7.1 Status-Line ........................................... 22
  61.              o 7.1.1 Status Code and Reason Phrase .................. 22
  62.              o 7.1.2 Response Header Fields ......................... 26
  63.    * 8 Entity ....................................................... 27
  64.         + 8.1 Entity Header Fields .................................. 27
  65.         + 8.2 Entity Body ........................................... 28
  66.    * 9 Connections .................................................. 28
  67.         + 9.1 Pipelining ............................................ 28
  68.         + 9.2 Reliability and Acknowledgements ...................... 28
  69.    * 10 Method Definitions .......................................... 29
  70.         + 10.1 OPTIONS .............................................. 30
  71.         + 10.2 DESCRIBE ............................................. 31
  72.         + 10.3 ANNOUNCE ............................................. 32
  73.         + 10.4 SETUP ................................................ 33
  74.         + 10.5 PLAY ................................................. 34
  75.         + 10.6 PAUSE ................................................ 36
  76.         + 10.7 TEARDOWN ............................................. 37
  77.         + 10.8 GET_PARAMETER ........................................ 37
  78.         + 10.9 SET_PARAMETER ........................................ 38
  79.         + 10.10 REDIRECT ............................................ 39
  80.         + 10.11 RECORD .............................................. 39
  81.         + 10.12 Embedded (Interleaved) Binary Data .................. 40
  82.    * 11 Status Code Definitions ..................................... 41
  83.         + 11.1 Success 2xx .......................................... 41
  84.              o 11.1.1 250 Low on Storage Space ...................... 41
  85.         + 11.2 Redirection 3xx ...................................... 41
  86.         + 11.3 Client Error 4xx ..................................... 42
  87.              o 11.3.1 405 Method Not Allowed ........................ 42
  88.              o 11.3.2 451 Parameter Not Understood .................. 42
  89.              o 11.3.3 452 Conference Not Found ...................... 42
  90. Schulzrinne, et. al.        Standards Track                     [Page 2]
  91. RFC 2326              Real Time Streaming Protocol            April 1998
  92.              o 11.3.4 453 Not Enough Bandwidth ...................... 42
  93.              o 11.3.5 454 Session Not Found ......................... 42
  94.              o 11.3.6 455 Method Not Valid in This State ............ 42
  95.              o 11.3.7 456 Header Field Not Valid for Resource ....... 42
  96.              o 11.3.8 457 Invalid Range ............................. 43
  97.              o 11.3.9 458 Parameter Is Read-Only .................... 43
  98.              o 11.3.10 459 Aggregate Operation Not Allowed .......... 43
  99.              o 11.3.11 460 Only Aggregate Operation Allowed ......... 43
  100.              o 11.3.12 461 Unsupported Transport .................... 43
  101.              o 11.3.13 462 Destination Unreachable .................. 43
  102.              o 11.3.14 551 Option not supported ..................... 43
  103.    * 12 Header Field Definitions .................................... 44
  104.         + 12.1 Accept ............................................... 46
  105.         + 12.2 Accept-Encoding ...................................... 46
  106.         + 12.3 Accept-Language ...................................... 46
  107.         + 12.4 Allow ................................................ 46
  108.         + 12.5 Authorization ........................................ 46
  109.         + 12.6 Bandwidth ............................................ 46
  110.         + 12.7 Blocksize ............................................ 47
  111.         + 12.8 Cache-Control ........................................ 47
  112.         + 12.9 Conference ........................................... 49
  113.         + 12.10 Connection .......................................... 49
  114.         + 12.11 Content-Base ........................................ 49
  115.         + 12.12 Content-Encoding .................................... 49
  116.         + 12.13 Content-Language .................................... 50
  117.         + 12.14 Content-Length ...................................... 50
  118.         + 12.15 Content-Location .................................... 50
  119.         + 12.16 Content-Type ........................................ 50
  120.         + 12.17 CSeq ................................................ 50
  121.         + 12.18 Date ................................................ 50
  122.         + 12.19 Expires ............................................. 50
  123.         + 12.20 From ................................................ 51
  124.         + 12.21 Host ................................................ 51
  125.         + 12.22 If-Match ............................................ 51
  126.         + 12.23 If-Modified-Since ................................... 52
  127.         + 12.24 Last-Modified........................................ 52
  128.         + 12.25 Location ............................................ 52
  129.         + 12.26 Proxy-Authenticate .................................. 52
  130.         + 12.27 Proxy-Require ....................................... 52
  131.         + 12.28 Public .............................................. 53
  132.         + 12.29 Range ............................................... 53
  133.         + 12.30 Referer ............................................. 54
  134.         + 12.31 Retry-After ......................................... 54
  135.         + 12.32 Require ............................................. 54
  136.         + 12.33 RTP-Info ............................................ 55
  137.         + 12.34 Scale ............................................... 56
  138.         + 12.35 Speed ............................................... 57
  139.         + 12.36 Server .............................................. 57
  140. Schulzrinne, et. al.        Standards Track                     [Page 3]
  141. RFC 2326              Real Time Streaming Protocol            April 1998
  142.         + 12.37 Session ............................................. 57
  143.         + 12.38 Timestamp ........................................... 58
  144.         + 12.39 Transport ........................................... 58
  145.         + 12.40 Unsupported ......................................... 62
  146.         + 12.41 User-Agent .......................................... 62
  147.         + 12.42 Vary ................................................ 62
  148.         + 12.43 Via ................................................. 62
  149.         + 12.44 WWW-Authenticate .................................... 62
  150.    * 13 Caching ..................................................... 62
  151.    * 14 Examples .................................................... 63
  152.         + 14.1 Media on Demand (Unicast) ............................ 63
  153.         + 14.2 Streaming of a Container file ........................ 65
  154.         + 14.3 Single Stream Container Files ........................ 67
  155.         + 14.4 Live Media Presentation Using Multicast .............. 69
  156.         + 14.5 Playing media into an existing session ............... 70
  157.         + 14.6 Recording ............................................ 71
  158.    * 15 Syntax ...................................................... 72
  159.         + 15.1 Base Syntax .......................................... 72
  160.    * 16 Security Considerations ..................................... 73
  161.    * A RTSP Protocol State Machines ................................. 76
  162.         + A.1 Client State Machine .................................. 76
  163.         + A.2 Server State Machine .................................. 77
  164.    * B Interaction with RTP ......................................... 79
  165.    * C Use of SDP for RTSP Session Descriptions ..................... 80
  166.         + C.1 Definitions ........................................... 80
  167.              o C.1.1 Control URL .................................... 80
  168.              o C.1.2 Media streams .................................. 81
  169.              o C.1.3 Payload type(s) ................................ 81
  170.              o C.1.4 Format-specific parameters ..................... 81
  171.              o C.1.5 Range of presentation .......................... 82
  172.              o C.1.6 Time of availability ........................... 82
  173.              o C.1.7 Connection Information ......................... 82
  174.              o C.1.8 Entity Tag ..................................... 82
  175.         + C.2 Aggregate Control Not Available ....................... 83
  176.         + C.3 Aggregate Control Available ........................... 83
  177.    * D Minimal RTSP implementation .................................. 85
  178.         + D.1 Client ................................................ 85
  179.              o D.1.1 Basic Playback ................................. 86
  180.              o D.1.2 Authentication-enabled ......................... 86
  181.         + D.2 Server ................................................ 86
  182.              o D.2.1 Basic Playback ................................. 87
  183.              o D.2.2 Authentication-enabled ......................... 87
  184.    * E Authors' Addresses ........................................... 88
  185.    * F Acknowledgements ............................................. 89
  186.    * References ..................................................... 90
  187.    * Full Copyright Statement ....................................... 92
  188. Schulzrinne, et. al.        Standards Track                     [Page 4]
  189. RFC 2326              Real Time Streaming Protocol            April 1998
  190. 1 Introduction
  191. 1.1 Purpose
  192.    The Real-Time Streaming Protocol (RTSP) establishes and controls
  193.    either a single or several time-synchronized streams of continuous
  194.    media such as audio and video. It does not typically deliver the
  195.    continuous streams itself, although interleaving of the continuous
  196.    media stream with the control stream is possible (see Section 10.12).
  197.    In other words, RTSP acts as a "network remote control" for
  198.    multimedia servers.
  199.    The set of streams to be controlled is defined by a presentation
  200.    description. This memorandum does not define a format for a
  201.    presentation description.
  202.    There is no notion of an RTSP connection; instead, a server maintains
  203.    a session labeled by an identifier. An RTSP session is in no way tied
  204.    to a transport-level connection such as a TCP connection. During an
  205.    RTSP session, an RTSP client may open and close many reliable
  206.    transport connections to the server to issue RTSP requests.
  207.    Alternatively, it may use a connectionless transport protocol such as
  208.    UDP.
  209.    The streams controlled by RTSP may use RTP [1], but the operation of
  210.    RTSP does not depend on the transport mechanism used to carry
  211.    continuous media.  The protocol is intentionally similar in syntax
  212.    and operation to HTTP/1.1 [2] so that extension mechanisms to HTTP
  213.    can in most cases also be added to RTSP. However, RTSP differs in a
  214.    number of important aspects from HTTP:
  215.      * RTSP introduces a number of new methods and has a different
  216.        protocol identifier.
  217.      * An RTSP server needs to maintain state by default in almost all
  218.        cases, as opposed to the stateless nature of HTTP.
  219.      * Both an RTSP server and client can issue requests.
  220.      * Data is carried out-of-band by a different protocol. (There is an
  221.        exception to this.)
  222.      * RTSP is defined to use ISO 10646 (UTF-8) rather than ISO 8859-1,
  223.        consistent with current HTML internationalization efforts [3].
  224.      * The Request-URI always contains the absolute URI. Because of
  225.        backward compatibility with a historical blunder, HTTP/1.1 [2]
  226.        carries only the absolute path in the request and puts the host
  227.        name in a separate header field.
  228.      This makes "virtual hosting" easier, where a single host with one
  229.      IP address hosts several document trees.
  230. Schulzrinne, et. al.        Standards Track                     [Page 5]
  231. RFC 2326              Real Time Streaming Protocol            April 1998
  232.    The protocol supports the following operations:
  233.    Retrieval of media from media server:
  234.           The client can request a presentation description via HTTP or
  235.           some other method. If the presentation is being multicast, the
  236.           presentation description contains the multicast addresses and
  237.           ports to be used for the continuous media. If the presentation
  238.           is to be sent only to the client via unicast, the client
  239.           provides the destination for security reasons.
  240.    Invitation of a media server to a conference:
  241.           A media server can be "invited" to join an existing
  242.           conference, either to play back media into the presentation or
  243.           to record all or a subset of the media in a presentation. This
  244.           mode is useful for distributed teaching applications. Several
  245.           parties in the conference may take turns "pushing the remote
  246.           control buttons."
  247.    Addition of media to an existing presentation:
  248.           Particularly for live presentations, it is useful if the
  249.           server can tell the client about additional media becoming
  250.           available.
  251.    RTSP requests may be handled by proxies, tunnels and caches as in
  252.    HTTP/1.1 [2].
  253. 1.2 Requirements
  254.    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
  255.    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
  256.    document are to be interpreted as described in RFC 2119 [4].
  257. 1.3 Terminology
  258.    Some of the terminology has been adopted from HTTP/1.1 [2]. Terms not
  259.    listed here are defined as in HTTP/1.1.
  260.    Aggregate control:
  261.           The control of the multiple streams using a single timeline by
  262.           the server. For audio/video feeds, this means that the client
  263.           may issue a single play or pause message to control both the
  264.           audio and video feeds.
  265.    Conference:
  266.           a multiparty, multimedia presentation, where "multi" implies
  267.           greater than or equal to one.
  268. Schulzrinne, et. al.        Standards Track                     [Page 6]
  269. RFC 2326              Real Time Streaming Protocol            April 1998
  270.    Client:
  271.           The client requests continuous media data from the media
  272.           server.
  273.    Connection:
  274.           A transport layer virtual circuit established between two
  275.           programs for the purpose of communication.
  276.    Container file:
  277.           A file which may contain multiple media streams which often
  278.           comprise a presentation when played together. RTSP servers may
  279.           offer aggregate control on these files, though the concept of
  280.           a container file is not embedded in the protocol.
  281.    Continuous media:
  282.           Data where there is a timing relationship between source and
  283.           sink; that is, the sink must reproduce the timing relationship
  284.           that existed at the source. The most common examples of
  285.           continuous media are audio and motion video. Continuous media
  286.           can be real-time (interactive), where there is a "tight"
  287.           timing relationship between source and sink, or streaming
  288.           (playback), where the relationship is less strict.
  289.    Entity:
  290.           The information transferred as the payload of a request or
  291.           response. An entity consists of metainformation in the form of
  292.           entity-header fields and content in the form of an entity-
  293.           body, as described in Section 8.
  294.    Media initialization:
  295.           Datatype/codec specific initialization. This includes such
  296.           things as clockrates, color tables, etc. Any transport-
  297.           independent information which is required by a client for
  298.           playback of a media stream occurs in the media initialization
  299.           phase of stream setup.
  300.    Media parameter:
  301.           Parameter specific to a media type that may be changed before
  302.           or during stream playback.
  303.    Media server:
  304.           The server providing playback or recording services for one or
  305.           more media streams. Different media streams within a
  306.           presentation may originate from different media servers. A
  307.           media server may reside on the same or a different host as the
  308.           web server the presentation is invoked from.
  309. Schulzrinne, et. al.        Standards Track                     [Page 7]
  310. RFC 2326              Real Time Streaming Protocol            April 1998
  311.    Media server indirection:
  312.           Redirection of a media client to a different media server.
  313.    (Media) stream:
  314.           A single media instance, e.g., an audio stream or a video
  315.           stream as well as a single whiteboard or shared application
  316.           group. When using RTP, a stream consists of all RTP and RTCP
  317.           packets created by a source within an RTP session. This is
  318.           equivalent to the definition of a DSM-CC stream([5]).
  319.    Message:
  320.           The basic unit of RTSP communication, consisting of a
  321.           structured sequence of octets matching the syntax defined in
  322.           Section 15 and transmitted via a connection or a
  323.           connectionless protocol.
  324.    Participant:
  325.           Member of a conference. A participant may be a machine, e.g.,
  326.           a media record or playback server.
  327.    Presentation:
  328.           A set of one or more streams presented to the client as a
  329.           complete media feed, using a presentation description as
  330.           defined below. In most cases in the RTSP context, this implies
  331.           aggregate control of those streams, but does not have to.
  332.    Presentation description:
  333.           A presentation description contains information about one or
  334.           more media streams within a presentation, such as the set of
  335.           encodings, network addresses and information about the
  336.           content.  Other IETF protocols such as SDP (RFC 2327 [6]) use
  337.           the term "session" for a live presentation. The presentation
  338.           description may take several different formats, including but
  339.           not limited to the session description format SDP.
  340.    Response:
  341.           An RTSP response. If an HTTP response is meant, that is
  342.           indicated explicitly.
  343.    Request:
  344.           An RTSP request. If an HTTP request is meant, that is
  345.           indicated explicitly.
  346.    RTSP session:
  347.           A complete RTSP "transaction", e.g., the viewing of a movie.
  348.           A session typically consists of a client setting up a
  349.           transport mechanism for the continuous media stream (SETUP),
  350.           starting the stream with PLAY or RECORD, and closing the
  351. Schulzrinne, et. al.        Standards Track                     [Page 8]
  352. RFC 2326              Real Time Streaming Protocol            April 1998
  353.           stream with TEARDOWN.
  354.    Transport initialization:
  355.           The negotiation of transport information (e.g., port numbers,
  356.           transport protocols) between the client and the server.
  357. 1.4 Protocol Properties
  358.    RTSP has the following properties:
  359.    Extendable:
  360.           New methods and parameters can be easily added to RTSP.
  361.    Easy to parse:
  362.           RTSP can be parsed by standard HTTP or MIME parsers.
  363.    Secure:
  364.           RTSP re-uses web security mechanisms. All HTTP authentication
  365.           mechanisms such as basic (RFC 2068 [2, Section 11.1]) and
  366.           digest authentication (RFC 2069 [8]) are directly applicable.
  367.           One may also reuse transport or network layer security
  368.           mechanisms.
  369.    Transport-independent:
  370.           RTSP may use either an unreliable datagram protocol (UDP) (RFC
  371.           768 [9]), a reliable datagram protocol (RDP, RFC 1151, not
  372.           widely used [10]) or a reliable stream protocol such as TCP
  373.           (RFC 793 [11]) as it implements application-level reliability.
  374.    Multi-server capable:
  375.           Each media stream within a presentation can reside on a
  376.           different server. The client automatically establishes several
  377.           concurrent control sessions with the different media servers.
  378.           Media synchronization is performed at the transport level.
  379.    Control of recording devices:
  380.           The protocol can control both recording and playback devices,
  381.           as well as devices that can alternate between the two modes
  382.           ("VCR").
  383.    Separation of stream control and conference initiation:
  384.           Stream control is divorced from inviting a media server to a
  385.           conference. The only requirement is that the conference
  386.           initiation protocol either provides or can be used to create a
  387.           unique conference identifier. In particular, SIP [12] or H.323
  388.           [13] may be used to invite a server to a conference.
  389. Schulzrinne, et. al.        Standards Track                     [Page 9]
  390. RFC 2326              Real Time Streaming Protocol            April 1998
  391.    Suitable for professional applications:
  392.           RTSP supports frame-level accuracy through SMPTE time stamps
  393.           to allow remote digital editing.
  394.    Presentation description neutral:
  395.           The protocol does not impose a particular presentation
  396.           description or metafile format and can convey the type of
  397.           format to be used. However, the presentation description must
  398.           contain at least one RTSP URI.
  399.    Proxy and firewall friendly:
  400.           The protocol should be readily handled by both application and
  401.           transport-layer (SOCKS [14]) firewalls. A firewall may need to
  402.           understand the SETUP method to open a "hole" for the UDP media
  403.           stream.
  404.    HTTP-friendly:
  405.           Where sensible, RTSP reuses HTTP concepts, so that the
  406.           existing infrastructure can be reused. This infrastructure
  407.           includes PICS (Platform for Internet Content Selection
  408.           [15,16]) for associating labels with content. However, RTSP
  409.           does not just add methods to HTTP since the controlling
  410.           continuous media requires server state in most cases.
  411.    Appropriate server control:
  412.           If a client can start a stream, it must be able to stop a
  413.           stream. Servers should not start streaming to clients in such
  414.           a way that clients cannot stop the stream.
  415.    Transport negotiation:
  416.           The client can negotiate the transport method prior to
  417.           actually needing to process a continuous media stream.
  418.    Capability negotiation:
  419.           If basic features are disabled, there must be some clean
  420.           mechanism for the client to determine which methods are not
  421.           going to be implemented. This allows clients to present the
  422.           appropriate user interface. For example, if seeking is not
  423.           allowed, the user interface must be able to disallow moving a
  424.           sliding position indicator.
  425.      An earlier requirement in RTSP was multi-client capability.
  426.      However, it was determined that a better approach was to make sure
  427.      that the protocol is easily extensible to the multi-client
  428.      scenario. Stream identifiers can be used by several control
  429.      streams, so that "passing the remote" would be possible. The
  430.      protocol would not address how several clients negotiate access;
  431.      this is left to either a "social protocol" or some other floor
  432. Schulzrinne, et. al.        Standards Track                    [Page 10]
  433. RFC 2326              Real Time Streaming Protocol            April 1998
  434.      control mechanism.
  435. 1.5 Extending RTSP
  436.    Since not all media servers have the same functionality, media
  437.    servers by necessity will support different sets of requests. For
  438.    example:
  439.      * A server may only be capable of playback thus has no need to
  440.        support the RECORD request.
  441.      * A server may not be capable of seeking (absolute positioning) if
  442.        it is to support live events only.
  443.      * Some servers may not support setting stream parameters and thus
  444.        not support GET_PARAMETER and SET_PARAMETER.
  445.    A server SHOULD implement all header fields described in Section 12.
  446.    It is up to the creators of presentation descriptions not to ask the
  447.    impossible of a server. This situation is similar in HTTP/1.1 [2],
  448.    where the methods described in [H19.6] are not likely to be supported
  449.    across all servers.
  450.    RTSP can be extended in three ways, listed here in order of the
  451.    magnitude of changes supported:
  452.      * Existing methods can be extended with new parameters, as long as
  453.        these parameters can be safely ignored by the recipient. (This is
  454.        equivalent to adding new parameters to an HTML tag.) If the
  455.        client needs negative acknowledgement when a method extension is
  456.        not supported, a tag corresponding to the extension may be added
  457.        in the Require: field (see Section 12.32).
  458.      * New methods can be added. If the recipient of the message does
  459.        not understand the request, it responds with error code 501 (Not
  460.        implemented) and the sender should not attempt to use this method
  461.        again. A client may also use the OPTIONS method to inquire about
  462.        methods supported by the server. The server SHOULD list the
  463.        methods it supports using the Public response header.
  464.      * A new version of the protocol can be defined, allowing almost all
  465.        aspects (except the position of the protocol version number) to
  466.        change.
  467. 1.6 Overall Operation
  468.    Each presentation and media stream may be identified by an RTSP URL.
  469.    The overall presentation and the properties of the media the
  470.    presentation is made up of are defined by a presentation description
  471.    file, the format of which is outside the scope of this specification.
  472.    The presentation description file may be obtained by the client using
  473. Schulzrinne, et. al.        Standards Track                    [Page 11]
  474. RFC 2326              Real Time Streaming Protocol            April 1998
  475.    HTTP or other means such as email and may not necessarily be stored
  476.    on the media server.
  477.    For the purposes of this specification, a presentation description is
  478.    assumed to describe one or more presentations, each of which
  479.    maintains a common time axis. For simplicity of exposition and
  480.    without loss of generality, it is assumed that the presentation
  481.    description contains exactly one such presentation. A presentation
  482.    may contain several media streams.
  483.    The presentation description file contains a description of the media
  484.    streams making up the presentation, including their encodings,
  485.    language, and other parameters that enable the client to choose the
  486.    most appropriate combination of media. In this presentation
  487.    description, each media stream that is individually controllable by
  488.    RTSP is identified by an RTSP URL, which points to the media server
  489.    handling that particular media stream and names the stream stored on
  490.    that server. Several media streams can be located on different
  491.    servers; for example, audio and video streams can be split across
  492.    servers for load sharing. The description also enumerates which
  493.    transport methods the server is capable of.
  494.    Besides the media parameters, the network destination address and
  495.    port need to be determined. Several modes of operation can be
  496.    distinguished:
  497.    Unicast:
  498.           The media is transmitted to the source of the RTSP request,
  499.           with the port number chosen by the client. Alternatively, the
  500.           media is transmitted on the same reliable stream as RTSP.
  501.    Multicast, server chooses address:
  502.           The media server picks the multicast address and port. This is
  503.           the typical case for a live or near-media-on-demand
  504.           transmission.
  505.    Multicast, client chooses address:
  506.           If the server is to participate in an existing multicast
  507.           conference, the multicast address, port and encryption key are
  508.           given by the conference description, established by means
  509.           outside the scope of this specification.
  510. 1.7 RTSP States
  511.    RTSP controls a stream which may be sent via a separate protocol,
  512.    independent of the control channel. For example, RTSP control may
  513.    occur on a TCP connection while the data flows via UDP. Thus, data
  514.    delivery continues even if no RTSP requests are received by the media
  515. Schulzrinne, et. al.        Standards Track                    [Page 12]
  516. RFC 2326              Real Time Streaming Protocol            April 1998
  517.    server. Also, during its lifetime, a single media stream may be
  518.    controlled by RTSP requests issued sequentially on different TCP
  519.    connections. Therefore, the server needs to maintain "session state"
  520.    to be able to correlate RTSP requests with a stream. The state
  521.    transitions are described in Section A.
  522.    Many methods in RTSP do not contribute to state. However, the
  523.    following play a central role in defining the allocation and usage of
  524.    stream resources on the server: SETUP, PLAY, RECORD, PAUSE, and
  525.    TEARDOWN.
  526.    SETUP:
  527.           Causes the server to allocate resources for a stream and start
  528.           an RTSP session.
  529.    PLAY and RECORD:
  530.           Starts data transmission on a stream allocated via SETUP.
  531.    PAUSE:
  532.           Temporarily halts a stream without freeing server resources.
  533.    TEARDOWN:
  534.           Frees resources associated with the stream. The RTSP session
  535.           ceases to exist on the server.
  536.           RTSP methods that contribute to state use the Session header
  537.           field (Section 12.37) to identify the RTSP session whose state
  538.           is being manipulated. The server generates session identifiers
  539.           in response to SETUP requests (Section 10.4).
  540. 1.8 Relationship with Other Protocols
  541.    RTSP has some overlap in functionality with HTTP. It also may
  542.    interact with HTTP in that the initial contact with streaming content
  543.    is often to be made through a web page. The current protocol
  544.    specification aims to allow different hand-off points between a web
  545.    server and the media server implementing RTSP. For example, the
  546.    presentation description can be retrieved using HTTP or RTSP, which
  547.    reduces roundtrips in web-browser-based scenarios, yet also allows
  548.    for standalone RTSP servers and clients which do not rely on HTTP at
  549.    all.
  550.    However, RTSP differs fundamentally from HTTP in that data delivery
  551.    takes place out-of-band in a different protocol. HTTP is an
  552.    asymmetric protocol where the client issues requests and the server
  553.    responds. In RTSP, both the media client and media server can issue
  554.    requests. RTSP requests are also not stateless; they may set
  555.    parameters and continue to control a media stream long after the
  556. Schulzrinne, et. al.        Standards Track                    [Page 13]
  557. RFC 2326              Real Time Streaming Protocol            April 1998
  558.    request has been acknowledged.
  559.      Re-using HTTP functionality has advantages in at least two areas,
  560.      namely security and proxies. The requirements are very similar, so
  561.      having the ability to adopt HTTP work on caches, proxies and
  562.      authentication is valuable.
  563.    While most real-time media will use RTP as a transport protocol, RTSP
  564.    is not tied to RTP.
  565.    RTSP assumes the existence of a presentation description format that
  566.    can express both static and temporal properties of a presentation
  567.    containing several media streams.
  568. 2 Notational Conventions
  569.    Since many of the definitions and syntax are identical to HTTP/1.1,
  570.    this specification only points to the section where they are defined
  571.    rather than copying it. For brevity, [HX.Y] is to be taken to refer
  572.    to Section X.Y of the current HTTP/1.1 specification (RFC 2068 [2]).
  573.    All the mechanisms specified in this document are described in both
  574.    prose and an augmented Backus-Naur form (BNF) similar to that used in
  575.    [H2.1]. It is described in detail in RFC 2234 [17], with the
  576.    difference that this RTSP specification maintains the "1#" notation
  577.    for comma-separated lists.
  578.    In this memo, we use indented and smaller-type paragraphs to provide
  579.    background and motivation. This is intended to give readers who were
  580.    not involved with the formulation of the specification an
  581.    understanding of why things are the way that they are in RTSP.
  582. 3 Protocol Parameters
  583. 3.1 RTSP Version
  584.    [H3.1] applies, with HTTP replaced by RTSP.
  585. 3.2 RTSP URL
  586.    The "rtsp" and "rtspu" schemes are used to refer to network resources
  587.    via the RTSP protocol. This section defines the scheme-specific
  588.    syntax and semantics for RTSP URLs.
  589.    rtsp_URL  =   ( "rtsp:" | "rtspu:" )
  590.                  "//" host [ ":" port ] [ abs_path ]
  591.    host      =   <A legal Internet host domain name of IP address
  592.                  (in dotted decimal form), as defined by Section 2.1
  593. Schulzrinne, et. al.        Standards Track                    [Page 14]
  594. RFC 2326              Real Time Streaming Protocol            April 1998
  595.                  of RFC 1123 cite{rfc1123}>
  596.    port      =   *DIGIT
  597.    abs_path is defined in [H3.2.1].
  598.      Note that fragment and query identifiers do not have a well-defined
  599.      meaning at this time, with the interpretation left to the RTSP
  600.      server.
  601.    The scheme rtsp requires that commands are issued via a reliable
  602.    protocol (within the Internet, TCP), while the scheme rtspu identifies
  603.    an unreliable protocol (within the Internet, UDP).
  604.    If the port is empty or not given, port 554 is assumed. The semantics
  605.    are that the identified resource can be controlled by RTSP at the
  606.    server listening for TCP (scheme "rtsp") connections or UDP (scheme
  607.    "rtspu") packets on that port of host, and the Request-URI for the
  608.    resource is rtsp_URL.
  609.    The use of IP addresses in URLs SHOULD be avoided whenever possible
  610.    (see RFC 1924 [19]).
  611.    A presentation or a stream is identified by a textual media
  612.    identifier, using the character set and escape conventions [H3.2] of
  613.    URLs (RFC 1738 [20]). URLs may refer to a stream or an aggregate of
  614.    streams, i.e., a presentation. Accordingly, requests described in
  615.    Section 10 can apply to either the whole presentation or an individual
  616.    stream within the presentation. Note that some request methods can
  617.    only be applied to streams, not presentations and vice versa.
  618.    For example, the RTSP URL:
  619.      rtsp://media.example.com:554/twister/audiotrack
  620.    identifies the audio stream within the presentation "twister", which
  621.    can be controlled via RTSP requests issued over a TCP connection to
  622.    port 554 of host media.example.com.
  623.    Also, the RTSP URL:
  624.      rtsp://media.example.com:554/twister
  625.    identifies the presentation "twister", which may be composed of
  626.    audio and video streams.
  627.    This does not imply a standard way to reference streams in URLs.
  628.    The presentation description defines the hierarchical relationships
  629.    in the presentation and the URLs for the individual streams. A
  630.    presentation description may name a stream "a.mov" and the whole
  631.    presentation "b.mov".
  632. Schulzrinne, et. al.        Standards Track                    [Page 15]
  633. RFC 2326              Real Time Streaming Protocol            April 1998
  634.    The path components of the RTSP URL are opaque to the client and do
  635.    not imply any particular file system structure for the server.
  636.      This decoupling also allows presentation descriptions to be used
  637.      with non-RTSP media control protocols simply by replacing the
  638.      scheme in the URL.
  639. 3.3 Conference Identifiers
  640.    Conference identifiers are opaque to RTSP and are encoded using
  641.    standard URI encoding methods (i.e., LWS is escaped with %). They can
  642.    contain any octet value. The conference identifier MUST be globally
  643.    unique. For H.323, the conferenceID value is to be used.
  644.  conference-id =   1*xchar
  645.      Conference identifiers are used to allow RTSP sessions to obtain
  646.      parameters from multimedia conferences the media server is
  647.      participating in. These conferences are created by protocols
  648.      outside the scope of this specification, e.g., H.323 [13] or SIP
  649.      [12]. Instead of the RTSP client explicitly providing transport
  650.      information, for example, it asks the media server to use the
  651.      values in the conference description instead.
  652. 3.4 Session Identifiers
  653.    Session identifiers are opaque strings of arbitrary length. Linear
  654.    white space must be URL-escaped. A session identifier MUST be chosen
  655.    randomly and MUST be at least eight octets long to make guessing it
  656.    more difficult. (See Section 16.)
  657.      session-id   =   1*( ALPHA | DIGIT | safe )
  658. 3.5 SMPTE Relative Timestamps
  659.    A SMPTE relative timestamp expresses time relative to the start of
  660.    the clip. Relative timestamps are expressed as SMPTE time codes for
  661.    frame-level access accuracy. The time code has the format
  662.    hours:minutes:seconds:frames.subframes, with the origin at the start
  663.    of the clip. The default smpte format is "SMPTE 30 drop" format, with
  664.    frame rate is 29.97 frames per second. Other SMPTE codes MAY be
  665.    supported (such as "SMPTE 25") through the use of alternative use of
  666.    "smpte time". For the "frames" field in the time value can assume
  667.    the values 0 through 29. The difference between 30 and 29.97 frames
  668.    per second is handled by dropping the first two frame indices (values
  669.    00 and 01) of every minute, except every tenth minute. If the frame
  670.    value is zero, it may be omitted. Subframes are measured in
  671.    one-hundredth of a frame.
  672. Schulzrinne, et. al.        Standards Track                    [Page 16]
  673. RFC 2326              Real Time Streaming Protocol            April 1998
  674.    smpte-range  =   smpte-type "=" smpte-time "-" [ smpte-time ]
  675.    smpte-type   =   "smpte" | "smpte-30-drop" | "smpte-25"
  676.                                    ; other timecodes may be added
  677.    smpte-time   =   1*2DIGIT ":" 1*2DIGIT ":" 1*2DIGIT [ ":" 1*2DIGIT ]
  678.                        [ "." 1*2DIGIT ]
  679.    Examples:
  680.      smpte=10:12:33:20-
  681.      smpte=10:07:33-
  682.      smpte=10:07:00-10:07:33:05.01
  683.      smpte-25=10:07:00-10:07:33:05.01
  684. 3.6 Normal Play Time
  685.    Normal play time (NPT) indicates the stream absolute position
  686.    relative to the beginning of the presentation. The timestamp consists
  687.    of a decimal fraction. The part left of the decimal may be expressed
  688.    in either seconds or hours, minutes, and seconds. The part right of
  689.    the decimal point measures fractions of a second.
  690.    The beginning of a presentation corresponds to 0.0 seconds. Negative
  691.    values are not defined. The special constant now is defined as the
  692.    current instant of a live event. It may be used only for live events.
  693.    NPT is defined as in DSM-CC: "Intuitively, NPT is the clock the
  694.    viewer associates with a program. It is often digitally displayed on
  695.    a VCR. NPT advances normally when in normal play mode (scale = 1),
  696.    advances at a faster rate when in fast scan forward (high positive
  697.    scale ratio), decrements when in scan reverse (high negative scale
  698.    ratio) and is fixed in pause mode. NPT is (logically) equivalent to
  699.    SMPTE time codes." [5]
  700.    npt-range    =   ( npt-time "-" [ npt-time ] ) | ( "-" npt-time )
  701.    npt-time     =   "now" | npt-sec | npt-hhmmss
  702.    npt-sec      =   1*DIGIT [ "." *DIGIT ]
  703.    npt-hhmmss   =   npt-hh ":" npt-mm ":" npt-ss [ "." *DIGIT ]
  704.    npt-hh       =   1*DIGIT     ; any positive number
  705.    npt-mm       =   1*2DIGIT    ; 0-59
  706.    npt-ss       =   1*2DIGIT    ; 0-59
  707.    Examples:
  708.      npt=123.45-125
  709.      npt=12:05:35.3-
  710.      npt=now-
  711.      The syntax conforms to ISO 8601. The npt-sec notation is optimized
  712.      for automatic generation, the ntp-hhmmss notation for consumption
  713.      by human readers. The "now" constant allows clients to request to
  714. Schulzrinne, et. al.        Standards Track                    [Page 17]
  715. RFC 2326              Real Time Streaming Protocol            April 1998
  716.      receive the live feed rather than the stored or time-delayed
  717.      version. This is needed since neither absolute time nor zero time
  718.      are appropriate for this case.
  719. 3.7 Absolute Time
  720.      Absolute time is expressed as ISO 8601 timestamps, using UTC (GMT).
  721.      Fractions of a second may be indicated.
  722.      utc-range    =   "clock" "=" utc-time "-" [ utc-time ]
  723.      utc-time     =   utc-date "T" utc-time "Z"
  724.      utc-date     =   8DIGIT                    ; < YYYYMMDD >
  725.      utc-time     =   6DIGIT [ "." fraction ]   ; < HHMMSS.fraction >
  726.      Example for November 8, 1996 at 14h37 and 20 and a quarter seconds
  727.      UTC:
  728.      19961108T143720.25Z
  729. 3.8 Option Tags
  730.    Option tags are unique identifiers used to designate new options in
  731.    RTSP. These tags are used in Require (Section 12.32) and Proxy-
  732.    Require (Section 12.27) header fields.
  733.    Syntax:
  734.      option-tag   =   1*xchar
  735.    The creator of a new RTSP option should either prefix the option with
  736.    a reverse domain name (e.g., "com.foo.mynewfeature" is an apt name
  737.    for a feature whose inventor can be reached at "foo.com"), or
  738.    register the new option with the Internet Assigned Numbers Authority
  739.    (IANA).
  740. 3.8.1 Registering New Option Tags with IANA
  741.    When registering a new RTSP option, the following information should
  742.    be provided:
  743.      * Name and description of option. The name may be of any length,
  744.        but SHOULD be no more than twenty characters long. The name MUST
  745.        not contain any spaces, control characters or periods.
  746.      * Indication of who has change control over the option (for
  747.        example, IETF, ISO, ITU-T, other international standardization
  748.        bodies, a consortium or a particular company or group of
  749.        companies);
  750. Schulzrinne, et. al.        Standards Track                    [Page 18]
  751. RFC 2326              Real Time Streaming Protocol            April 1998
  752.      * A reference to a further description, if available, for example
  753.        (in order of preference) an RFC, a published paper, a patent
  754.        filing, a technical report, documented source code or a computer
  755.        manual;
  756.      * For proprietary options, contact information (postal and email
  757.        address);
  758. 4 RTSP Message
  759.    RTSP is a text-based protocol and uses the ISO 10646 character set in
  760.    UTF-8 encoding (RFC 2279 [21]). Lines are terminated by CRLF, but
  761.    receivers should be prepared to also interpret CR and LF by
  762.    themselves as line terminators.
  763.      Text-based protocols make it easier to add optional parameters in a
  764.      self-describing manner. Since the number of parameters and the
  765.      frequency of commands is low, processing efficiency is not a
  766.      concern. Text-based protocols, if done carefully, also allow easy
  767.      implementation of research prototypes in scripting languages such
  768.      as Tcl, Visual Basic and Perl.
  769.      The 10646 character set avoids tricky character set switching, but
  770.      is invisible to the application as long as US-ASCII is being used.
  771.      This is also the encoding used for RTCP. ISO 8859-1 translates
  772.      directly into Unicode with a high-order octet of zero. ISO 8859-1
  773.      characters with the most-significant bit set are represented as
  774.      1100001x 10xxxxxx. (See RFC 2279 [21])
  775.    RTSP messages can be carried over any lower-layer transport protocol
  776.    that is 8-bit clean.
  777.    Requests contain methods, the object the method is operating upon and
  778.    parameters to further describe the method. Methods are idempotent,
  779.    unless otherwise noted. Methods are also designed to require little
  780.    or no state maintenance at the media server.
  781. 4.1 Message Types
  782.    See [H4.1]
  783. 4.2 Message Headers
  784.    See [H4.2]
  785. 4.3 Message Body
  786.    See [H4.3]
  787. Schulzrinne, et. al.        Standards Track                    [Page 19]
  788. RFC 2326              Real Time Streaming Protocol            April 1998
  789. 4.4 Message Length
  790.    When a message body is included with a message, the length of that
  791.    body is determined by one of the following (in order of precedence):
  792.    1.     Any response message which MUST NOT include a message body
  793.           (such as the 1xx, 204, and 304 responses) is always terminated
  794.           by the first empty line after the header fields, regardless of
  795.           the entity-header fields present in the message. (Note: An
  796.           empty line consists of only CRLF.)
  797.    2.     If a Content-Length header field (section 12.14) is present,
  798.           its value in bytes represents the length of the message-body.
  799.           If this header field is not present, a value of zero is
  800.           assumed.
  801.    3.     By the server closing the connection. (Closing the connection
  802.           cannot be used to indicate the end of a request body, since
  803.           that would leave no possibility for the server to send back a
  804.           response.)
  805.    Note that RTSP does not (at present) support the HTTP/1.1 "chunked"
  806.    transfer coding(see [H3.6]) and requires the presence of the
  807.    Content-Length header field.
  808.      Given the moderate length of presentation descriptions returned,
  809.      the server should always be able to determine its length, even if
  810.      it is generated dynamically, making the chunked transfer encoding
  811.      unnecessary. Even though Content-Length must be present if there is
  812.      any entity body, the rules ensure reasonable behavior even if the
  813.      length is not given explicitly.
  814. 5 General Header Fields
  815.    See [H4.5], except that Pragma, Transfer-Encoding and Upgrade headers
  816.    are not defined:
  817.       general-header     =     Cache-Control     ; Section 12.8
  818.                          |     Connection        ; Section 12.10
  819.                          |     Date              ; Section 12.18
  820.                          |     Via               ; Section 12.43
  821. 6 Request
  822.    A request message from a client to a server or vice versa includes,
  823.    within the first line of that message, the method to be applied to
  824.    the resource, the identifier of the resource, and the protocol
  825.    version in use.
  826. Schulzrinne, et. al.        Standards Track                    [Page 20]
  827. RFC 2326              Real Time Streaming Protocol            April 1998
  828.        Request      =       Request-Line          ; Section 6.1
  829.                     *(      general-header        ; Section 5
  830.                     |       request-header        ; Section 6.2
  831.                     |       entity-header )       ; Section 8.1
  832.                             CRLF
  833.                             [ message-body ]      ; Section 4.3
  834. 6.1 Request Line
  835.   Request-Line = Method SP Request-URI SP RTSP-Version CRLF
  836.    Method         =         "DESCRIBE"              ; Section 10.2
  837.                   |         "ANNOUNCE"              ; Section 10.3
  838.                   |         "GET_PARAMETER"         ; Section 10.8
  839.                   |         "OPTIONS"               ; Section 10.1
  840.                   |         "PAUSE"                 ; Section 10.6
  841.                   |         "PLAY"                  ; Section 10.5
  842.                   |         "RECORD"                ; Section 10.11
  843.                   |         "REDIRECT"              ; Section 10.10
  844.                   |         "SETUP"                 ; Section 10.4
  845.                   |         "SET_PARAMETER"         ; Section 10.9
  846.                   |         "TEARDOWN"              ; Section 10.7
  847.                   |         extension-method
  848.   extension-method = token
  849.   Request-URI = "*" | absolute_URI
  850.   RTSP-Version = "RTSP" "/" 1*DIGIT "." 1*DIGIT
  851. 6.2 Request Header Fields
  852.   request-header  =          Accept                   ; Section 12.1
  853.                   |          Accept-Encoding          ; Section 12.2
  854.                   |          Accept-Language          ; Section 12.3
  855.                   |          Authorization            ; Section 12.5
  856.                   |          From                     ; Section 12.20
  857.                   |          If-Modified-Since        ; Section 12.23
  858.                   |          Range                    ; Section 12.29
  859.                   |          Referer                  ; Section 12.30
  860.                   |          User-Agent               ; Section 12.41
  861.    Note that in contrast to HTTP/1.1 [2], RTSP requests always contain
  862.    the absolute URL (that is, including the scheme, host and port)
  863.    rather than just the absolute path.
  864. Schulzrinne, et. al.        Standards Track                    [Page 21]
  865. RFC 2326              Real Time Streaming Protocol            April 1998
  866.      HTTP/1.1 requires servers to understand the absolute URL, but
  867.      clients are supposed to use the Host request header. This is purely
  868.      needed for backward-compatibility with HTTP/1.0 servers, a
  869.      consideration that does not apply to RTSP.
  870.    The asterisk "*" in the Request-URI means that the request does not
  871.    apply to a particular resource, but to the server itself, and is only
  872.    allowed when the method used does not necessarily apply to a
  873.    resource.  One example would be:
  874.      OPTIONS * RTSP/1.0
  875. 7 Response
  876.    [H6] applies except that HTTP-Version is replaced by RTSP-Version.
  877.    Also, RTSP defines additional status codes and does not define some
  878.    HTTP codes. The valid response codes and the methods they can be used
  879.    with are defined in Table 1.
  880.    After receiving and interpreting a request message, the recipient
  881.    responds with an RTSP response message.
  882.      Response    =     Status-Line         ; Section 7.1
  883.                  *(    general-header      ; Section 5
  884.                  |     response-header     ; Section 7.1.2
  885.                  |     entity-header )     ; Section 8.1
  886.                        CRLF
  887.                        [ message-body ]    ; Section 4.3
  888. 7.1 Status-Line
  889.    The first line of a Response message is the Status-Line, consisting
  890.    of the protocol version followed by a numeric status code, and the
  891.    textual phrase associated with the status code, with each element
  892.    separated by SP characters. No CR or LF is allowed except in the
  893.    final CRLF sequence.
  894.    Status-Line =   RTSP-Version SP Status-Code SP Reason-Phrase CRLF
  895. 7.1.1 Status Code and Reason Phrase
  896.    The Status-Code element is a 3-digit integer result code of the
  897.    attempt to understand and satisfy the request. These codes are fully
  898.    defined in Section 11. The Reason-Phrase is intended to give a short
  899.    textual description of the Status-Code. The Status-Code is intended
  900.    for use by automata and the Reason-Phrase is intended for the human
  901.    user. The client is not required to examine or display the Reason-
  902.    Phrase.
  903. Schulzrinne, et. al.        Standards Track                    [Page 22]
  904. RFC 2326              Real Time Streaming Protocol            April 1998
  905.    The first digit of the Status-Code defines the class of response. The
  906.    last two digits do not have any categorization role. There are 5
  907.    values for the first digit:
  908.      * 1xx: Informational - Request received, continuing process
  909.      * 2xx: Success - The action was successfully received, understood,
  910.        and accepted
  911.      * 3xx: Redirection - Further action must be taken in order to
  912.        complete the request
  913.      * 4xx: Client Error - The request contains bad syntax or cannot be
  914.        fulfilled
  915.      * 5xx: Server Error - The server failed to fulfill an apparently
  916.        valid request
  917.    The individual values of the numeric status codes defined for
  918.    RTSP/1.0, and an example set of corresponding Reason-Phrase's, are
  919.    presented below. The reason phrases listed here are only recommended
  920.    - they may be replaced by local equivalents without affecting the
  921.    protocol. Note that RTSP adopts most HTTP/1.1 [2] status codes and
  922.    adds RTSP-specific status codes starting at x50 to avoid conflicts
  923.    with newly defined HTTP status codes.
  924. Schulzrinne, et. al.        Standards Track                    [Page 23]
  925. RFC 2326              Real Time Streaming Protocol            April 1998
  926.    Status-Code  =     "100"      ; Continue
  927.                 |     "200"      ; OK
  928.                 |     "201"      ; Created
  929.                 |     "250"      ; Low on Storage Space
  930.                 |     "300"      ; Multiple Choices
  931.                 |     "301"      ; Moved Permanently
  932.                 |     "302"      ; Moved Temporarily
  933.                 |     "303"      ; See Other
  934.                 |     "304"      ; Not Modified
  935.                 |     "305"      ; Use Proxy
  936.                 |     "400"      ; Bad Request
  937.                 |     "401"      ; Unauthorized
  938.                 |     "402"      ; Payment Required
  939.                 |     "403"      ; Forbidden
  940.                 |     "404"      ; Not Found
  941.                 |     "405"      ; Method Not Allowed
  942.                 |     "406"      ; Not Acceptable
  943.                 |     "407"      ; Proxy Authentication Required
  944.                 |     "408"      ; Request Time-out
  945.                 |     "410"      ; Gone
  946.                 |     "411"      ; Length Required
  947.                 |     "412"      ; Precondition Failed
  948.                 |     "413"      ; Request Entity Too Large
  949.                 |     "414"      ; Request-URI Too Large
  950.                 |     "415"      ; Unsupported Media Type
  951.                 |     "451"      ; Parameter Not Understood
  952.                 |     "452"      ; Conference Not Found
  953.                 |     "453"      ; Not Enough Bandwidth
  954.                 |     "454"      ; Session Not Found
  955.                 |     "455"      ; Method Not Valid in This State
  956.                 |     "456"      ; Header Field Not Valid for Resource
  957.                 |     "457"      ; Invalid Range
  958.                 |     "458"      ; Parameter Is Read-Only
  959.                 |     "459"      ; Aggregate operation not allowed
  960.                 |     "460"      ; Only aggregate operation allowed
  961.                 |     "461"      ; Unsupported transport
  962.                 |     "462"      ; Destination unreachable
  963.                 |     "500"      ; Internal Server Error
  964.                 |     "501"      ; Not Implemented
  965.                 |     "502"      ; Bad Gateway
  966.                 |     "503"      ; Service Unavailable
  967.                 |     "504"      ; Gateway Time-out
  968.                 |     "505"      ; RTSP Version not supported
  969.                 |     "551"      ; Option not supported
  970.                 |     extension-code
  971. Schulzrinne, et. al.        Standards Track                    [Page 24]
  972. RFC 2326              Real Time Streaming Protocol            April 1998
  973.    extension-code  =     3DIGIT
  974.    Reason-Phrase  =     *<TEXT, excluding CR, LF>
  975.    RTSP status codes are extensible. RTSP applications are not required
  976.    to understand the meaning of all registered status codes, though such
  977.    understanding is obviously desirable. However, applications MUST
  978.    understand the class of any status code, as indicated by the first
  979.    digit, and treat any unrecognized response as being equivalent to the
  980.    x00 status code of that class, with the exception that an
  981.    unrecognized response MUST NOT be cached. For example, if an
  982.    unrecognized status code of 431 is received by the client, it can
  983.    safely assume that there was something wrong with its request and
  984.    treat the response as if it had received a 400 status code. In such
  985.    cases, user agents SHOULD present to the user the entity returned
  986.    with the response, since that entity is likely to include human-
  987.    readable information which will explain the unusual status.
  988.    Code           reason
  989.    100            Continue                         all
  990.    200            OK                               all
  991.    201            Created                          RECORD
  992.    250            Low on Storage Space             RECORD
  993.    300            Multiple Choices                 all
  994.    301            Moved Permanently                all
  995.    302            Moved Temporarily                all
  996.    303            See Other                        all
  997.    305            Use Proxy                        all
  998. Schulzrinne, et. al.        Standards Track                    [Page 25]
  999. RFC 2326              Real Time Streaming Protocol            April 1998
  1000.    400            Bad Request                      all
  1001.    401            Unauthorized                     all
  1002.    402            Payment Required                 all
  1003.    403            Forbidden                        all
  1004.    404            Not Found                        all
  1005.    405            Method Not Allowed               all
  1006.    406            Not Acceptable                   all
  1007.    407            Proxy Authentication Required    all
  1008.    408            Request Timeout                  all
  1009.    410            Gone                             all
  1010.    411            Length Required                  all
  1011.    412            Precondition Failed              DESCRIBE, SETUP
  1012.    413            Request Entity Too Large         all
  1013.    414            Request-URI Too Long             all
  1014.    415            Unsupported Media Type           all
  1015.    451            Invalid parameter                SETUP
  1016.    452            Illegal Conference Identifier    SETUP
  1017.    453            Not Enough Bandwidth             SETUP
  1018.    454            Session Not Found                all
  1019.    455            Method Not Valid In This State   all
  1020.    456            Header Field Not Valid           all
  1021.    457            Invalid Range                    PLAY
  1022.    458            Parameter Is Read-Only           SET_PARAMETER
  1023.    459            Aggregate Operation Not Allowed  all
  1024.    460            Only Aggregate Operation Allowed all
  1025.    461            Unsupported Transport            all
  1026.    462            Destination Unreachable          all
  1027.    500            Internal Server Error            all
  1028.    501            Not Implemented                  all
  1029.    502            Bad Gateway                      all
  1030.    503            Service Unavailable              all
  1031.    504            Gateway Timeout                  all
  1032.    505            RTSP Version Not Supported       all
  1033.    551            Option not support               all
  1034.       Table 1: Status codes and their usage with RTSP methods
  1035. 7.1.2 Response Header Fields
  1036.    The response-header fields allow the request recipient to pass
  1037.    additional information about the response which cannot be placed in
  1038.    the Status-Line. These header fields give information about the
  1039.    server and about further access to the resource identified by the
  1040.    Request-URI.
  1041. Schulzrinne, et. al.        Standards Track                    [Page 26]
  1042. RFC 2326              Real Time Streaming Protocol            April 1998
  1043.    response-header  =     Location             ; Section 12.25
  1044.                     |     Proxy-Authenticate   ; Section 12.26
  1045.                     |     Public               ; Section 12.28
  1046.                     |     Retry-After          ; Section 12.31
  1047.                     |     Server               ; Section 12.36
  1048.                     |     Vary                 ; Section 12.42
  1049.                     |     WWW-Authenticate     ; Section 12.44
  1050.    Response-header field names can be extended reliably only in
  1051.    combination with a change in the protocol version. However, new or
  1052.    experimental header fields MAY be given the semantics of response-
  1053.    header fields if all parties in the communication recognize them to
  1054.    be response-header fields. Unrecognized header fields are treated as
  1055.    entity-header fields.
  1056. 8 Entity
  1057.    Request and Response messages MAY transfer an entity if not otherwise
  1058.    restricted by the request method or response status code. An entity
  1059.    consists of entity-header fields and an entity-body, although some
  1060.    responses will only include the entity-headers.
  1061.    In this section, both sender and recipient refer to either the client
  1062.    or the server, depending on who sends and who receives the entity.
  1063. 8.1 Entity Header Fields
  1064.    Entity-header fields define optional metainformation about the
  1065.    entity-body or, if no body is present, about the resource identified
  1066.    by the request.
  1067.      entity-header       =    Allow               ; Section 12.4
  1068.                          |    Content-Base        ; Section 12.11
  1069.                          |    Content-Encoding    ; Section 12.12
  1070.                          |    Content-Language    ; Section 12.13
  1071.                          |    Content-Length      ; Section 12.14
  1072.                          |    Content-Location    ; Section 12.15
  1073.                          |    Content-Type        ; Section 12.16
  1074.                          |    Expires             ; Section 12.19
  1075.                          |    Last-Modified       ; Section 12.24
  1076.                          |    extension-header
  1077.      extension-header    =    message-header
  1078.    The extension-header mechanism allows additional entity-header fields
  1079.    to be defined without changing the protocol, but these fields cannot
  1080.    be assumed to be recognizable by the recipient. Unrecognized header
  1081.    fields SHOULD be ignored by the recipient and forwarded by proxies.
  1082. Schulzrinne, et. al.        Standards Track                    [Page 27]
  1083. RFC 2326              Real Time Streaming Protocol            April 1998
  1084. 8.2 Entity Body
  1085.    See [H7.2]
  1086. 9 Connections
  1087.    RTSP requests can be transmitted in several different ways:
  1088.      * persistent transport connections used for several
  1089.        request-response transactions;
  1090.      * one connection per request/response transaction;
  1091.      * connectionless mode.
  1092.    The type of transport connection is defined by the RTSP URI (Section
  1093.    3.2). For the scheme "rtsp", a persistent connection is assumed,
  1094.    while the scheme "rtspu" calls for RTSP requests to be sent without
  1095.    setting up a connection.
  1096.    Unlike HTTP, RTSP allows the media server to send requests to the
  1097.    media client. However, this is only supported for persistent
  1098.    connections, as the media server otherwise has no reliable way of
  1099.    reaching the client. Also, this is the only way that requests from
  1100.    media server to client are likely to traverse firewalls.
  1101. 9.1 Pipelining
  1102.    A client that supports persistent connections or connectionless mode
  1103.    MAY "pipeline" its requests (i.e., send multiple requests without
  1104.    waiting for each response). A server MUST send its responses to those
  1105.    requests in the same order that the requests were received.
  1106. 9.2 Reliability and Acknowledgements
  1107.    Requests are acknowledged by the receiver unless they are sent to a
  1108.    multicast group. If there is no acknowledgement, the sender may
  1109.    resend the same message after a timeout of one round-trip time (RTT).
  1110.    The round-trip time is estimated as in TCP (RFC 1123) [18], with an
  1111.    initial round-trip value of 500 ms. An implementation MAY cache the
  1112.    last RTT measurement as the initial value for future connections.
  1113.    If a reliable transport protocol is used to carry RTSP, requests MUST
  1114.    NOT be retransmitted; the RTSP application MUST instead rely on the
  1115.    underlying transport to provide reliability.
  1116.      If both the underlying reliable transport such as TCP and the RTSP
  1117.      application retransmit requests, it is possible that each packet
  1118.      loss results in two retransmissions. The receiver cannot typically
  1119.      take advantage of the application-layer retransmission since the
  1120. Schulzrinne, et. al.        Standards Track                    [Page 28]
  1121. RFC 2326              Real Time Streaming Protocol            April 1998
  1122.      transport stack will not deliver the application-layer
  1123.      retransmission before the first attempt has reached the receiver.
  1124.      If the packet loss is caused by congestion, multiple
  1125.      retransmissions at different layers will exacerbate the congestion.
  1126.      If RTSP is used over a small-RTT LAN, standard procedures for
  1127.      optimizing initial TCP round trip estimates, such as those used in
  1128.      T/TCP (RFC 1644) [22], can be beneficial.
  1129.    The Timestamp header (Section 12.38) is used to avoid the
  1130.    retransmission ambiguity problem [23, p. 301] and obviates the need
  1131.    for Karn's algorithm.
  1132.    Each request carries a sequence number in the CSeq header (Section
  1133.    12.17), which is incremented by one for each distinct request
  1134.    transmitted. If a request is repeated because of lack of
  1135.    acknowledgement, the request MUST carry the original sequence number
  1136.    (i.e., the sequence number is not incremented).
  1137.    Systems implementing RTSP MUST support carrying RTSP over TCP and MAY
  1138.    support UDP. The default port for the RTSP server is 554 for both UDP
  1139.    and TCP.
  1140.    A number of RTSP packets destined for the same control end point may
  1141.    be packed into a single lower-layer PDU or encapsulated into a TCP
  1142.    stream. RTSP data MAY be interleaved with RTP and RTCP packets.
  1143.    Unlike HTTP, an RTSP message MUST contain a Content-Length header
  1144.    whenever that message contains a payload. Otherwise, an RTSP packet
  1145.    is terminated with an empty line immediately following the last
  1146.    message header.
  1147. 10 Method Definitions
  1148.    The method token indicates the method to be performed on the resource
  1149.    identified by the Request-URI. The method is case-sensitive.  New
  1150.    methods may be defined in the future. Method names may not start with
  1151.    a $ character (decimal 24) and must be a token. Methods are
  1152.    summarized in Table 2.
  1153. Schulzrinne, et. al.        Standards Track                    [Page 29]
  1154. RFC 2326              Real Time Streaming Protocol            April 1998
  1155.       method            direction        object     requirement
  1156.       DESCRIBE          C->S             P,S        recommended
  1157.       ANNOUNCE          C->S, S->C       P,S        optional
  1158.       GET_PARAMETER     C->S, S->C       P,S        optional
  1159.       OPTIONS           C->S, S->C       P,S        required
  1160.                                                     (S->C: optional)
  1161.       PAUSE             C->S             P,S        recommended
  1162.       PLAY              C->S             P,S        required
  1163.       RECORD            C->S             P,S        optional
  1164.       REDIRECT          S->C             P,S        optional
  1165.       SETUP             C->S             S          required
  1166.       SET_PARAMETER     C->S, S->C       P,S        optional
  1167.       TEARDOWN          C->S             P,S        required
  1168.       Table 2: Overview of RTSP methods, their direction, and what
  1169.       objects (P: presentation, S: stream) they operate on
  1170.    Notes on Table 2: PAUSE is recommended, but not required in that a
  1171.    fully functional server can be built that does not support this
  1172.    method, for example, for live feeds. If a server does not support a
  1173.    particular method, it MUST return "501 Not Implemented" and a client
  1174.    SHOULD not try this method again for this server.
  1175. 10.1 OPTIONS
  1176.    The behavior is equivalent to that described in [H9.2]. An OPTIONS
  1177.    request may be issued at any time, e.g., if the client is about to
  1178.    try a nonstandard request. It does not influence server state.
  1179.    Example:
  1180.      C->S:  OPTIONS * RTSP/1.0
  1181.             CSeq: 1
  1182.             Require: implicit-play
  1183.             Proxy-Require: gzipped-messages
  1184.      S->C:  RTSP/1.0 200 OK
  1185.             CSeq: 1
  1186.             Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
  1187.    Note that these are necessarily fictional features (one would hope
  1188.    that we would not purposefully overlook a truly useful feature just
  1189.    so that we could have a strong example in this section).
  1190. Schulzrinne, et. al.        Standards Track                    [Page 30]
  1191. RFC 2326              Real Time Streaming Protocol            April 1998
  1192. 10.2 DESCRIBE
  1193.    The DESCRIBE method retrieves the description of a presentation or
  1194.    media object identified by the request URL from a server. It may use
  1195.    the Accept header to specify the description formats that the client
  1196.    understands. The server responds with a description of the requested
  1197.    resource. The DESCRIBE reply-response pair constitutes the media
  1198.    initialization phase of RTSP.
  1199.    Example:
  1200.      C->S: DESCRIBE rtsp://server.example.com/fizzle/foo RTSP/1.0
  1201.            CSeq: 312
  1202.            Accept: application/sdp, application/rtsl, application/mheg
  1203.      S->C: RTSP/1.0 200 OK
  1204.            CSeq: 312
  1205.            Date: 23 Jan 1997 15:35:06 GMT
  1206.            Content-Type: application/sdp
  1207.            Content-Length: 376
  1208.            v=0
  1209.            o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4
  1210.            s=SDP Seminar
  1211.            i=A Seminar on the session description protocol
  1212.            u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
  1213.            e=mjh@isi.edu (Mark Handley)
  1214.            c=IN IP4 224.2.17.12/127
  1215.            t=2873397496 2873404696
  1216.            a=recvonly
  1217.            m=audio 3456 RTP/AVP 0
  1218.            m=video 2232 RTP/AVP 31
  1219.            m=whiteboard 32416 UDP WB
  1220.            a=orient:portrait
  1221.    The DESCRIBE response MUST contain all media initialization
  1222.    information for the resource(s) that it describes. If a media client
  1223.    obtains a presentation description from a source other than DESCRIBE
  1224.    and that description contains a complete set of media initialization
  1225.    parameters, the client SHOULD use those parameters and not then
  1226.    request a description for the same media via RTSP.
  1227.    Additionally, servers SHOULD NOT use the DESCRIBE response as a means
  1228.    of media indirection.
  1229.      Clear ground rules need to be established so that clients have an
  1230.      unambiguous means of knowing when to request media initialization
  1231.      information via DESCRIBE, and when not to. By forcing a DESCRIBE
  1232. Schulzrinne, et. al.        Standards Track                    [Page 31]
  1233. RFC 2326              Real Time Streaming Protocol            April 1998
  1234.      response to contain all media initialization for the set of streams
  1235.      that it describes, and discouraging use of DESCRIBE for media
  1236.      indirection, we avoid looping problems that might result from other
  1237.      approaches.
  1238.      Media initialization is a requirement for any RTSP-based system,
  1239.      but the RTSP specification does not dictate that this must be done
  1240.      via the DESCRIBE method. There are three ways that an RTSP client
  1241.      may receive initialization information:
  1242.      * via RTSP's DESCRIBE method;
  1243.      * via some other protocol (HTTP, email attachment, etc.);
  1244.      * via the command line or standard input (thus working as a browser
  1245.        helper application launched with an SDP file or other media
  1246.        initialization format).
  1247.      In the interest of practical interoperability, it is highly
  1248.      recommended that minimal servers support the DESCRIBE method, and
  1249.      highly recommended that minimal clients support the ability to act
  1250.      as a "helper application" that accepts a media initialization file
  1251.      from standard input, command line, and/or other means that are
  1252.      appropriate to the operating environment of the client.
  1253. 10.3 ANNOUNCE
  1254.    The ANNOUNCE method serves two purposes:
  1255.    When sent from client to server, ANNOUNCE posts the description of a
  1256.    presentation or media object identified by the request URL to a
  1257.    server. When sent from server to client, ANNOUNCE updates the session
  1258.    description in real-time.
  1259.    If a new media stream is added to a presentation (e.g., during a live
  1260.    presentation), the whole presentation description should be sent
  1261.    again, rather than just the additional components, so that components
  1262.    can be deleted.
  1263.    Example:
  1264.      C->S: ANNOUNCE rtsp://server.example.com/fizzle/foo RTSP/1.0
  1265.            CSeq: 312
  1266.            Date: 23 Jan 1997 15:35:06 GMT
  1267.            Session: 47112344
  1268.            Content-Type: application/sdp
  1269.            Content-Length: 332
  1270.            v=0
  1271.            o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4
  1272. Schulzrinne, et. al.        Standards Track                    [Page 32]
  1273. RFC 2326              Real Time Streaming Protocol            April 1998
  1274.            s=SDP Seminar
  1275.            i=A Seminar on the session description protocol
  1276.            u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
  1277.            e=mjh@isi.edu (Mark Handley)
  1278.            c=IN IP4 224.2.17.12/127
  1279.            t=2873397496 2873404696
  1280.            a=recvonly
  1281.            m=audio 3456 RTP/AVP 0
  1282.            m=video 2232 RTP/AVP 31
  1283.      S->C: RTSP/1.0 200 OK
  1284.            CSeq: 312
  1285. 10.4 SETUP
  1286.    The SETUP request for a URI specifies the transport mechanism to be
  1287.    used for the streamed media. A client can issue a SETUP request for a
  1288.    stream that is already playing to change transport parameters, which
  1289.    a server MAY allow. If it does not allow this, it MUST respond with
  1290.    error "455 Method Not Valid In This State". For the benefit of any
  1291.    intervening firewalls, a client must indicate the transport
  1292.    parameters even if it has no influence over these parameters, for
  1293.    example, where the server advertises a fixed multicast address.
  1294.      Since SETUP includes all transport initialization information,
  1295.      firewalls and other intermediate network devices (which need this
  1296.      information) are spared the more arduous task of parsing the
  1297.      DESCRIBE response, which has been reserved for media
  1298.      initialization.
  1299.    The Transport header specifies the transport parameters acceptable to
  1300.    the client for data transmission; the response will contain the
  1301.    transport parameters selected by the server.
  1302.     C->S: SETUP rtsp://example.com/foo/bar/baz.rm RTSP/1.0
  1303.           CSeq: 302
  1304.           Transport: RTP/AVP;unicast;client_port=4588-4589
  1305.     S->C: RTSP/1.0 200 OK
  1306.           CSeq: 302
  1307.           Date: 23 Jan 1997 15:35:06 GMT
  1308.           Session: 47112344
  1309.           Transport: RTP/AVP;unicast;
  1310.             client_port=4588-4589;server_port=6256-6257
  1311.    The server generates session identifiers in response to SETUP
  1312.    requests. If a SETUP request to a server includes a session
  1313.    identifier, the server MUST bundle this setup request into the
  1314. Schulzrinne, et. al.        Standards Track                    [Page 33]
  1315. RFC 2326              Real Time Streaming Protocol            April 1998
  1316.    existing session or return error "459 Aggregate Operation Not
  1317.    Allowed" (see Section 11.3.10).
  1318. 10.5 PLAY
  1319.    The PLAY method tells the server to start sending data via the
  1320.    mechanism specified in SETUP. A client MUST NOT issue a PLAY request
  1321.    until any outstanding SETUP requests have been acknowledged as
  1322.    successful.
  1323.    The PLAY request positions the normal play time to the beginning of
  1324.    the range specified and delivers stream data until the end of the
  1325.    range is reached. PLAY requests may be pipelined (queued); a server
  1326.    MUST queue PLAY requests to be executed in order. That is, a PLAY
  1327.    request arriving while a previous PLAY request is still active is
  1328.    delayed until the first has been completed.
  1329.      This allows precise editing.
  1330.    For example, regardless of how closely spaced the two PLAY requests
  1331.    in the example below arrive, the server will first play seconds 10
  1332.    through 15, then, immediately following, seconds 20 to 25, and
  1333.    finally seconds 30 through the end.
  1334.      C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
  1335.            CSeq: 835
  1336.            Session: 12345678
  1337.            Range: npt=10-15
  1338.      C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
  1339.            CSeq: 836
  1340.            Session: 12345678
  1341.            Range: npt=20-25
  1342.      C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
  1343.            CSeq: 837
  1344.            Session: 12345678
  1345.            Range: npt=30-
  1346.    See the description of the PAUSE request for further examples.
  1347.    A PLAY request without a Range header is legal. It starts playing a
  1348.    stream from the beginning unless the stream has been paused. If a
  1349.    stream has been paused via PAUSE, stream delivery resumes at the
  1350.    pause point. If a stream is playing, such a PLAY request causes no
  1351.    further action and can be used by the client to test server liveness.
  1352. Schulzrinne, et. al.        Standards Track                    [Page 34]
  1353. RFC 2326              Real Time Streaming Protocol            April 1998
  1354.    The Range header may also contain a time parameter. This parameter
  1355.    specifies a time in UTC at which the playback should start. If the
  1356.    message is received after the specified time, playback is started
  1357.    immediately. The time parameter may be used to aid in synchronization
  1358.    of streams obtained from different sources.
  1359.    For a on-demand stream, the server replies with the actual range that
  1360.    will be played back. This may differ from the requested range if
  1361.    alignment of the requested range to valid frame boundaries is
  1362.    required for the media source. If no range is specified in the
  1363.    request, the current position is returned in the reply. The unit of
  1364.    the range in the reply is the same as that in the request.
  1365.    After playing the desired range, the presentation is automatically
  1366.    paused, as if a PAUSE request had been issued.
  1367.    The following example plays the whole presentation starting at SMPTE
  1368.    time code 0:10:20 until the end of the clip. The playback is to start
  1369.    at 15:36 on 23 Jan 1997.
  1370.      C->S: PLAY rtsp://audio.example.com/twister.en RTSP/1.0
  1371.            CSeq: 833
  1372.            Session: 12345678
  1373.            Range: smpte=0:10:20-;time=19970123T153600Z
  1374.      S->C: RTSP/1.0 200 OK
  1375.            CSeq: 833
  1376.            Date: 23 Jan 1997 15:35:06 GMT
  1377.            Range: smpte=0:10:22-;time=19970123T153600Z
  1378.    For playing back a recording of a live presentation, it may be
  1379.    desirable to use clock units:
  1380.      C->S: PLAY rtsp://audio.example.com/meeting.en RTSP/1.0
  1381.            CSeq: 835
  1382.            Session: 12345678
  1383.            Range: clock=19961108T142300Z-19961108T143520Z
  1384.      S->C: RTSP/1.0 200 OK
  1385.            CSeq: 835
  1386.            Date: 23 Jan 1997 15:35:06 GMT
  1387.    A media server only supporting playback MUST support the npt format
  1388.    and MAY support the clock and smpte formats.
  1389. Schulzrinne, et. al.        Standards Track                    [Page 35]
  1390. RFC 2326              Real Time Streaming Protocol            April 1998
  1391. 10.6 PAUSE
  1392.    The PAUSE request causes the stream delivery to be interrupted
  1393.    (halted) temporarily. If the request URL names a stream, only
  1394.    playback and recording of that stream is halted. For example, for
  1395.    audio, this is equivalent to muting. If the request URL names a
  1396.    presentation or group of streams, delivery of all currently active
  1397.    streams within the presentation or group is halted. After resuming
  1398.    playback or recording, synchronization of the tracks MUST be
  1399.    maintained. Any server resources are kept, though servers MAY close
  1400.    the session and free resources after being paused for the duration
  1401.    specified with the timeout parameter of the Session header in the
  1402.    SETUP message.
  1403.    Example:
  1404.      C->S: PAUSE rtsp://example.com/fizzle/foo RTSP/1.0
  1405.            CSeq: 834
  1406.            Session: 12345678
  1407.      S->C: RTSP/1.0 200 OK
  1408.            CSeq: 834
  1409.            Date: 23 Jan 1997 15:35:06 GMT
  1410.    The PAUSE request may contain a Range header specifying when the
  1411.    stream or presentation is to be halted. We refer to this point as the
  1412.    "pause point". The header must contain exactly one value rather than
  1413.    a time range. The normal play time for the stream is set to the pause
  1414.    point. The pause request becomes effective the first time the server
  1415.    is encountering the time point specified in any of the currently
  1416.    pending PLAY requests. If the Range header specifies a time outside
  1417.    any currently pending PLAY requests, the error "457 Invalid Range" is
  1418.    returned. If a media unit (such as an audio or video frame) starts
  1419.    presentation at exactly the pause point, it is not played or
  1420.    recorded.  If the Range header is missing, stream delivery is
  1421.    interrupted immediately on receipt of the message and the pause point
  1422.    is set to the current normal play time.
  1423.    A PAUSE request discards all queued PLAY requests. However, the pause
  1424.    point in the media stream MUST be maintained. A subsequent PLAY
  1425.    request without Range header resumes from the pause point.
  1426.    For example, if the server has play requests for ranges 10 to 15 and
  1427.    20 to 29 pending and then receives a pause request for NPT 21, it
  1428.    would start playing the second range and stop at NPT 21. If the pause
  1429.    request is for NPT 12 and the server is playing at NPT 13 serving the
  1430.    first play request, the server stops immediately. If the pause
  1431.    request is for NPT 16, the server stops after completing the first
  1432. Schulzrinne, et. al.        Standards Track                    [Page 36]
  1433. RFC 2326              Real Time Streaming Protocol            April 1998
  1434.    play request and discards the second play request.
  1435.    As another example, if a server has received requests to play ranges
  1436.    10 to 15 and then 13 to 20 (that is, overlapping ranges), the PAUSE
  1437.    request for NPT=14 would take effect while the server plays the first
  1438.    range, with the second PLAY request effectively being ignored,
  1439.    assuming the PAUSE request arrives before the server has started
  1440.    playing the second, overlapping range. Regardless of when the PAUSE
  1441.    request arrives, it sets the NPT to 14.
  1442.    If the server has already sent data beyond the time specified in the
  1443.    Range header, a PLAY would still resume at that point in time, as it
  1444.    is assumed that the client has discarded data after that point. This
  1445.    ensures continuous pause/play cycling without gaps.
  1446. 10.7 TEARDOWN
  1447.    The TEARDOWN request stops the stream delivery for the given URI,
  1448.    freeing the resources associated with it. If the URI is the
  1449.    presentation URI for this presentation, any RTSP session identifier
  1450.    associated with the session is no longer valid. Unless all transport
  1451.    parameters are defined by the session description, a SETUP request
  1452.    has to be issued before the session can be played again.
  1453.    Example:
  1454.      C->S: TEARDOWN rtsp://example.com/fizzle/foo RTSP/1.0
  1455.            CSeq: 892
  1456.            Session: 12345678
  1457.      S->C: RTSP/1.0 200 OK
  1458.            CSeq: 892
  1459. 10.8 GET_PARAMETER
  1460.    The GET_PARAMETER request retrieves the value of a parameter of a
  1461.    presentation or stream specified in the URI. The content of the reply
  1462.    and response is left to the implementation. GET_PARAMETER with no
  1463.    entity body may be used to test client or server liveness ("ping").
  1464.    Example:
  1465.      S->C: GET_PARAMETER rtsp://example.com/fizzle/foo RTSP/1.0
  1466.            CSeq: 431
  1467.            Content-Type: text/parameters
  1468.            Session: 12345678
  1469.            Content-Length: 15
  1470.            packets_received
  1471.            jitter
  1472. Schulzrinne, et. al.        Standards Track                    [Page 37]
  1473. RFC 2326              Real Time Streaming Protocol            April 1998
  1474.      C->S: RTSP/1.0 200 OK
  1475.            CSeq: 431
  1476.            Content-Length: 46
  1477.            Content-Type: text/parameters
  1478.            packets_received: 10
  1479.            jitter: 0.3838
  1480.      The "text/parameters" section is only an example type for
  1481.      parameter. This method is intentionally loosely defined with the
  1482.      intention that the reply content and response content will be
  1483.      defined after further experimentation.
  1484. 10.9 SET_PARAMETER
  1485.      This method requests to set the value of a parameter for a
  1486.      presentation or stream specified by the URI.
  1487.      A request SHOULD only contain a single parameter to allow the client
  1488.      to determine why a particular request failed. If the request contains
  1489.      several parameters, the server MUST only act on the request if all of
  1490.      the parameters can be set successfully. A server MUST allow a
  1491.      parameter to be set repeatedly to the same value, but it MAY disallow
  1492.      changing parameter values.
  1493.      Note: transport parameters for the media stream MUST only be set with
  1494.      the SETUP command.
  1495.      Restricting setting transport parameters to SETUP is for the
  1496.      benefit of firewalls.
  1497.      The parameters are split in a fine-grained fashion so that there
  1498.      can be more meaningful error indications. However, it may make
  1499.      sense to allow the setting of several parameters if an atomic
  1500.      setting is desirable. Imagine device control where the client does
  1501.      not want the camera to pan unless it can also tilt to the right
  1502.      angle at the same time.
  1503.    Example:
  1504.      C->S: SET_PARAMETER rtsp://example.com/fizzle/foo RTSP/1.0
  1505.            CSeq: 421
  1506.            Content-length: 20
  1507.            Content-type: text/parameters
  1508.            barparam: barstuff
  1509.      S->C: RTSP/1.0 451 Invalid Parameter
  1510. Schulzrinne, et. al.        Standards Track                    [Page 38]
  1511. RFC 2326              Real Time Streaming Protocol            April 1998
  1512.            CSeq: 421
  1513.            Content-length: 10
  1514.            Content-type: text/parameters
  1515.            barparam
  1516.      The "text/parameters" section is only an example type for
  1517.      parameter. This method is intentionally loosely defined with the
  1518.      intention that the reply content and response content will be
  1519.      defined after further experimentation.
  1520. 10.10 REDIRECT
  1521.    A redirect request informs the client that it must connect to another
  1522.    server location. It contains the mandatory header Location, which
  1523.    indicates that the client should issue requests for that URL. It may
  1524.    contain the parameter Range, which indicates when the redirection
  1525.    takes effect. If the client wants to continue to send or receive
  1526.    media for this URI, the client MUST issue a TEARDOWN request for the
  1527.    current session and a SETUP for the new session at the designated
  1528.    host.
  1529.    This example request redirects traffic for this URI to the new server
  1530.    at the given play time:
  1531.      S->C: REDIRECT rtsp://example.com/fizzle/foo RTSP/1.0
  1532.            CSeq: 732
  1533.            Location: rtsp://bigserver.com:8001
  1534.            Range: clock=19960213T143205Z-
  1535. 10.11 RECORD
  1536.    This method initiates recording a range of media data according to
  1537.    the presentation description. The timestamp reflects start and end
  1538.    time (UTC). If no time range is given, use the start or end time
  1539.    provided in the presentation description. If the session has already
  1540.    started, commence recording immediately.
  1541.    The server decides whether to store the recorded data under the
  1542.    request-URI or another URI. If the server does not use the request-
  1543.    URI, the response SHOULD be 201 (Created) and contain an entity which
  1544.    describes the status of the request and refers to the new resource,
  1545.    and a Location header.
  1546.    A media server supporting recording of live presentations MUST
  1547.    support the clock range format; the smpte format does not make sense.
  1548. Schulzrinne, et. al.        Standards Track                    [Page 39]
  1549. RFC 2326              Real Time Streaming Protocol            April 1998
  1550.    In this example, the media server was previously invited to the
  1551.    conference indicated.
  1552.      C->S: RECORD rtsp://example.com/meeting/audio.en RTSP/1.0
  1553.            CSeq: 954
  1554.            Session: 12345678
  1555.            Conference: 128.16.64.19/32492374
  1556. 10.12 Embedded (Interleaved) Binary Data
  1557.    Certain firewall designs and other circumstances may force a server
  1558.    to interleave RTSP methods and stream data. This interleaving should
  1559.    generally be avoided unless necessary since it complicates client and
  1560.    server operation and imposes additional overhead. Interleaved binary
  1561.    data SHOULD only be used if RTSP is carried over TCP.
  1562.    Stream data such as RTP packets is encapsulated by an ASCII dollar
  1563.    sign (24 hexadecimal), followed by a one-byte channel identifier,
  1564.    followed by the length of the encapsulated binary data as a binary,
  1565.    two-byte integer in network byte order. The stream data follows
  1566.    immediately afterwards, without a CRLF, but including the upper-layer
  1567.    protocol headers. Each $ block contains exactly one upper-layer
  1568.    protocol data unit, e.g., one RTP packet.
  1569.    The channel identifier is defined in the Transport header with the
  1570.    interleaved parameter(Section 12.39).
  1571.    When the transport choice is RTP, RTCP messages are also interleaved
  1572.    by the server over the TCP connection. As a default, RTCP packets are
  1573.    sent on the first available channel higher than the RTP channel. The
  1574.    client MAY explicitly request RTCP packets on another channel. This
  1575.    is done by specifying two channels in the interleaved parameter of
  1576.    the Transport header(Section 12.39).
  1577.      RTCP is needed for synchronization when two or more streams are
  1578.      interleaved in such a fashion. Also, this provides a convenient way
  1579.      to tunnel RTP/RTCP packets through the TCP control connection when
  1580.      required by the network configuration and transfer them onto UDP
  1581.      when possible.
  1582.      C->S: SETUP rtsp://foo.com/bar.file RTSP/1.0
  1583.            CSeq: 2
  1584.            Transport: RTP/AVP/TCP;interleaved=0-1
  1585.      S->C: RTSP/1.0 200 OK
  1586.            CSeq: 2
  1587.            Date: 05 Jun 1997 18:57:18 GMT
  1588.            Transport: RTP/AVP/TCP;interleaved=0-1
  1589. Schulzrinne, et. al.        Standards Track                    [Page 40]
  1590. RFC 2326              Real Time Streaming Protocol            April 1998
  1591.            Session: 12345678
  1592.      C->S: PLAY rtsp://foo.com/bar.file RTSP/1.0
  1593.            CSeq: 3
  1594.            Session: 12345678
  1595.      S->C: RTSP/1.0 200 OK
  1596.            CSeq: 3
  1597.            Session: 12345678
  1598.            Date: 05 Jun 1997 18:59:15 GMT
  1599.            RTP-Info: url=rtsp://foo.com/bar.file;
  1600.              seq=232433;rtptime=972948234
  1601.      S->C: $00{2 byte length}{"length" bytes data, w/RTP header}
  1602.      S->C: $00{2 byte length}{"length" bytes data, w/RTP header}
  1603.      S->C: $01{2 byte length}{"length" bytes  RTCP packet}
  1604. 11 Status Code Definitions
  1605.    Where applicable, HTTP status [H10] codes are reused. Status codes
  1606.    that have the same meaning are not repeated here. See Table 1 for a
  1607.    listing of which status codes may be returned by which requests.
  1608. 11.1 Success 2xx
  1609. 11.1.1 250 Low on Storage Space
  1610.    The server returns this warning after receiving a RECORD request that
  1611.    it may not be able to fulfill completely due to insufficient storage
  1612.    space. If possible, the server should use the Range header to
  1613.    indicate what time period it may still be able to record. Since other
  1614.    processes on the server may be consuming storage space
  1615.    simultaneously, a client should take this only as an estimate.
  1616. 11.2 Redirection 3xx
  1617.    See [H10.3].
  1618.    Within RTSP, redirection may be used for load balancing or
  1619.    redirecting stream requests to a server topologically closer to the
  1620.    client.  Mechanisms to determine topological proximity are beyond the
  1621.    scope of this specification.
  1622. Schulzrinne, et. al.        Standards Track                    [Page 41]
  1623. RFC 2326              Real Time Streaming Protocol            April 1998
  1624. 11.3 Client Error 4xx
  1625. 11.3.1 405 Method Not Allowed
  1626.    The method specified in the request is not allowed for the resource
  1627.    identified by the request URI. The response MUST include an Allow
  1628.    header containing a list of valid methods for the requested resource.
  1629.    This status code is also to be used if a request attempts to use a
  1630.    method not indicated during SETUP, e.g., if a RECORD request is
  1631.    issued even though the mode parameter in the Transport header only
  1632.    specified PLAY.
  1633. 11.3.2 451 Parameter Not Understood
  1634.    The recipient of the request does not support one or more parameters
  1635.    contained in the request.
  1636. 11.3.3 452 Conference Not Found
  1637.    The conference indicated by a Conference header field is unknown to
  1638.    the media server.
  1639. 11.3.4 453 Not Enough Bandwidth
  1640.    The request was refused because there was insufficient bandwidth.
  1641.    This may, for example, be the result of a resource reservation
  1642.    failure.
  1643. 11.3.5 454 Session Not Found
  1644.    The RTSP session identifier in the Session header is missing,
  1645.    invalid, or has timed out.
  1646. 11.3.6 455 Method Not Valid in This State
  1647.    The client or server cannot process this request in its current
  1648.    state.  The response SHOULD contain an Allow header to make error
  1649.    recovery easier.
  1650. 11.3.7 456 Header Field Not Valid for Resource
  1651.    The server could not act on a required request header. For example,
  1652.    if PLAY contains the Range header field but the stream does not allow
  1653.    seeking.
  1654. Schulzrinne, et. al.        Standards Track                    [Page 42]
  1655. RFC 2326              Real Time Streaming Protocol            April 1998
  1656. 11.3.8 457 Invalid Range
  1657.    The Range value given is out of bounds, e.g., beyond the end of the
  1658.    presentation.
  1659. 11.3.9 458 Parameter Is Read-Only
  1660.    The parameter to be set by SET_PARAMETER can be read but not
  1661.    modified.
  1662. 11.3.10 459 Aggregate Operation Not Allowed
  1663.    The requested method may not be applied on the URL in question since
  1664.    it is an aggregate (presentation) URL. The method may be applied on a
  1665.    stream URL.
  1666. 11.3.11 460 Only Aggregate Operation Allowed
  1667.    The requested method may not be applied on the URL in question since
  1668.    it is not an aggregate (presentation) URL. The method may be applied
  1669.    on the presentation URL.
  1670. 11.3.12 461 Unsupported Transport
  1671.    The Transport field did not contain a supported transport
  1672.    specification.
  1673. 11.3.13 462 Destination Unreachable
  1674.    The data transmission channel could not be established because the
  1675.    client address could not be reached. This error will most likely be
  1676.    the result of a client attempt to place an invalid Destination
  1677.    parameter in the Transport field.
  1678. 11.3.14 551 Option not supported
  1679.    An option given in the Require or the Proxy-Require fields was not
  1680.    supported. The Unsupported header should be returned stating the
  1681.    option for which there is no support.
  1682. Schulzrinne, et. al.        Standards Track                    [Page 43]
  1683. RFC 2326              Real Time Streaming Protocol            April 1998
  1684. 12 Header Field Definitions
  1685.    HTTP/1.1 [2] or other, non-standard header fields not listed here
  1686.    currently have no well-defined meaning and SHOULD be ignored by the
  1687.    recipient.
  1688.    Table 3 summarizes the header fields used by RTSP. Type "g"
  1689.    designates general request headers to be found in both requests and
  1690.    responses, type "R" designates request headers, type "r" designates
  1691.    response headers, and type "e" designates entity header fields.
  1692.    Fields marked with "req." in the column labeled "support" MUST be
  1693.    implemented by the recipient for a particular method, while fields
  1694.    marked "opt." are optional. Note that not all fields marked "req."
  1695.    will be sent in every request of this type. The "req."  means only
  1696.    that client (for response headers) and server (for request headers)
  1697.    MUST implement the fields. The last column lists the method for which
  1698.    this header field is meaningful; the designation "entity" refers to
  1699.    all methods that return a message body. Within this specification,
  1700.    DESCRIBE and GET_PARAMETER fall into this class.
  1701. Schulzrinne, et. al.        Standards Track                    [Page 44]
  1702. RFC 2326              Real Time Streaming Protocol            April 1998
  1703.    Header               type   support   methods
  1704.    Accept               R      opt.      entity
  1705.    Accept-Encoding      R      opt.      entity
  1706.    Accept-Language      R      opt.      all
  1707.    Allow                r      opt.      all
  1708.    Authorization        R      opt.      all
  1709.    Bandwidth            R      opt.      all
  1710.    Blocksize            R      opt.      all but OPTIONS, TEARDOWN
  1711.    Cache-Control        g      opt.      SETUP
  1712.    Conference           R      opt.      SETUP
  1713.    Connection           g      req.      all
  1714.    Content-Base         e      opt.      entity
  1715.    Content-Encoding     e      req.      SET_PARAMETER
  1716.    Content-Encoding     e      req.      DESCRIBE, ANNOUNCE
  1717.    Content-Language     e      req.      DESCRIBE, ANNOUNCE
  1718.    Content-Length       e      req.      SET_PARAMETER, ANNOUNCE
  1719.    Content-Length       e      req.      entity
  1720.    Content-Location     e      opt.      entity
  1721.    Content-Type         e      req.      SET_PARAMETER, ANNOUNCE
  1722.    Content-Type         r      req.      entity
  1723.    CSeq                 g      req.      all
  1724.    Date                 g      opt.      all
  1725.    Expires              e      opt.      DESCRIBE, ANNOUNCE
  1726.    From                 R      opt.      all
  1727.    If-Modified-Since    R      opt.      DESCRIBE, SETUP
  1728.    Last-Modified        e      opt.      entity
  1729.    Proxy-Authenticate
  1730.    Proxy-Require        R      req.      all
  1731.    Public               r      opt.      all
  1732.    Range                R      opt.      PLAY, PAUSE, RECORD
  1733.    Range                r      opt.      PLAY, PAUSE, RECORD
  1734.    Referer              R      opt.      all
  1735.    Require              R      req.      all
  1736.    Retry-After          r      opt.      all
  1737.    RTP-Info             r      req.      PLAY
  1738.    Scale                Rr     opt.      PLAY, RECORD
  1739.    Session              Rr     req.      all but SETUP, OPTIONS
  1740.    Server               r      opt.      all
  1741.    Speed                Rr     opt.      PLAY
  1742.    Transport            Rr     req.      SETUP
  1743.    Unsupported          r      req.      all
  1744.    User-Agent           R      opt.      all
  1745.    Via                  g      opt.      all
  1746.    WWW-Authenticate     r      opt.      all
  1747. Schulzrinne, et. al.        Standards Track                    [Page 45]
  1748. RFC 2326              Real Time Streaming Protocol            April 1998
  1749.    Overview of RTSP header fields
  1750. 12.1 Accept
  1751.    The Accept request-header field can be used to specify certain
  1752.    presentation description content types which are acceptable for the
  1753.    response.
  1754.      The "level" parameter for presentation descriptions is properly
  1755.      defined as part of the MIME type registration, not here.
  1756.    See [H14.1] for syntax.
  1757.    Example of use:
  1758.      Accept: application/rtsl, application/sdp;level=2
  1759. 12.2 Accept-Encoding
  1760.      See [H14.3]
  1761. 12.3 Accept-Language
  1762.    See [H14.4]. Note that the language specified applies to the
  1763.    presentation description and any reason phrases, not the media
  1764.    content.
  1765. 12.4 Allow
  1766.    The Allow response header field lists the methods supported by the
  1767.    resource identified by the request-URI. The purpose of this field is
  1768.    to strictly inform the recipient of valid methods associated with the
  1769.    resource. An Allow header field must be present in a 405 (Method not
  1770.    allowed) response.
  1771.    Example of use:
  1772.      Allow: SETUP, PLAY, RECORD, SET_PARAMETER
  1773. 12.5 Authorization
  1774.      See [H14.8]
  1775. 12.6 Bandwidth
  1776.    The Bandwidth request header field describes the estimated bandwidth
  1777.    available to the client, expressed as a positive integer and measured
  1778.    in bits per second. The bandwidth available to the client may change
  1779.    during an RTSP session, e.g., due to modem retraining.
  1780. Schulzrinne, et. al.        Standards Track                    [Page 46]