RTSP source 
-----------

The RTSP source establishes a connection to an RTSP server and sets up
the UDP sources and RTP session handlers.

An RTSP session is created as follows:

- Parse RTSP URL:

   ex:
     rtsp://thread:5454/south-rtsp.mp3

- Open a connection to the server with the url. All further conversation with
  the server should be done with this connection. Each request/reply has
  a CSeq number added to the header.

- Send a DESCRIBE request for the url. We currently support a response in
  SDP.

  ex:

    >> DESCRIBE rtsp://thread:5454/south-rtsp.mp3 RTSP/1.0
    >> Accept: application/sdp
    >> CSeq: 0
    >>
    << RTSP/1.0 200 OK
    << Content-Length: 84
    << Content-Type: application/sdp
    << CSeq: 0
    << Date: Wed May 11 13:09:37 2005 GMT
    <<
    << v=0
    << o=- 0 0 IN IP4 192.168.1.1
    << s=No Title
    << m=audio 0 RTP/AVP 14
    << a=control:streamid=0

- Parse the SDP message, for each stream (m=) we create an GstRTPStream. We need
  to allocate two local UDP ports for receiving the RTP and RTCP data because we
  need to send the port numbers to the server in the next request.

  In RTSPSrc we first create an element that can handle the udp://0.0.0.0:0 uri. This
  will create an udp source element with a random port number. We get the port
  number by getting the "port" property of the element after setting the element to 
  PAUSED. This element is used for the RTP packets and has to be an even number. If
  the random port number is not an even number we retry to allocate a new udp source.

  We then create another UDP source element with the next (uneven) port number to 
  receive the RTCP packet on. After this step we have two udp ports we can use to
  accept RTP packets.

    +-----------------+
    | +------------+  |
    | | udpsrc0    |  |
    | |  port=5000 |  |
    | +------------+  |
    | +------------+  |
    | | udpsrc1    |  |
    | |  port=5001 |  |
    | +------------+  |
    +-----------------+

- Send a SETUP message to the server with the RTP ports. We get the setup URI from
  the a= attribute in the SDP message. This can be an absolute URL or a relative
  url.

  ex:

    >> SETUP rtsp://thread:5454/south-rtsp.mp3/streamid=0 RTSP/1.0
    >> CSeq: 1
    >> Transport: RTP/AVP/UDP;unicast;client_port=5000-5001,RTP/AVP/UDP;multicast,RTP/AVP/TCP
    >>
    << RTSP/1.0 200 OK
    << Transport: RTP/AVP/UDP;unicast;client_port=5000-5001;server_port=6000-6001
    << CSeq: 1
    << Date: Wed May 11 13:21:43 2005 GMT
    << Session: 5d5cb94413288ccd
    <<

  The client needs to send the local ports to the server along with the supported 
  transport types. The server selects the final transport which it returns in the
  Transport header field. The server also includes its ports where RTP and RTCP
  messages can be sent to.

  In the above example UDP was choosen as a transport. At this point the RTSPSrc element
  will furter configure its elements to process this stream.

  The RTSPSrc will create and connect an RTP session manager element and will
  connect it to the src pads of the udp element. The data pad from the RTP session 
  manager is ghostpadded to RTPSrc.
  The RTCP pad of the rtpdec is routed to a new udpsink that sends data to the RTCP
  port of the server as returned in the Transport: header field.

    +---------------------------------------------+
    | +------------+                              |
    | | udpsrc0    |   +--------+                 |
    | |  port=5000 ----- rtpdec --------------------
    | +------------+   |        |                 |
    | +------------+   |        |  +------------+ |
    | | udpsrc1    ----- RTCP   ---- udpsink    | |
    | |  port=5001 |   +--------+  |  port=6001 | |
    | +------------+               +------------+ |
    +---------------------------------------------+

  The output type of rtpdec is configured as the media type specified in the SDP
  message. 

- All the elements are set to PAUSED/PLAYING and the PLAY RTSP message is
  sent.

    >> PLAY rtsp://thread:5454/south-rtsp.mp3 RTSP/1.0
    >> CSeq: 2
    >> Session: 5d5cb94413288ccd
    >>
    << RTSP/1.0 200 OK
    << CSeq: 2
    << Date: Wed May 11 13:21:43 2005 GMT
    << Session: 5d5cb94413288ccd
    <<

- The udp source elements receive data from that point and the RTP/RTCP messages
  are processed by the elements.

- In the case of interleaved mode, the SETUP method yields:

    >> SETUP rtsp://thread:5454/south-rtsp.mp3/streamid=0 RTSP/1.0
    >> CSeq: 1
    >> Transport: RTP/AVP/UDP;unicast;client_port=5000-5001,RTP/AVP/UDP;multicast,RTP/AVP/TCP
    >>
    << RTSP/1.0 200 OK
    << Transport: RTP/AVP/TCP;interleaved=0-1
    << CSeq: 1
    << Date: Wed May 11 13:21:43 2005 GMT
    << Session: 5d5cb94413288ccd
    <<

  This means that RTP/RTCP messages will be sent on channel 0/1 respectively and that
  the data will be received on the same connection as the RTSP connection.

  At this point, we remove the UDP source elements as we don't need them anymore. We
  set up the rtpsess session manager element though as follows:

    +---------------------------------------------+
    | +------------+                              |
    | | _loop()    |   +--------+                 |
    | |            ----- rtpses --------------------
    | |            |   |        |                 |
    | |            |   |        |  +------------+ |
    | |            ----- RTCP   ---- udpsink    | |
    | |            |   +--------+  |  port=6001 | |
    | +------------+               +------------+ |
    +---------------------------------------------+

  We start an interal task to start reading from the RTSP connection waiting
  for data. The received data is then pushed to the rtpdec element.

  When reading from the RTSP connection we receive data packets in the
  following layout (see also RFC2326)

    $<1 byte channel><2 bytes length, big endian><length bytes of data>


RTSP server
-----------

An RTSP server listen on a port (default 554) for client connections. The client
typically keeps this channel open during the RTSP session to instruct the server
to pause/play/stop the stream.

The server exposes a stream consisting of one or more media streams using an
URL. The media streams are typically audio and video.

  ex:
     rtsp://thread:5454/alien-rtsp.mpeg

     exposes an audio/video stream. The video is mpeg packetized in RTP and
     the audio is mp3 in RTP.

The streaming server typically uses a different channel to send the media
data to clients, typically using RTP over UDP. It is also possible to stream
the data to the client using the initial RTSP TCP session (the interleaved
mode). This last mode is useful when the client is behind a firewall but
does not take advantage of the RTP/UDP features.

In both cases, media data is send to the clients in an unmultiplexed format
packetized as RTP packets.

The streaming server has to negotiate a connection protocol for each of the
media streams with the client.

Minimal server requirements:

- The server should copy the CSeq header field in a client request to the
  response so that the client can match the response to the request.

- The server should keep a session for each client after the client issued
  a SETUP command. The client should use the same session id for all future
  request to this server.

- the server must support an OPTIONS request send over the RTSP connection.

    >> OPTIONS * RTSP/1.0
    >> CSeq: 1
    >>
    << RTSP/1.0 200 OK
    << CSeq: 1
    << Date: Wed May 11 13:21:43 2005 GMT
    << Session: 5d5cb94413288ccd
    << Public: DESCRIBE, SETUP, TEARDOWN, PLAY
    <<

   The OPTIONS request should list all supported methods on the server.
 
 - The server should support the DESCRIBE method.

    >> DESCRIBE rtsp://thread:5454/south-rtsp.mp3 RTSP/1.0
    >> Accept: application/sdp
    >> CSeq: 2
    >>
    << RTSP/1.0 200 OK
    << Content-Length: 84
    << Content-Type: application/sdp
    << CSeq: 2
    << Date: Wed May 11 13:09:37 2005 GMT
    <<
    << v=0
    << o=- 0 0 IN IP4 192.168.1.1
    << s=No Title
    << m=audio 0 RTP/AVP 14
    << a=control:streamid=0

    The client issues a DESCRIBE command for a specific URL that corresponds
    to an available stream. The client will also send an Accept header to
    list its supported formats. 

    The server answers this request with a reply in one of the client supported
    formats (application/sdp is the most common). The server typically sends a
    fixed reply to all clients for each configured stream.

 - The server must support the SETUP command to configure the media streams 
   that were listed in the DESCRIBE command.

    >> SETUP rtsp://thread:5454/south-rtsp.mp3/streamid=0 RTSP/1.0
    >> CSeq: 3
    >> Transport: RTP/AVP/UDP;unicast;client_port=5000-5001,RTP/AVP/UDP;multicast,RTP/AVP/TCP
    >>
    << RTSP/1.0 200 OK
    << Transport: RTP/AVP/UDP;unicast;client_port=5000-5001;server_port=6000-6001
    << CSeq: 3
    << Date: Wed May 11 13:21:43 2005 GMT
    << Session: 5d5cb94413288ccd

    The client will send a SETUP command for each of the streams listed in the 
    DESCRIBE reply. For sdp will use a URL as listed in the a=control: property.

    The client will list the supported transports in the Transport: header field.
    Each transport is separated with a comma (,) and listed in order of preference.
    The server has to select the first supported transport.
 
    In the above example 3 transport are listed:

       RTP/AVP/UDP;unicast;client_port=5000-5001

         The client will accept RTP over UDP on the port pair 5000-5001. Port
	 5000 will accept the RTP packets, 5001 the RTSP packets send by the
	 server.
       
       RTP/AVP/UDP;multicast

         The client can join a multicast group for the specific media stream.
	 The port numbers of the multicast group it will connect to have to
	 be specified by the server in the reply.
       
       RTP/AVP/TCP

         the client can accept RTP packets interleaved on the RTSP connection.

    The server selects a supported transport an allocates an RTP port pair to
    receive RTP and RTSP data from the client. This last step is optional when
    the server does not accept RTP data.

    The server should allocate a session for the client and should send the
    sessionId to the client. The client should use this session id for all
    future requests.

    The server may refuse a client that does not use the same transport method
    for all media streams.

    The server stores all client port pairs in the server client session along
    with the transport method.

    ex:

      For an on-demand stream the server could construct a (minimal) RTP GStreamer 
      pipeline for the client as follows (for an mp3 stream):
    
      +---------+    +-----------+    +------------+    +-------------+
      | filesrc |    | rtpmp3enc |    | rtpsession |    | udpsink     |
      |         |    |           |    |            |    |   host=XXX  |
      |         |    |           |    |            |    |   port=5000 |
      |        src--sink        src--rtpsink   rtpsrc--sink           |
      +---------+    +-----------+    |            |    +-------------+
                                      |            |    +-------------+
                                      |            |    | udpsink     |
                                      |            |    |   host=XXX  |
                                      |            |    |   port=5001 |
                                      |       rtspsrc--sink           |
                                      +------------+    +-------------+

      The server would set the above pipeline to PAUSE to make sure no data
      is sent to the client yet.

      optionally udpsrc elements can be configured to receive client RTP and
      RTSP messages.

    ex:

      For a live stream the server could construct a (minimal) RTP GStreamer 
      pipeline for the clients as follows (for an mp3 stream):
    
      +---------+    +--------+    +-----------+    +------------+    +--------------+
      | source  |    | mp3enc |    | rtpmp3enc |    | rtpsession |    | multiudpsink |
      |         |    |        |    |           |    |            |    |   host=...   |
      |         |    |        |    |           |    |            |    |   port=...   |
      |        src--sink     src--sink        src--rtpsink   rtpsrc--sink            |
      +---------+    +--------+    +-----------+    |            |    +--------------+
                                                    |            |    +--------------+
                                                    |            |    | multiudpsink |
                                                    |            |    |   host=...   |
                                                    |            |    |   port=...   |
                                                    |       rtspsrc--sink            |
                                                    +------------+    +--------------+

      Media data is streamed to clients by adding the client host and port numbers
      to the multiudpsinks.

      optionally udpsrc elements can be configured to receive client RTP and
      RTSP messages.
     
 - The server must support the PLAY command to start playback of the configured
   media streams.

    >> PLAY rtsp://thread:5454/south-rtsp.mp3 RTSP/1.0
    >> CSeq: 2
    >> Session: 5d5cb94413288ccd
    >>
    << RTSP/1.0 200 OK
    << CSeq: 2
    << Date: Wed May 11 13:21:43 2005 GMT
    << Session: 5d5cb94413288ccd
    <<

    Using the Session: header field, the server finds the pipeline of the session
    to PLAY and sets the pipeline to PLAYING at which point the client receives
    the media stream data.

    In case of a live stream, the server adds the port numbers to a multiudpsink
    element.

 - The server must support the TEARDOWN command to stop playback and free the
   session of a client.

    >> TEARDOWN rtsp://thread:5454/south-rtsp.mp3 RTSP/1.0
    >> CSeq: 4
    >> Session: 5d5cb94413288ccd
    >>
    << RTSP/1.0 200 OK
    << CSeq: 4
    << Date: Wed May 11 13:21:43 2005 GMT
    <<

    The server destroys the client pipeline in case of an on-demand stream or
    removes the client ports from the multiudpsinks. This effectively stops
    streaming to the client.


