The RTP libraries
---------------------

  RTP Buffers
  -----------
  The real time protocol as described in RFC 3550 requires the use of special
  packets containing an additional RTP header of at least 12 bytes. GStreamer
  provides some helper functions for creating and parsing these RTP headers.
  The result is a normal #GstBuffer with an additional RTP header.
 
  RTP buffers are usually created with gst_rtp_buffer_new_allocate() or
  gst_rtp_buffer_new_allocate_len(). These functions create buffers with a
  preallocated space of memory. It will also ensure that enough memory
  is allocated for the RTP header. The first function is used when the payload
  size is known. gst_rtp_buffer_new_allocate_len() should be used when the size
  of the whole RTP buffer (RTP header + payload) is known.
 
  When receiving RTP buffers from a network, gst_rtp_buffer_new_take_data()
  should be used when the user would like to parse that RTP packet. (TODO Ask
  Wim what the real purpose of this function is as it seems to simply create a
  duplicate GstBuffer with the same data as the previous one). The
  function will create a new RTP buffer with the given data as the whole RTP
  packet. Alternatively, gst_rtp_buffer_new_copy_data() can be used if the user
  wishes to make a copy of the data before using it in the new RTP buffer.
 
  It is now possible to use all the gst_rtp_buffer_get_*() or
  gst_rtp_buffer_set_*() functions to read or write the different parts of the
  RTP header such as the payload type, the sequence number or the RTP
  timestamp. The use can also retreive a pointer to the actual RTP payload data
  using the gst_rtp_buffer_get_payload() function.

  RTP Base Payloader Class (GstBaseRTPPayload)
  --------------------------------------------

  All RTP payloader elements (audio or video) should derive from this class.

  RTP Base Audio Payloader Class (GstBaseRTPAudioPayload)
  -------------------------------------------------------

  This base class can be tested through it's children classes. Here is an
  example using the iLBC payloader (frame based).

  For 20ms mode :

  GST_DEBUG="basertpaudiopayload:5" gst-launch-0.10 fakesrc sizetype=2
  sizemax=114 datarate=1900 ! audio/x-iLBC, mode=20 !  rtpilbcpay
  max-ptime="40000000" ! fakesink

  For 30ms mode :

  GST_DEBUG="basertpaudiopayload:5" gst-launch-0.10 fakesrc sizetype=2
  sizemax=150 datarate=1662 ! audio/x-iLBC, mode=30 !  rtpilbcpay
  max-ptime="60000000" ! fakesink

  Here is an example using the uLaw payloader (sample based).

  GST_DEBUG="basertpaudiopayload:5" gst-launch-0.10 fakesrc sizetype=2
  sizemax=150 datarate=8000 ! audio/x-mulaw ! rtppcmupay max-ptime="6000000" !
  fakesink

  RTP Base Depayloader Class (GstBaseRTPDepayload)
  ------------------------------------------------

  All RTP depayloader elements (audio or video) should derive from this class.
