gstreamer/gst/rtp
Sebastian Dröge e9a0307b94 rtph26[45]pay: Change default aggregate-mode to "none" for backwards compatibility
We didn't aggregate at all in previous versions and there are apparently
various RTP implementations that don't handle aggregation well at all.

As part of this also document that for RTSP it is recommended to keep it
set to "none" while for WebRTC it should be set to "zero-latency".

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/749

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/692>
2020-08-08 10:08:31 +03:00
..
dboolhuff.c ext, gst: fix indentation 2016-09-15 09:53:07 +01:00
dboolhuff.h win32: Don't use __attribute__ on MSVC 2016-03-10 10:01:19 +00:00
dboolhuff.LICENSE rtpvp8: Add simple payloaders and depayloaders for VP8 2012-11-01 20:53:47 +00:00
fnv1hash.c Fix FSF address 2012-11-04 00:07:18 +00:00
fnv1hash.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstasteriskh263.c good: use new gst_element_class_add_static_pad_template() 2016-03-24 14:32:20 +02:00
gstasteriskh263.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstbuffermemory.c buffermemory: keep track of buffer size and current offset 2020-04-03 17:01:24 +02:00
gstbuffermemory.h buffermemory: keep track of buffer size and current offset 2020-04-03 17:01:24 +02:00
gstrtp.c rtp: Implement ULPFEC (RFC 5109) 2018-02-21 14:15:22 +01:00
gstrtpac3depay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpac3depay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpac3pay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpac3pay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpamrdepay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpamrdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpamrpay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpamrpay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpbvdepay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpbvdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpbvpay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpbvpay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpceltdepay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpceltdepay.h update for base class rename 2011-11-11 12:32:41 +01:00
gstrtpceltpay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpceltpay.h update for base class rename 2011-11-11 12:32:41 +01:00
gstrtpchannels.c rtp: fix compiler warnings with gcc-6 2016-01-19 13:04:39 +00:00
gstrtpchannels.h rtp: fix compiler warnings with gcc-6 2016-01-19 13:04:39 +00:00
gstrtpdvdepay.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtpdvdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpdvpay.c plugins: uddate gst_type_mark_as_plugin_api() calls 2020-06-06 00:42:25 +02:00
gstrtpdvpay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpg722depay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpg722depay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpg722pay.c Run gst-indent through the files 2018-11-28 05:52:16 +02:00
gstrtpg722pay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpg723depay.c good: use new gst_element_class_add_static_pad_template() 2016-03-24 14:32:20 +02:00
gstrtpg723depay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpg723pay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpg723pay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpg726depay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpg726depay.h Update Edgard Lima's email 2017-02-27 00:34:19 +00:00
gstrtpg726pay.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtpg726pay.h Update Edgard Lima's email 2017-02-27 00:34:19 +00:00
gstrtpg729depay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpg729depay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpg729pay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpg729pay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpgsmdepay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpgsmdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpgsmpay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpgsmpay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpgstdepay.c rtpgstdepay: Only store the current caps and drop old caps immediately 2019-06-18 08:35:12 +00:00
gstrtpgstdepay.h rtpgstdepay: Only store the current caps and drop old caps immediately 2019-06-18 08:35:12 +00:00
gstrtpgstpay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpgstpay.h rtpgstpay: Add support for force-keyunit events 2018-07-26 16:54:28 +03:00
gstrtph261depay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtph261depay.h rtp: add H.261 RTP payloader and depayloader 2015-07-03 11:48:41 +01:00
gstrtph261pay.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtph261pay.h rtp: add H.261 RTP payloader and depayloader 2015-07-03 11:48:41 +01:00
gstrtph263depay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtph263depay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtph263pay.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtph263pay.h rtph263pay: Stop using an adapter and directly use the buffer 2015-07-02 09:26:27 +02:00
gstrtph263pdepay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtph263pdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtph263ppay.c plugins: uddate gst_type_mark_as_plugin_api() calls 2020-06-06 00:42:25 +02:00
gstrtph263ppay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtph264depay.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtph264depay.h rtph264depay: try to negotiate an allocator with downstream 2017-11-23 09:35:59 +01:00
gstrtph264pay.c rtph26[45]pay: Change default aggregate-mode to "none" for backwards compatibility 2020-08-08 10:08:31 +03:00
gstrtph264pay.h rtph264pay: Report latency when in maximal aggregation mode 2019-07-03 19:05:29 +00:00
gstrtph265depay.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtph265depay.h rtph265depay: store negotiated output format as enum 2017-11-23 09:36:15 +01:00
gstrtph265pay.c rtph26[45]pay: Change default aggregate-mode to "none" for backwards compatibility 2020-08-08 10:08:31 +03:00
gstrtph265pay.h rtph265pay: Also immediately send packet if it is a suffix NAL 2019-07-03 19:05:29 +00:00
gstrtph265types.h rtp: h265: remove codecparser dependency from h265 payloader/depayloader 2016-02-16 00:25:41 +00:00
gstrtpilbcdepay.c plugins: uddate gst_type_mark_as_plugin_api() calls 2020-06-06 00:42:25 +02:00
gstrtpilbcdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpilbcpay.c rtp: Filter with the filter caps in the payloader's getcaps 2016-07-25 13:35:18 +03:00
gstrtpilbcpay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpj2kcommon.h gstrtpj2k: set sampling field required by RFC 2016-06-10 13:14:44 +03:00
gstrtpj2kdepay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpj2kdepay.h rtpj2k: move common code to shared header, code clean up 2016-05-13 11:01:15 +03:00
gstrtpj2kpay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpj2kpay.h rtpj2k: move common code to shared header, code clean up 2016-05-13 11:01:15 +03:00
gstrtpjpegdepay.c rtpjpegdepay: outputs framed jpeg 2019-12-04 13:02:54 +00:00
gstrtpjpegdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpjpegpay.c rtpjpeg: Use gst_memory_map() instead of gst_buffer_map() 2020-04-03 17:01:24 +02:00
gstrtpjpegpay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpklvdepay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpklvdepay.h rtpklvdepay: improve start detection and handle fragmented KLV units 2015-07-07 20:11:27 +01:00
gstrtpklvpay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpklvpay.h rtp: add SMPTE 336M KLV metadata payloader 2015-07-07 20:11:23 +01:00
gstrtpL8depay.c rtpLXXdepay: Set the UNPOSITIONED flag on the audio-info when configuring an unpositioned layout 2020-04-03 17:57:23 +00:00
gstrtpL8depay.h rtp: add L8 audio support 2017-12-24 13:19:56 +01:00
gstrtpL8pay.c doc: remove xml from comments 2019-05-29 22:20:40 +02:00
gstrtpL8pay.h rtp: add L8 audio support 2017-12-24 13:19:56 +01:00
gstrtpL16depay.c rtpLXXdepay: Set the UNPOSITIONED flag on the audio-info when configuring an unpositioned layout 2020-04-03 17:57:23 +00:00
gstrtpL16depay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpL16pay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpL16pay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpL24depay.c rtpLXXdepay: Set the UNPOSITIONED flag on the audio-info when configuring an unpositioned layout 2020-04-03 17:57:23 +00:00
gstrtpL24depay.h rtp: add L24 pay and depayloader 2013-09-09 15:13:46 +02:00
gstrtpL24pay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpL24pay.h rtp: add L24 pay and depayloader 2013-09-09 15:13:46 +02:00
gstrtpmp1sdepay.c good: use new gst_element_class_add_static_pad_template() 2016-03-24 14:32:20 +02:00
gstrtpmp1sdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpmp2tdepay.c good: use new gst_element_class_add_static_pad_template() 2016-03-24 14:32:20 +02:00
gstrtpmp2tdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpmp2tpay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpmp2tpay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpmp4adepay.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtpmp4adepay.h rtpmp4adepay: Only declare a stream to be framed once a marker bit has been seen 2016-09-06 15:09:21 +01:00
gstrtpmp4apay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpmp4apay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpmp4gdepay.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtpmp4gdepay.h rtpmp4gdepay: don't spam debug log for broken ADTS-in-RTP AAC 2019-05-28 19:28:05 +00:00
gstrtpmp4gpay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpmp4gpay.h rtpmp4gpay: Don't produce timestamps based on byte count 2016-05-15 12:28:55 +02:00
gstrtpmp4vdepay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpmp4vdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpmp4vpay.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtpmp4vpay.h rtpmp4vpay: config-interval -1 send at idr 2019-08-01 14:28:04 +00:00
gstrtpmpadepay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpmpadepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpmpapay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpmpapay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpmparobustdepay.c good: use new gst_element_class_add_static_pad_template() 2016-03-24 14:32:20 +02:00
gstrtpmparobustdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpmpvdepay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpmpvdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpmpvpay.c rtpmpvpay: Don't create empty buffer list 2017-11-10 15:51:05 +01:00
gstrtpmpvpay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpopusdepay.c rtpopusdepay: minor perf improvements 2017-05-24 16:41:45 +01:00
gstrtpopusdepay.h rtp: opus: move Opus RTP payloader/depayloader from -bad to -good 2016-02-25 22:45:16 +00:00
gstrtpopuspay.c rtpopuspay: make depay ! pay work 2020-04-03 09:04:32 +00:00
gstrtpopuspay.h rtp: opus: move Opus RTP payloader/depayloader from -bad to -good 2016-02-25 22:45:16 +00:00
gstrtppcmadepay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtppcmadepay.h Update Edgard Lima's email 2017-02-27 00:34:19 +00:00
gstrtppcmapay.c Update Edgard Lima's email 2017-02-27 00:34:19 +00:00
gstrtppcmapay.h Update Edgard Lima's email 2017-02-27 00:34:19 +00:00
gstrtppcmudepay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtppcmudepay.h Update Edgard Lima's email 2017-02-27 00:34:19 +00:00
gstrtppcmupay.c Update Edgard Lima's email 2017-02-27 00:34:19 +00:00
gstrtppcmupay.h Update Edgard Lima's email 2017-02-27 00:34:19 +00:00
gstrtpqcelpdepay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpqcelpdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpqdmdepay.c good: use new gst_element_class_add_static_pad_template() 2016-03-24 14:32:20 +02:00
gstrtpqdmdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpreddec.c doc: remove xml from comments 2019-05-29 22:20:40 +02:00
gstrtpreddec.h rtp: Implement ULPFEC (RFC 5109) 2018-02-21 14:15:22 +01:00
gstrtpredenc.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtpredenc.h rtp: Implement ULPFEC (RFC 5109) 2018-02-21 14:15:22 +01:00
gstrtpsbcdepay.c rtpsbcdepay: Fix potential NULL pointer dereference 2017-10-07 14:06:38 +03:00
gstrtpsbcdepay.h sbcdepay: Add property to ignore input timestamps 2017-09-28 14:15:12 +03:00
gstrtpsbcpay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpsbcpay.h rtpsbcpay: Fix some tabs that crept in somehow 2017-08-29 22:12:35 +05:30
gstrtpsirendepay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpsirendepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpsirenpay.c good: use new gst_element_class_add_static_pad_template() 2016-03-24 14:32:20 +02:00
gstrtpsirenpay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpspeexdepay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpspeexdepay.h Update Edgard Lima's email 2017-02-27 00:34:19 +00:00
gstrtpspeexpay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpspeexpay.h Update Edgard Lima's email 2017-02-27 00:34:19 +00:00
gstrtpstorage.c rtpstorage + rtpulpfecdec: Get the storage using a query as fallback 2019-04-09 08:17:28 +00:00
gstrtpstorage.h rtp: Implement ULPFEC (RFC 5109) 2018-02-21 14:15:22 +01:00
gstrtpstreamdepay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpstreamdepay.h rtpstreamdepay: Add RFC4571 RTP stream depayloading element 2013-12-04 21:58:29 +01:00
gstrtpstreampay.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpstreampay.h rtpstreampay: Add RFC4571 RTP stream payloading element 2013-12-04 21:58:29 +01:00
gstrtpsv3vdepay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpsv3vdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtptheoradepay.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtptheoradepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtptheorapay.c rtp: Use running_time instead of PTS for config-interval calculations 2018-07-24 18:14:28 +03:00
gstrtptheorapay.h rtp: Copy metadata in the (de)payloader, but only the relevant ones 2015-08-11 12:47:23 +02:00
gstrtpulpfecdec.c doc: remove xml from comments 2019-05-29 22:20:40 +02:00
gstrtpulpfecdec.h ulpfecdec: output perfect seqnums 2018-04-19 18:17:39 +02:00
gstrtpulpfecenc.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtpulpfecenc.h FEC elements: document, remove irrelevant properties 2018-02-26 16:41:12 +01:00
gstrtputils.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtputils.h rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpvorbisdepay.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtpvorbisdepay.h Fix FSF address 2012-11-04 00:07:18 +00:00
gstrtpvorbispay.c rtp*pay: Allocate using the base class for audio codecs 2020-07-17 16:53:40 -04:00
gstrtpvorbispay.h rtp: Copy metadata in the (de)payloader, but only the relevant ones 2015-08-11 12:47:23 +02:00
gstrtpvp8depay.c rtpvp8depay: Add property for waiting until the next keyframe after packet loss 2019-08-12 17:10:20 +00:00
gstrtpvp8depay.h rtpvp8depay: Add property for waiting until the next keyframe after packet loss 2019-08-12 17:10:20 +00:00
gstrtpvp8pay.c plugins: uddate gst_type_mark_as_plugin_api() calls 2020-06-06 00:42:25 +02:00
gstrtpvp8pay.h rtpvp8: include config.h and minor style fixes 2012-11-01 21:10:21 +00:00
gstrtpvp9depay.c rtp: cache meta tag quarks and add more utility functions for metas 2017-05-24 13:32:10 +01:00
gstrtpvp9depay.h rtpvp9pay: rtpvp9depay: Initial implementation of draft 01 2016-02-16 15:54:06 +02:00
gstrtpvp9pay.c plugins: uddate gst_type_mark_as_plugin_api() calls 2020-06-06 00:42:25 +02:00
gstrtpvp9pay.h rtpvp9pay: rtpvp9depay: Initial implementation of draft 01 2016-02-16 15:54:06 +02:00
gstrtpvrawdepay.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtpvrawdepay.h rtpvrawdepay: map/unmap output frame only once, not for every input packet 2015-05-25 16:16:42 +01:00
gstrtpvrawpay.c rtpvrawpay: preserve GST_BUFFER_FLAG_DISCONT on the first outputted buffer 2019-04-09 09:32:43 +00:00
gstrtpvrawpay.h rtpvrawpay: make chunks per frame configurable 2014-06-18 14:54:58 +01:00
meson.build rtph26x: Use gst_memory_map() instead of gst_buffer_map() in avc mode 2020-03-06 10:44:16 +00:00
README documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
rtpredcommon.c rtp: Implement ULPFEC (RFC 5109) 2018-02-21 14:15:22 +01:00
rtpredcommon.h rtp: Implement ULPFEC (RFC 5109) 2018-02-21 14:15:22 +01:00
rtpstorage.c Don't pass default GLib marshallers for signals 2019-11-17 15:32:30 +00:00
rtpstorage.h rtp: Implement ULPFEC (RFC 5109) 2018-02-21 14:15:22 +01:00
rtpstoragestream.c rtpstorage: Limit the queue size 2019-03-29 22:51:54 +00:00
rtpstoragestream.h rtpstorage: Make debug category available to sub objects 2019-03-26 19:41:06 -04:00
rtpulpfeccommon.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
rtpulpfeccommon.h documentation: fix a number of typos 2019-10-05 22:38:11 +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 dynamically allocated 
     payload types, this value will be >= 96 and the encoding-name must be
     set.

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

   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.
     
   ssrc: (uint) [0 - MAXINT]
    The ssrc value currently in use. (default = the SSRC of the first RTP
    packet)

   timestamp-offset: (uint) [0 - MAXINT]
    The RTP time representing time npt-start. (default = rtptime of first RTP
    packet).

   seqnum-offset: (uint) [0 - MAXINT]
    The RTP sequence number representing the first rtp packet. When this
    parameter is given, all sequence numbers below this seqnum should be
    ignored. (default = seqnum of first RTP packet).

   npt-start: (uint64) [0 - MAXINT]
    The Normal Play Time for clock-base. This is the position in the stream and
    is between 0 and the duration of the stream. This value is expressed in
    nanoseconds GstClockTime. (default = 0)

   npt-stop: (uint64) [0 - MAXINT] 
    The last position in the stream. This value is expressed in nanoseconds
    GstClockTime. (default = -1, stop unknown)

   play-speed: (gdouble) [-MIN - MAX]
    The intended playback speed of the stream. The client is delivered data at
    the adjusted speed. The client should adjust its playback speed with this
    value and thus corresponds to the GStreamer rate field in the NEWSEGMENT
    event. (default = 1.0)
    
   play-scale: (gdouble) [-MIN - MAX]
    The rate already applied to the stream. The client is delivered a stream
    that is scaled by this amount. This value is used to adjust position
    reporting and corresponds to the GStream applied-rate field in the
    NEWSEGMENT event. (default = 1.0)

   maxptime: (uint) [0, MAX]
    The maxptime as defined in RFC 4566, this defines the maximum size of a
    packet. It overrides the max-ptime property of payloaders.

   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

 Attributes are converted as follows:

  IANA registered attribute names are prepended with 'a-' before putting them in
  the caps. Unregistered keys (starting with 'x-') are copied directly into the
  caps.

 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.

 Mapping of caps to NEWSEGMENT:

  rate:         <play-speed>
  applied-rate: <play-scale>
  format:       GST_FORMAT_TIME
  start:        <clock-base> * GST_SECOND / <clock-rate>
  stop:         if <ntp-stop> != -1
                  <npt-stop> - <npt-start> + start
		else 
		  -1
  time:         <npt-start>


Timestamping
------------

RTP in GStreamer uses a combination of the RTP timestamps and GStreamer buffer
timestamps to ensure proper synchronisation at the sender and the receiver end.

In RTP applications, the synchronisation is most complex at the receiver side.

At the sender side, the RTP timestamps are generated in the payloaders based on
GStreamer timestamps. At the receiver, GStreamer timestamps are reconstructed
from the RTP timestamps and the GStreamer timestamps in the jitterbuffer. This
process is explained in more detail below.

= synchronisation at the sender

Individual streams at the sender are synchronised using GStreamer timestamps.
The payloader at the sender will convert the GStreamer timestamp into an RTP
timestamp using the following formula:

   RTP = ((RT - RT-base) * clock-rate / GST_SECOND) + RTP-offset

  RTP:        the RTP timestamp for the stream. This value is truncated to
              32 bits.
  RT:         the GStreamer running time corresponding to the timestamp of the
              packet to payload
  RT-base:    the GStreamer running time of the first packet encoded
  clock-rate: the clock-rate of the stream
  RTP-offset: a random RTP offset

The RTP timestamp corresponding to RT-base is the clock-base (see caps above). 

In addition to setting an RTP timestamp in the RTP packet, the payloader is also
responsible for putting the GStreamer timestamp on the resulting output buffer.
This timestamp is used for further synchronisation at the sender pipeline, such
as for sending out the packet on the network.

Notice that the absolute timing information is lost; if the sender is sending
multiple streams, the RTP timestamps in the packets do not contain enough
information to synchronize them in the receiver. The receiver can however use
the RTP timestamps to reconstruct the timing of the stream as it was created by
the sender according to the sender's clock.

Because the payloaded packet contains both an RTP timestamp and a GStreamer
timestamp, it is possible for an RTP session manager to derive the relation
between the RTP and GST timestamps. This information is used by a session
manager to create SR reports. The NTP time in the report will contain the
running time converted to NTP time and the corresponding RTP timestamp.

Note that at the sender side, the RTP and GStreamer timestamp both increment at
the same rate, the sender rate. This rate depends on the global pipeline clock
of the sender. 

Some pipelines to illustrate the process:

    gst-launch-1.0 v4l2src ! videoconvert ! avenc_h263p ! rtph263ppay ! udpsink

  v4l2src puts a GStreamer timestamp on the video frames base on the current
  running_time. The encoder encodes and passed the timestamp on. The payloader
  generates an RTP timestamp using the above formula and puts it in the RTP
  packet. It also copies the incoming GStreamer timestamp on the output RTP
  packet. udpsink synchronizes on the gstreamer timestamp before pushing out the
  packet. 


= synchronisation at the receiver

The receiver is responsible for timestamping the received RTP packet with the
running_time of the clock at the time the packet was received. This GStreamer
timestamp reflects the receiver rate and depends on the global pipeline clock of
the receiver. The gstreamer timestamp of the received RTP packet contains a
certain amount of jitter introduced by the network.

The most simple option for the receiver is to depayload the RTP packet and play
it back as soon as possible, this is with the timestamp when it was received
from the network. For the above sender pipeline this would be done with the
following pipeline:

    gst-launch-1.0 udpsrc caps="application/x-rtp, media=(string)video,
      clock-rate=(int)90000, encoding-name=(string)H263-1998" ! rtph263pdepay !
      avdec_h263 ! autovideosink

It is important that the depayloader copies the incoming GStreamer timestamp
directly to the depayloaded output buffer. It should never attempt to perform
any logic with the RTP timestamp, this task is for the jitterbuffer as we will
see next.

The above pipeline does not attempt to deal with reordered packets or network
jitter, which could result in jerky playback in the case of high jitter or
corrupted video in the case of packet loss or reordering. This functionality is
performed by the gstrtpjitterbuffer in GStreamer.

The task of the gstrtpjitterbuffer element is to:

 - deal with reordered packets based on the seqnum
 - calculate the drift between the sender and receiver clocks using the
   GStreamer timestamps (receiver clock rate) and RTP timestamps (sender clock
   rate).

To deal with reordered packet, the jitterbuffer holds on to the received RTP
packets in a queue for a configurable amount of time, called the latency.

The jitterbuffer also eliminates network jitter and then tracks the drift
between the local clock (as expressed in the GStreamer timestamps) and the
remote clock (as expressed in the RTP timestamps). It will remove the jitter
and will apply the drift correction to the GStreamer timestamp before pushing
the buffer downstream. The result is that the depayloader receives a smoothed
GStreamer timestamp on the RTP packet, which is copied to the depayloaded data.

The following pipeline illustrates a receiver with a jitterbuffer.

    gst-launch-1.0 udpsrc caps="application/x-rtp, media=(string)video,
      clock-rate=(int)90000, encoding-name=(string)H263-1998" !
      rtpjitterbuffer latency=100 ! rtph263pdepay !  avdec_h263 ! autovideosink

The latency property on the jitterbuffer controls the amount of delay (in
milliseconds) to apply to the outgoing packets. A higher latency will produce
smoother playback in networks with high jitter but cause a higher latency.
Choosing a good value for the latency is a tradeoff between the quality and
latency. The better the network, the lower the latency can be set.


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-1.0 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-1.0 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-1.0 lines:

  gst-launch-1.0 -v videotestsrc ! videoconvert ! avenc_h263p ! rtph263ppay ! udpsink

   Setting pipeline to PAUSED ...
   /pipeline0/videotestsrc0.src: caps = video/x-raw, format=(string)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-1.0 -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 ! avdec_h263 ! autovideosink

 The receiver now displays an h263 image. Since there is no jitterbuffer in the
 pipeline, frames will be displayed at the time when they are received. This can
 result in jerky playback in the case of high network jitter or corrupted video
 when packets are dropped or reordered.

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

  gst-launch-1.0 -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-1.0
     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 ! autovideosink 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 above pipeline sets sync=false on the audio and video sink which means that
 no synchronisation will be performed in the sinks, they play the data when it
 arrives. If you want to enable synchronisation in the sinks it is highly
 recommended to use a gstrtpjitterbuffer after the udpsrc elements. 
 
 Even when sync is enabled, the two different streams will not play synchronised
 against each other because the receiver does not have enough information to
 perform this task. For this you need to add the rtpbin element in both the
 sender and receiver pipeline and use additional sources and sinks to transmit
 RTCP packets used for inter-stream synchronisation.

 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.

useful
------

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