gstreamer/gst/rtp
Wim Taymans da3e23d375 gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible.
Original commit message from CVS:
* gst/rtp/gstrtpL16depay.c: (gst_rtp_L16_depay_process):
* gst/rtp/gstrtpgsmdepay.c: (gst_rtp_gsm_depay_process):
* gst/rtp/gstrtpilbcdepay.c: (gst_rtp_ilbc_depay_process):
* gst/rtp/gstrtpmp2tdepay.c: (gst_rtp_mp2t_depay_process):
* gst/rtp/gstrtpmp4gdepay.c: (gst_rtp_mp4g_depay_process):
* gst/rtp/gstrtpmp4gpay.c: (gst_rtp_mp4g_pay_flush):
* gst/rtp/gstrtpmp4vdepay.c: (gst_rtp_mp4v_depay_setcaps),
(gst_rtp_mp4v_depay_process):
* gst/rtp/gstrtpmp4vpay.c: (gst_rtp_mp4v_pay_flush):
* gst/rtp/gstrtpmpadepay.c: (gst_rtp_mpa_depay_process):
* gst/rtp/gstrtpmpapay.c: (gst_rtp_mpa_pay_flush):
* gst/rtp/gstrtpmpvdepay.c: (gst_rtp_mpv_depay_process):
* gst/rtp/gstrtppcmadepay.c: (gst_rtp_pcma_depay_process):
* gst/rtp/gstrtppcmudepay.c: (gst_rtp_pcmu_depay_process):
* gst/rtp/gstrtpsv3vdepay.c: (gst_rtp_sv3v_depay_process):
Use more efficient adapter and rtpbuffer methods when possible.
2007-03-29 14:03:21 +00:00
..
gstasteriskh263.c gst/rtp/: Fix klass typos. 2006-09-23 15:30:40 +00:00
gstasteriskh263.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtp.c gst/rtp/: Added H264 payloader. Fixes #423782. 2007-03-29 08:08:49 +00:00
gstrtpac3depay.c gst/rtp/: Added simple AC3 depayloader (RFC 4184). 2007-01-24 15:18:34 +00:00
gstrtpac3depay.h gst/rtp/: Added simple AC3 depayloader (RFC 4184). 2007-01-24 15:18:34 +00:00
gstrtpamrdepay.c gst/rtp/: Fix caps with payload numbers. 2007-01-24 12:22:51 +00:00
gstrtpamrdepay.h gst/rtp/gstrtpamrdepay.*: rtpamrdec isn't a subclass of GstBaseRtpDepayload. 2006-07-14 13:33:54 +00:00
gstrtpamrpay.c gst/rtp/: Fix element descriptions. 2006-11-08 01:30:39 +00:00
gstrtpamrpay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtpdepay.c gst/rtp/: Fix klass typos. 2006-09-23 15:30:40 +00:00
gstrtpdepay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtpgsmdepay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtpgsmdepay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtpgsmpay.c gst/rtp/: Add static payload numbers in addition to the dynamic ones. 2006-10-18 17:06:21 +00:00
gstrtpgsmpay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtph263pay.c gst/rtp/: Specify H.263 variant and version in the caps (fixes #361637) 2006-11-16 07:26:17 +00:00
gstrtph263pay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtph263pdepay.c gst/rtp/: Fix caps with payload numbers. 2007-01-24 12:22:51 +00:00
gstrtph263pdepay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtph263ppay.c gst/rtp/: Fix caps with payload numbers. 2007-01-24 12:22:51 +00:00
gstrtph263ppay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtph264depay.c gst/rtp/: Added H264 payloader. Fixes #423782. 2007-03-29 08:08:49 +00:00
gstrtph264depay.h gst/rtp/: Caps extra properties must be defined as strings for depayloaders because they are generated from an SDP. 2006-08-16 10:05:00 +00:00
gstrtph264pay.c gst/rtp/: Added H264 payloader. Fixes #423782. 2007-03-29 08:08:49 +00:00
gstrtph264pay.h gst/rtp/: Added H264 payloader. Fixes #423782. 2007-03-29 08:08:49 +00:00
gstrtpilbcdepay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtpilbcdepay.h gst/rtp/: Fix GObject macros. 2006-04-13 09:01:17 +00:00
gstrtpilbcpay.c gst/rtp/: Fix case of encoding-name and key/value pairs to match the document. 2007-01-25 14:22:53 +00:00
gstrtpilbcpay.h gst/rtp/: Fix GObject macros. 2006-04-13 09:01:17 +00:00
gstrtpL16depay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtpL16depay.h gst/rtp/: Port and enable raw audio payloader/depayloader. Needs a bit more work on the payloader side. 2007-01-24 18:20:14 +00:00
gstrtpL16pay.c gst/rtp/gstrtpL16pay.*: Fill up to MTU using adapter. 2007-01-25 10:54:19 +00:00
gstrtpL16pay.h gst/rtp/gstrtpL16pay.*: Fill up to MTU using adapter. 2007-01-25 10:54:19 +00:00
gstrtpmp2tdepay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtpmp2tdepay.h gst/rtp/gstrtpmp2tdepay.*: Add support to strip off proprietary headers. Fixes #350278. 2007-03-02 12:16:16 +00:00
gstrtpmp2tpay.c gst/rtp/: Added simple mpeg transport stream payloader. 2007-02-18 13:24:26 +00:00
gstrtpmp2tpay.h gst/rtp/: Added simple mpeg transport stream payloader. 2007-02-18 13:24:26 +00:00
gstrtpmp4adepay.c gst/rtp/: Added MP4A-LATM depayloader. Fixes #417792. 2007-03-28 18:40:12 +00:00
gstrtpmp4adepay.h gst/rtp/: Added MP4A-LATM depayloader. Fixes #417792. 2007-03-28 18:40:12 +00:00
gstrtpmp4gdepay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtpmp4gdepay.h gst/rtp/: Added simple generic mpeg4 depayloader. 2006-07-16 14:31:48 +00:00
gstrtpmp4gpay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtpmp4gpay.h gst/rtp/README: Update README with some examples. 2006-09-21 09:35:13 +00:00
gstrtpmp4vdepay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtpmp4vdepay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtpmp4vpay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtpmp4vpay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtpmpadepay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtpmpadepay.h gst/rtp/: Added RFC 2250 MPEG Video Depayloader. 2007-01-09 12:23:48 +00:00
gstrtpmpapay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtpmpapay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtpmpvdepay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtpmpvdepay.h gst/rtp/: Added RFC 2250 MPEG Video Depayloader. 2007-01-09 12:23:48 +00:00
gstrtppcmadepay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtppcmadepay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtppcmapay.c gst/rtp/: Ported mulaw and alaw payloaders to use new base class 2007-03-14 22:21:26 +00:00
gstrtppcmapay.h gst/rtp/: Ported mulaw and alaw payloaders to use new base class 2007-03-14 22:21:26 +00:00
gstrtppcmudepay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtppcmudepay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtppcmupay.c gst/rtp/: Ported mulaw and alaw payloaders to use new base class 2007-03-14 22:21:26 +00:00
gstrtppcmupay.h gst/rtp/: Ported mulaw and alaw payloaders to use new base class 2007-03-14 22:21:26 +00:00
gstrtpspeexdepay.c gst/rtp/: Fix speex (de)payloader. Fixes #358040. 2007-03-05 16:39:29 +00:00
gstrtpspeexdepay.h Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass 2006-06-01 21:07:26 +00:00
gstrtpspeexpay.c gst/rtp/: Fix speex (de)payloader. Fixes #358040. 2007-03-05 16:39:29 +00:00
gstrtpspeexpay.h gst/rtp/: Fix speex (de)payloader. Fixes #358040. 2007-03-05 16:39:29 +00:00
gstrtpsv3vdepay.c gst/rtp/: Use more efficient adapter and rtpbuffer methods when possible. 2007-03-29 14:03:21 +00:00
gstrtpsv3vdepay.h gst/rtp/: Added experimental SVQ3 depayloader. 2006-08-18 16:52:21 +00:00
gstrtptheoradepay.c gst/rtp/: Fix case of encoding-name and key/value pairs to match the document. 2007-01-25 14:22:53 +00:00
gstrtptheoradepay.h gst/rtp/: Add theora pay/depayloaders. 2006-11-08 01:28:00 +00:00
gstrtptheorapay.c gst/rtp/: Fix encoding-name case. 2007-03-05 17:08:32 +00:00
gstrtptheorapay.h gst/rtp/: Add theora pay/depayloaders. 2006-11-08 01:28:00 +00:00
gstrtpvorbisdepay.c gst/rtp/: Fix case of encoding-name and key/value pairs to match the document. 2007-01-25 14:22:53 +00:00
gstrtpvorbisdepay.h gst/rtp/Makefile.am: We depend on gsttag to generate the vorbis comments. 2006-11-07 01:43:06 +00:00
gstrtpvorbispay.c gst/rtp/: Fix encoding-name case. 2007-03-05 17:08:32 +00:00
gstrtpvorbispay.h gst/rtp/Makefile.am: We depend on gsttag to generate the vorbis comments. 2006-11-07 01:43:06 +00:00
Makefile.am gst/rtp/: Added H264 payloader. Fixes #423782. 2007-03-29 08:08:49 +00:00
README gst/rtp/README: Fix case of string params. 2007-02-16 12:30:22 +00:00
rtp.vcproj more working plugins 2004-07-27 21:41:30 +00:00
TODO gst/rtp/: Use is_filled to both check MTU and max-ptime of base class. 2005-09-22 14:13:36 +00:00

This directory contains some RTP payloaders/depayloaders for different payload
types. Use one payloader/depayloder pair per payload. If several payloads can be
payloaded/depayloaded by the same element, make different copies of it, one for
each payload.

The application/x-rtp mime type
-------------------------------

For valid RTP packets encapsulated in GstBuffers, we use the caps with
mime type application/x-rtp.

The following fields can or must (*) be specified in the structure:

 * media: (String) [ "audio", "video", "application", "data", "control" ]
     Defined in RFC 2327 in the SDP media announcement field.
     Converted to lower case.

 * payload: (int) [0, 127]
     For audio and video, these will normally be a media payload type as 
     defined in the RTP Audio/Video Profile. For dynamicaly allocated 
     payload types, this value will be >= 96 and the encoding-name must be
     set.

 * clock-rate: (int) [0 - MAXINT]
    the RTP clock rate

   ssrc: (uint) [0 - MAXINT]
    The ssrc value currently in use.

   clock-base: (uint) [0 - MAXINT]
    The RTP time representing time 0

   seqnum-base: (uint) [0 - MAXINT]
    The RTP sequence number representing the first rtp packet

   encoding-name: (String) ANY
     typically second part of the mime type. ex. MP4V-ES. only required if
     payload type >= 96. Converted to upper case.

   encoding-params: (String) ANY
     extra encoding parameters (as in the SDP a=rtpmap: field). only required
     if different from the default of the encoding-name.
     Converted to lower-case.
     
   Optional parameters as key/value pairs, media type specific. The value type
   should be of type G_TYPE_STRING. The key is converted to lower-case. The
   value is left in its original case.
   A parameter with no value is converted to <param>=1.

 Example:

  "application/x-rtp",
      "media", G_TYPE_STRING, "audio",		-]
      "payload", G_TYPE_INT, 96,                 ] - required
      "clock-rate", G_TYPE_INT, 8000,           -]
      "encoding-name", G_TYPE_STRING, "AMR",    -] - required since payload >= 96
      "encoding-params", G_TYPE_STRING, "1",	-] - optional param for AMR
      "octet-align", G_TYPE_STRING, "1",	-]
      "crc", G_TYPE_STRING, "0",                 ]
      "robust-sorting", G_TYPE_STRING, "0",      ]  AMR specific params.
      "interleaving", G_TYPE_STRING, "0",       -]
  
 Mapping of caps to and from SDP fields:

   m=<media> <udp port> RTP/AVP <payload>       -] media and payload from caps
   a=rtpmap:<payload> <encoding-name>/<clock-rate>[/<encoding-params>]
              -> when <payload> >= 96
   a=fmtp:<payload> <param>=<value>;...

 For above caps:

   m=audio <udp port> RTP/AVP 96
   a=rtpmap:96 AMR/8000/1
   a=fmtp:96 octet-align=1;crc=0;robust-sorting=0;interleaving=0

 in RTSP, the SSRC is also sent.

 The optional parameters in the SDP fields are case insensitive. In the caps we
 always use the lowercase names so that the SDP -> caps mapping remains
 possible.


usage with UDP
--------------

To correctly and completely use the RTP payloaders on the sender and the
receiver you need to write an application. It is not possible to write a full
blown RTP server with a single gst-launch line.

That said, it is possible to do something functional with a few gst-launch
lines. The biggest problem when constructing a correct gst-launch line lies on
the receiver end. 

The receiver needs to know about the type of the RTP data along with a set of
RTP configuration parameters. This information is usually transmitted to the
client using some sort of session description language (SDP) over some reliable
channel (HTTP/RTSP/...).  

All of the required parameters to connect and use the RTP session on the
server can be found in the caps on the server end. The client receives this
information in some way (caps are converted to and from SDP, as explained above,
for example).

Some gst-launch lines:

  gst-launch-0.10 -v videotestsrc ! ffenc_h263p ! rtph263ppay ! udpsink

   Setting pipeline to PAUSED ...
   /pipeline0/videotestsrc0.src: caps = video/x-raw-yuv, format=(fourcc)I420,
   width=(int)320, height=(int)240, framerate=(fraction)30/1
   Pipeline is PREROLLING ...
   ....
   /pipeline0/udpsink0.sink: caps = application/x-rtp, media=(string)video,
   payload=(int)96, clock-rate=(int)90000, encoding-name=(string)H263-1998,
   ssrc=(guint)527842345, clock-base=(guint)1150776941, seqnum-base=(guint)30982
   ....
   Pipeline is PREROLLED ...
   Setting pipeline to PLAYING ...
   New clock: GstSystemClock

 Write down the caps on the udpsink and set them as the caps of the UDP 
 receiver:

  gst-launch-0.10 -v udpsrc caps="application/x-rtp, media=(string)video,
  payload=(int)96, clock-rate=(int)90000, encoding-name=(string)H263-1998,
  ssrc=(guint)527842345, clock-base=(guint)1150776941, seqnum-base=(guint)30982"
  ! rtph263pdepay ! ffdec_h263 ! xvimagesink sync=false

 The receiver now displays an h263 image. Note that the sync parameter on
 xvimagesink needs to be FALSE because we do not have an RTP session manager
 that controls the synchronisation in this pipeline.

 Stream a quicktime file with mpeg4 video and AAC audio on port 5000 and port
 5002.

  gst-launch-0.10 -v filesrc location=~/data/sincity.mp4 ! qtdemux name=d ! queue ! rtpmp4vpay ! udpsink port=5000  
                         d. ! queue ! rtpmp4gpay ! udpsink port=5002
    ....
    /pipeline0/udpsink0.sink: caps = application/x-rtp, media=(string)video,
    payload=(int)96, clock-rate=(int)90000, encoding-name=(string)MP4V-ES,
    ssrc=(guint)1162703703, clock-base=(guint)816135835, seqnum-base=(guint)9294,
    profile-level-id=(string)3, config=(string)000001b003000001b50900000100000001200086c5d4c307d314043c1463000001b25876694430303334
    /pipeline0/udpsink1.sink: caps = application/x-rtp, media=(string)audio,
    payload=(int)96, clock-rate=(int)44100, encoding-name=(string)MPEG4-GENERIC,
    ssrc=(guint)3246149898, clock-base=(guint)4134514058, seqnum-base=(guint)57633,
    encoding-params=(string)2, streamtype=(string)5, profile-level-id=(string)1,
    mode=(string)aac-hbr, config=(string)1210, sizelength=(string)13,
    indexlength=(string)3, indexdeltalength=(string)3
    ....

 Again copy the caps on both sinks to the receiver launch line

    gst-launch 
     udpsrc port=5000 caps="application/x-rtp, media=(string)video, payload=(int)96,
      clock-rate=(int)90000, encoding-name=(string)MP4V-ES, ssrc=(guint)1162703703,
      clock-base=(guint)816135835, seqnum-base=(guint)9294, profile-level-id=(string)3,
      config=(string)000001b003000001b50900000100000001200086c5d4c307d314043c1463000001b25876694430303334"
      ! rtpmp4vdepay ! ffdec_mpeg4 ! xvimagesink sync=false 
     udpsrc port=5002 caps="application/x-rtp, media=(string)audio, payload=(int)96,
      clock-rate=(int)44100, encoding-name=(string)MPEG4-GENERIC, ssrc=(guint)3246149898,
      clock-base=(guint)4134514058, seqnum-base=(guint)57633, encoding-params=(string)2,
      streamtype=(string)5, profile-level-id=(string)1, mode=(string)aac-hbr,
      config=(string)1210, sizelength=(string)13, indexlength=(string)3,
      indexdeltalength=(string)3" 
      ! rtpmp4gdepay ! faad ! alsasink sync=false

 The caps on the udpsinks can be retrieved when the server pipeline prerolled to
 PAUSED.

 The caps on the receiver side can be set on the UDP source elements when the
 pipeline went to PAUSED. In that state no data is received from the UDP sources
 as they are live sources and only produce data in PLAYING.


Relevant RFCs
-------------

3550 RTP: A Transport Protocol for Real-Time Applications. ( 1889 Obsolete )

2198 RTP Payload for Redundant Audio Data.
3119 A More Loss-Tolerant RTP Payload Format for MP3 Audio.

2793 RTP Payload for Text Conversation.

2032 RTP Payload Format for H.261 Video Streams.
2190 RTP Payload Format for H.263 Video Streams.
2250 RTP Payload Format for MPEG1/MPEG2 Video.
2343 RTP Payload Format for Bundled MPEG.
2429 RTP Payload Format for the 1998 Version of ITU-T Rec. H.263 Video
2431 RTP Payload Format for BT.656 Video Encoding.
2435 RTP Payload Format for JPEG-compressed Video.
3016 RTP Payload Format for MPEG-4 Audio/Visual Streams.
3047 RTP Payload Format for ITU-T Recommendation G.722.1.
3189 RTP Payload Format for DV (IEC 61834) Video.
3190 RTP Payload Format for 12-bit DAT Audio and 20- and 24-bit Linear Sampled Audio.
3389 Real-time Transport Protocol (RTP) Payload for Comfort Noise (CN)
2733 An RTP Payload Format for Generic Forward Error Correction.
2833 RTP Payload for DTMF Digits, Telephony Tones and Telephony
     Signals.
2862 RTP Payload Format for Real-Time Pointers.
3351 RTP Profile for Audio and Video Conferences with Minimal Control. ( 1890 Obsolete )
3555 MIME Type Registration of RTP Payload Formats.

2508 Compressing IP/UDP/RTP Headers for Low-Speed Serial Links.
1305 Network Time Protocol (Version 3) Specification, Implementation and Analysis.
3339 Date and Time on the Internet: Timestamps.
2246 The TLS Protocol Version 1.0
3546 Transport Layer Security (TLS) Extensions. ( Updates 2246 )

do we care?
-----------

2029 RTP Payload Format of Sun's CellB Video Encoding.

usefull
-------

http://www.iana.org/assignments/rtp-parameters