Internet DRAFT - draft-zeng-rtsp-end-of-stream

draft-zeng-rtsp-end-of-stream




MMUSIC                                                     Thomas M. Zeng
                                                         P. Greg Sherwood
Internet-Draft                                                PacketVideo
Expires: April 29, 2004                                     Oct  15, 2003


                    Signalling End Of Stream in RTSP
                       draft-zeng-mmusic-00

Status of this Memo

   This document is an Internet-Draft and is in full conformance with
   all provisions of Section 10 of RFC2026.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups. Note that other
   groups may also distribute working documents as Internet-Drafts.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time. It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   The list of current Internet-Drafts can be accessed at http://
   www.ietf.org/ietf/1id-abstracts.txt.

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html.

   This Internet-Draft will expire on Apr. 29, 2004.

Copyright Notice

   Copyright (C) The Internet Society (2003). All Rights Reserved.

Abstract

   This document describes a new RTSP method called END_OF_STREAM, which 
   extends the core RTSP protocol to enable one RTSP protocol entity to 
   signal other entity(s) 
   that it has no more media data to send. This request could be issued 
   either with a 
   non-aggregate or aggregate control URI, the latter implies that all 
   media streams 
   in the aggregate session have run out of media data.

   The receiver of this RTSP request is expected to reply with 200 OK 
   response.

   Since END_OF_STREAM represents an extension to the core RTSP protocol, 
   a feature tag,
   "method.eos", is defined to facilitate capability negotiation using 
   RTSP extension 
   mechanism [RTSP_NEW].


1. Motivation

   In the core RTSP protocol [RTSP_NEW], an RTSP client relies on the
   media transport mechanism  to signal end of stream.

   When the media transport mechanism happens to be RTP over UDP, this 
   is carried out by RTCP BYE packet [RTP_NEW]. In practice, there are 
   some drawbacks with this approach:
     
     1. When the server sends an RTCP BYE packet with its SSRC, the 
        server is giving up
        the SSRC (see section 8.2 in [RTP_NEW]). The server would be 
        required to 
        switch to a new SSRC on a subsequent PLAY of the same media 
        stream.
        Since server's SSRC is only communicated in the Transport header 
        of SETUP 
        response, the server would not have an opportunity to send a new
        value to 
        the player, and the client would have to discover the SSRC from 
        the incoming RTP packets. 

     2. RTCP BYE packet method does not offer a simple, gurranteed 
        method of delievering
        an end-of-stream announcement.

     3. RTCP BYE packet method does not offer the option to have a single
        aggregate
        end-of-stream announcemnt for all media streams in the RTSP 
        session.

     4. Section 6.3.7 of RFC3550 stipulates that an RTP sender cannot 
        send RTCP BYE 
        before leaving the RTP session if it has not already sent at 
        least one RTP or RTCP packet. This is a problem under 
        error conditions. Consider the case 
        where an RTP session has just started (i.e., RTSP PLAY has 
        been 
        successfully acknowledged with an RTSP 200 OK response), and the 
        sender attempts to 
        retrieve media frames from its media source. The media source 
        fails to provide any media frame due to its internal error such 
        as file corruption. The sender should inform its receiver(s) 
        but it cannot send BYE packets.

   The motivation to solve the above issues is particularly high for 
   unicast streaming applications that use RTSP over TCP in the control 
   plane, and RTP over UDP in the media transport. 

   There is also the desire to have an EOS (End Of Stream) 
   signalling mechanism 
   for non-RTP delivery. One such delivery is MPEG2 transport streams 
   used in the cable TV environment. In non-IP delivery environments, 
   the transport typically remains allocated even if no media is being 
   delivered.  This
   means that a client cannot watch for the server to close the
   transport to signal the end of stream. Meanwhile,  watching for the 
   incoming media to stop is unreliable.  Short
   timeouts can trigger a false end of media detection if the
   media flow is temporarily delayed.  Long timeouts introduce
   unacceptable latencies.  Clients are unable to distinguish
   between a normal end of stream and an error condition that
   resulted in the media delivery stopping.

   We note that using TEARDOWN from server to client is not 
   appropriate because:
     1. TEARDOWN is currently not allowed from server to 
        client [RTSP_NEW];
     2. Even if TEARDOWN is made available in server to client 
        direction, 
        the definition of TEARDOWN requires that, if the request 
        URI is 
        aggregate, that the session must be de-allocated by the 
        server. 
        There are RTSP applications that use SET_PARAMETER from 
        client to
        server as the means to report session QoS statistics, but if
        server uses TEARDOWN on aggregate URL to signal end of stream, 
        the client can no longer use SET_PARAMETER with a 
        session header. 
     3. In general, RTSP, being a client-server protocol,
        should let client, not server to control session state. But 
        TEARDOWN
        on aggregate URL will change session from PLAYING state 
        to INIT state.

   We note that using PAUSE from server to client is not appropriate 
   either, because PAUSE will change the state of the RTSP session.

   We note also that using ANNOUNCE from server to client is not 
   suitable, for two reasons:
      1. ANNOUNCE from server to client is used in RFC2326 to update 
         session description. 
         Extending it to indicate end-of-stream event is awkward.
      2. ANNOUNCE is not in the core RTSP protocol [RTSP_NEW].
   
   The next section describes our solution.

3. Solution Using END_OF_STREAM method

   We introduce a new RTSP method to signal end of stream in applications
   where an persistent RTSP connection is maintained between server 
   and client.
   The new method is an RTSP "extension-method" [RTSP_NEW]. It is called
   END_OF_STREAM, and is a request from media sender
   to receiver. In the case of RTSP client playing media streams sent by 
   RTSP server,
   the END_OF_STREAM is sent from server to client. In the use case where 
   RTSP server is
   recording media sent by RTSP client, the END_OF_STREAM requet could 
   be sent from an
   RTSP client to server.  

   As any other RTSP request method, END_OF_STREAM must be acknowledged 
   with a response.
   
   3.1 The Definition of END_OF_STREAM
      
   The END_OF_STREAM request for a URI signals the fact that no more 
   RTP packets will be
   sent. Here is an example:

     S->C: END_OF_STREAM rtsp://foo.com/bar.avi RTSP/1.0
           CSeq: 10
           Session: 12345678
	   Range: npt=0-200
           RTP-Info: url=//foo.com/bar.avi/streamid=0;seq=45102,
             url=rtsp://foo.com/bar.avi/streamid=1;seq=30211    
	   Reason: End of range reached

     C->S: RTSP/1.0 200 OK  
           CSeq: 10
           Session: 12345678
    
   An END_OF_STREAM request MUST include "CSeq", "Range" and "Session" 
   headers.
   It SHOULD include "RTP-Info" header.
   The RTP-Info in server's END_OF_STREAM request
   is used to indicate the sequence number of 
   the ending RTP packet for each media stream.
   
   An END_OF_STREAM requet MAY include a new "Reason" header, 
   defined as a 
   string, whose purpose is to allow the server to explain why stream 
   has ended, and whose ABNF definition is given below:
    
          Reason     =  "Reason" ":"   Reason-Phrase CRLF

   where:
       -- "Reason-Phrase" is a parameter defined in section 7.1.1 of 
          [RTSP_NEW].

   
   Note that the server is free to use any text as "Reason-Phrase". In 
   certain applications, the client
   may  display the text, in its entirety, to end user to improve user
   friendliness.
      
   END_OF_STREAM does not remove session ID, nor does it change the 
   state of the RTSP session.

   END_OF_STREAM may be applied to either aggregate or non-aggregate URI.
   
   END_OF_STREAM does not apply if the RTSP session is not in PLAYING
   state. If a client receives END_OF_STREAM while it is not in PLAYING 
   state, it must reply with a 455 response: Method Not Valid in This 
   State.

   We note that client can piggy back QoS statistics as a entity body in
   its 200 OK response to the END_OF_STREAM request from the server.   

   3.2 Limitations
   
   END_OF_STREAM method is applicable only if the server has the means
   to contact the client when it reaches the end of a media stream.
   This may not be possible if the RTSP connection between server and
   client is not persistent. When it is time to send END_OF_STREAM but
   the server does not have connection to the client, the server will
   simply skip END_OF_STREAM. That is to say, the server will not 
   queue up the END_OF_STREAM message.
   

4. Feature tag
  
   The END_OF_STREAM feature is represented by a feature tag (see 
   [RTSP_NEW]
   for how to use feature tags in capability negotiations).

   The feature tag is:

          method.eos

   which means that the END_OF_STREAM method is fully supported. By 
   fully we mean either at non-aggregate or aggregate level.

5. Use Case

   In this example, the server sends END_OF_STREAM request to client for
   one live media stream, because upstream source terminates the stream
   after 200 seconds. The fact that the stream has played for 200 seconds
   is communicated by the Range header in the END_OF_STREAM request.

     C->S: PLAY rtsp://foo.com/bar.avi/streamid=0 RTSP/1.0
	   Supported: method.eos
           CSeq: 10
           Session: 12345678
	   Range: 0-200

     S->C: RTSP/1.0 200 OK
	   Supported: method.eos
           CSeq: 10
           Session: 12345678
           RTP-Info: url=//foo.com/bar.avi/streamid=0;seq=0; rtptime=0 

     S->C: END_OF_STREAM rtsp://foo.com/bar.avi/streamid=0 RTSP/1.0
           CSeq: 123
           Session: 12345678
	   Range: npt=0-200; bytes=0-200000
           RTP-Info: url=//foo.com/bar.avi/streamid=0;seq=45102 
	   Reason: End of range reached

     C->S: RTSP/1.0 200 OK  
           CSeq: 123
           Session: 12345678
  
   In the END_OF_STREAM request, the client will learn that the server has 
   completed the stream as requested (as indicated by the "End of range 
   reached" Reason).

   From the two RTP-Info headers, one in PLAY response, one in 
   END_OF_STREAM requst, the client can derive the total number
   of RTP packets that the server has sent. From the npt field in the 
   Range header, the client knows the presentation time that this stream 
   has covered, from the server's point of view, while the byte-range field 
   can optional inform the 
   client how much media data, in bytes, that the server has sent. 
 
5. Security Considerations
 
   Because there is only one new TEXT header, "Reason", added by our 
   new RTSP method,
   the security considerations outlined in [RTSP_NEW] apply here as well.
     
6. IANA Considerations

   A new method name, and its associated feature tag need to be registered 
   with IANA.
    
     -- Method name: END_OF_STREAM
     
     -- feature tag: method.eos




Normative References

   [RTSP_NEW] Schulzrinne, H., Rao, A., Lanphier, R., Westerlund, M., 
         "Real Time Streaming Protocol", 
         draft-ietf-mmusic-rfc2326bis-04.txt

   [RTP_NEW] RFC3550 "Real-time Transport Protocol", July 2003


Full Copyright Statement

   Copyright (C) The Internet Society (2003). All Rights Reserved.

   This document and translations of it may be copied and furnished to
   others, and derivative works that comment on or otherwise explain it
   or assist in its implementation may be prepared, copied, published
   and distributed, in whole or in part, without restriction of any
   kind, provided that the above copyright notice and this paragraph are
   included on all such copies and derivative works. However, this
   document itself may not be modified in any way, such as by removing
   the copyright notice or references to the Internet Society or other
   Internet organizations, except as needed for the purpose of
   developing Internet standards in which case the procedures for
   copyrights defined in the Internet Standards process must be
   followed, or as required to translate it into languages other than
   English.

   The limited permissions granted above are perpetual and will not be
   revoked by the Internet Society or its successors or assignees.

   This document and the information contained herein is provided on an
   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION





   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.


Acknowledgement

   Thanks to Sean Sheedy for suggesting the inclusion of "Range" header
   and for contributing some text in the motivations section.

   Funding for the RFC Editor function is currently provided by the
   Internet Society.

Author Addresses

   Thomas Zeng
   PacketVideo Corp.
   10350 Science Center Dr., Suite 210
   San Diego, CA 92127
   email: zeng@pv.com

   P. Greg Sherwood
   PacketVideo Corp.
   10350 Science Center Dr., Suite 210
   San Diego, CA 92127
   email: sherwood@pv.com