diff --git a/docs/plugins/gst-plugins-good-plugins-docs.sgml b/docs/plugins/gst-plugins-good-plugins-docs.sgml
index 626a23bdeb..660d1ca971 100644
--- a/docs/plugins/gst-plugins-good-plugins-docs.sgml
+++ b/docs/plugins/gst-plugins-good-plugins-docs.sgml
@@ -224,6 +224,8 @@
+
+
@@ -235,11 +237,14 @@
+
+
+
diff --git a/docs/plugins/gst-plugins-good-plugins-sections.txt b/docs/plugins/gst-plugins-good-plugins-sections.txt
index 89de073c3a..97cd2351e7 100644
--- a/docs/plugins/gst-plugins-good-plugins-sections.txt
+++ b/docs/plugins/gst-plugins-good-plugins-sections.txt
@@ -3331,6 +3331,38 @@ GST_TYPE_RTP_QD_M2_DEPAY
gst_rtp_qd_m2_depay_get_type
+
+element-rtpreddec
+rtpreddec
+GstRtpRedDec
+
+GstRtpRedDecClass
+GST_RTP_RED_DEC
+GST_RTP_RED_DEC_CAST
+GST_IS_RTP_RED_DEC
+GST_RTP_RED_DEC_CLASS
+GST_IS_RTP_RED_DEC_CLASS
+GST_TYPE_RTP_RED_DEC
+
+gst_rtp_red_dec_get_type
+
+
+
+element-rtpredenc
+rtpredenc
+GstRtpRedEnc
+
+GstRtpRedEncClass
+GST_RTP_RED_ENC
+GST_RTP_RED_ENC_CAST
+GST_IS_RTP_RED_ENC
+GST_RTP_RED_ENC_CLASS
+GST_IS_RTP_RED_ENC_CLASS
+GST_TYPE_RTP_RED_ENC
+
+gst_rtp_red_enc_get_type
+
+
element-rtprtxreceive
rtprtxreceive
@@ -3473,6 +3505,22 @@ GST_IS_RTP_SSRC_DEMUX_CLASS
GST_TYPE_RTP_SSRC_DEMUX
gst_rtp_ssrc_demux_get_type
+
+
+
+element-rtpstorage
+rtpstorage
+GstRtpStorage
+
+GstRtpStorageClass
+GST_RTP_STORAGE
+GST_RTP_STORAGE_CAST
+GST_IS_RTP_STORAGE
+GST_RTP_STORAGE_CLASS
+GST_IS_RTP_STORAGE_CLASS
+GST_TYPE_RTP_STORAGE
+
+gst_rtp_storage_get_type
@@ -3539,6 +3587,38 @@ GST_TYPE_RTP_THEORA_PAY
gst_rtp_theora_pay_get_type
+
+element-rtpulpfecdec
+rtpulpfecdec
+GstRtpUlpFecDec
+
+GstRtpUlpFecDecClass
+GST_RTP_ULP_FEC_DEC
+GST_RTP_ULP_FEC_DEC_CAST
+GST_IS_RTP_ULP_FEC_DEC
+GST_RTP_ULP_FEC_DEC_CLASS
+GST_IS_RTP_ULP_FEC_DEC_CLASS
+GST_TYPE_RTP_ULP_FEC_DEC
+
+gst_rtp_ulp_fec_dec_get_type
+
+
+
+element-rtpulpfecenc
+rtpulpfecenc
+GstRtpUlpFecEnc
+
+GstRtpUlpFecEncClass
+GST_RTP_ULP_FEC_ENC
+GST_RTP_ULP_FEC_ENC_CAST
+GST_IS_RTP_ULP_FEC_ENC
+GST_RTP_ULP_FEC_ENC_CLASS
+GST_IS_RTP_ULP_FEC_ENC_CLASS
+GST_TYPE_RTP_ULP_FEC_ENC
+
+gst_rtp_ulp_fec_enc_get_type
+
+
element-rtpvp8depay
rtpvp8depay
diff --git a/docs/plugins/gst-plugins-good-plugins.args b/docs/plugins/gst-plugins-good-plugins.args
index 4a124b482f..57e8fcbbb6 100644
--- a/docs/plugins/gst-plugins-good-plugins.args
+++ b/docs/plugins/gst-plugins-good-plugins.args
@@ -24648,3 +24648,203 @@
+
+GstRtpPtDemux::ignored-payload-types
+GstValueArray
+
+rw
+Ignored payload types
+Packets with these payload types will be dropped.
+
+
+
+
+GstRtpUlpFecEnc::multipacket
+gboolean
+
+rwx
+Multipacket
+Apply FEC on multiple packets.
+FALSE
+
+
+
+GstRtpUlpFecEnc::mux-seq
+gboolean
+
+rwx
+Mux seq
+Mux seqnum for media and fec packets in same seqnum space.
+FALSE
+
+
+
+GstRtpUlpFecEnc::percentage
+guint
+<= 100
+rwx
+Percentage
+FEC overhead percentage for the whole stream.
+0
+
+
+
+GstRtpUlpFecEnc::percentage-important
+guint
+<= 100
+rwx
+Percentage important
+FEC overhead percentage for important packets.
+0
+
+
+
+GstRtpUlpFecEnc::protected
+guint
+
+r
+Protected
+Count of protected packets.
+0
+
+
+
+GstRtpUlpFecEnc::pt
+guint
+<= 255
+rwx
+payload type
+The payload type of FEC packets.
+255
+
+
+
+GstRtpUlpFecEnc::ssrc
+guint
+
+rwx
+SSRC
+The SSRC to use on FEC'd packets.
+0
+
+
+
+GstRtpUlpFecDec::pt
+guint
+<= 127
+rw
+pt
+FEC packets payload type.
+0
+
+
+
+GstRtpUlpFecDec::recovered
+guint
+
+r
+recovered
+The number of recovered packets.
+0
+
+
+
+GstRtpUlpFecDec::storage
+GObject*
+
+rw
+RTP storage
+RTP storage.
+
+
+
+
+GstRtpUlpFecDec::unrecovered
+guint
+
+r
+unrecovered
+The number of unrecovered packets.
+0
+
+
+
+GstRtpStorage::internal-storage
+GObject*
+
+r
+Internal storage
+Internal RtpStorage object.
+
+
+
+
+GstRtpStorage::size-time
+guint64
+
+rwx
+Storage size (in ns)
+The amount of data to keep in the storage (in ns, 0-disable).
+0
+
+
+
+GstRtpRedEnc::allow-no-red-blocks
+gboolean
+
+rw
+Allow no redundant blocks
+true - can produce RED packets even without redundant blocks (distance==0) false - RED packets will be produced only if distance>0.
+FALSE
+
+
+
+GstRtpRedEnc::distance
+guint
+
+rw
+RED distance
+Tells which media packet to use as a redundant block (0 - no redundant blocks, 1 to use previous packet, 2 to use the packet before previous, etc.).
+0
+
+
+
+GstRtpRedEnc::pt
+gint
+[0,127]
+rw
+payload type
+Payload type FEC packets (-1 disable).
+0
+
+
+
+GstRtpRedEnc::sent
+guint
+
+r
+Sent
+Count of sent packets.
+0
+
+
+
+GstRtpRedDec::pt
+gint
+[G_MAXULONG,127]
+rw
+payload type
+Payload type FEC packets.
+-1
+
+
+
+GstRtpRedDec::received
+guint
+
+r
+Received
+Count of received packets.
+0
+
+
diff --git a/docs/plugins/gst-plugins-good-plugins.hierarchy b/docs/plugins/gst-plugins-good-plugins.hierarchy
index 9a43e0fd8e..1f947d4517 100644
--- a/docs/plugins/gst-plugins-good-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-good-plugins.hierarchy
@@ -289,11 +289,16 @@ GObject
GstRndBufferSize
GstRtpJitterBuffer
GstRtpPtDemux
+ GstRtpRedDec
+ GstRtpRedEnc
GstRtpRtxReceive
GstRtpRtxSend
GstRtpSession
GstRtpSsrcDemux
+ GstRtpStorage
GstRtpStreamPay
+ GstRtpUlpFecDec
+ GstRtpUlpFecEnc
GstSMPTE
GstShapeWipe
GstTagDemux
diff --git a/docs/plugins/gst-plugins-good-plugins.signals b/docs/plugins/gst-plugins-good-plugins.signals
index 2882331ab2..82742a5d16 100644
--- a/docs/plugins/gst-plugins-good-plugins.signals
+++ b/docs/plugins/gst-plugins-good-plugins.signals
@@ -382,6 +382,39 @@ GstRtpBin *gstrtpbin
guint arg1
+
+GstRtpBin::get-internal-storage
+GObject*
+la
+GstRtpBin *gstrtpbin
+guint arg1
+
+
+
+GstRtpBin::new-storage
+void
+l
+GstRtpBin *gstrtpbin
+GstElement *arg1
+guint arg2
+
+
+
+GstRtpBin::request-fec-decoder
+GstElement*
+l
+GstRtpBin *gstrtpbin
+guint arg1
+
+
+
+GstRtpBin::request-fec-encoder
+GstElement*
+l
+GstRtpBin *gstrtpbin
+guint arg1
+
+
GstRtpJitterBuffer::clear-pt-map
void
diff --git a/docs/plugins/inspect/plugin-rtp.xml b/docs/plugins/inspect/plugin-rtp.xml
index 9186cd41af..6ebba8c858 100644
--- a/docs/plugins/inspect/plugin-rtp.xml
+++ b/docs/plugins/inspect/plugin-rtp.xml
@@ -1458,6 +1458,48 @@
+
+ rtpreddec
+ Redundant Audio Data (RED) Decoder
+ Codec/Depayloader/Network/RTP
+ Decode Redundant Audio Data (RED)
+ Hani Mustafa <hani@pexip.com>, Mikhail Fludkov <misha@pexip.com>
+
+
+ sink
+ sink
+ always
+ application/x-rtp
+
+
+ src
+ source
+ always
+ application/x-rtp
+
+
+
+
+ rtpredenc
+ Redundant Audio Data (RED) Encoder
+ Codec/Payloader/Network/RTP
+ Encode Redundant Audio Data (RED)
+ Hani Mustafa <hani@pexip.com>, Mikhail Fludkov <misha@pexip.com>
+
+
+ sink
+ sink
+ always
+ application/x-rtp
+
+
+ src
+ source
+ always
+ application/x-rtp
+
+
+
rtpsbcdepay
RTP SBC audio depayloader
@@ -1584,6 +1626,27 @@
+
+ rtpstorage
+ RTP storage
+ Analyzer/RTP
+ Helper element for various purposes (ex. recovering from packet loss using RED/FEC). Saves given number of RTP packets. Should be instantiated before jitterbuffer
+ Mikhail Fludkov <misha@pexip.com>
+
+
+ sink
+ sink
+ always
+ application/x-rtp
+
+
+ src
+ source
+ always
+ application/x-rtp
+
+
+
rtpstreamdepay
RTP Stream Depayloading
@@ -1689,6 +1752,48 @@
+
+ rtpulpfecdec
+ RTP FEC Decoder
+ Codec/Depayloader/Network/RTP
+ Decodes RTP FEC (RFC5109)
+ Mikhail Fludkov <misha@pexip.com>
+
+
+ sink
+ sink
+ always
+ application/x-rtp
+
+
+ src
+ source
+ always
+ application/x-rtp
+
+
+
+
+ rtpulpfecenc
+ RTP FEC Encoder
+ Codec/Payloader/Network/RTP
+ Encodes RTP FEC (RFC5109)
+ Mikhail Fludkov <misha@pexip.com>
+
+
+ sink
+ sink
+ always
+ application/x-rtp
+
+
+ src
+ source
+ always
+ application/x-rtp
+
+
+
rtpvorbisdepay
RTP Vorbis depayloader
diff --git a/gst/rtp/gstrtpreddec.c b/gst/rtp/gstrtpreddec.c
index 6a2297254e..488a9350c3 100644
--- a/gst/rtp/gstrtpreddec.c
+++ b/gst/rtp/gstrtpreddec.c
@@ -18,6 +18,16 @@
* Author: Mikhail Fludkov
*/
+/**
+ * SECTION:element-rtpreddec
+ * @short_description: RTP Redundant Audio Data (RED) decoder
+ * @title: rtpreddec
+ *
+ * Decode Redundant Audio Data (RED) as per RFC 2198.
+ *
+ * Since: 1.14
+ */
+
#include
#include "rtpredcommon.h"
diff --git a/gst/rtp/gstrtpredenc.c b/gst/rtp/gstrtpredenc.c
index 59b9bc2439..b3068bc8bc 100644
--- a/gst/rtp/gstrtpredenc.c
+++ b/gst/rtp/gstrtpredenc.c
@@ -18,6 +18,16 @@
* Author: Mikhail Fludkov
*/
+/**
+ * SECTION:element-rtpredenc
+ * @short_description: RTP Redundant Audio Data (RED) encoder
+ * @title: rtpredenc
+ *
+ * Encode Redundant Audio Data (RED) as per RFC 2198.
+ *
+ * Since: 1.14
+ */
+
#include
#include
#include
diff --git a/gst/rtp/gstrtpstorage.c b/gst/rtp/gstrtpstorage.c
index d35b3def6e..9073808405 100644
--- a/gst/rtp/gstrtpstorage.c
+++ b/gst/rtp/gstrtpstorage.c
@@ -18,6 +18,20 @@
* Author: Mikhail Fludkov
*/
+/**
+ * SECTION:element-rtpstorage
+ * @short_description: RTP storage for forward error correction (FEC) in rtpbin
+ * @title: rtpstorage
+ *
+ * Helper element for storing packets to aid later packet recovery from packet
+ * loss using RED/FEC (Forward Error Correction).
+ *
+ * This element is used internally by rtpbin and is usually created
+ * automatically.
+ *
+ * Since: 1.14
+ */
+
#include "gstrtpstorage.h"
static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
diff --git a/gst/rtp/gstrtpulpfecdec.c b/gst/rtp/gstrtpulpfecdec.c
index c9be119657..28a0a69148 100644
--- a/gst/rtp/gstrtpulpfecdec.c
+++ b/gst/rtp/gstrtpulpfecdec.c
@@ -18,6 +18,17 @@
* Author: Mikhail Fludkov
*/
+/**
+ * SECTION:element-rtpulpfecdec
+ * @short_description: Generic RTP Forward Error Correction (FEC) decoder
+ * @title: rtpulpfecdec
+ *
+ * Generic Forward Error Correction (FEC) decoder for Uneven Level
+ * Protection (ULP) as described in RFC 5109.
+ *
+ * Since: 1.14
+ */
+
#include
#include
diff --git a/gst/rtp/gstrtpulpfecenc.c b/gst/rtp/gstrtpulpfecenc.c
index 43a735d28a..aa8ac7b420 100644
--- a/gst/rtp/gstrtpulpfecenc.c
+++ b/gst/rtp/gstrtpulpfecenc.c
@@ -18,6 +18,17 @@
* Author: Mikhail Fludkov
*/
+/**
+ * SECTION:element-rtpulpfecenc
+ * @short_description: Generic RTP Forward Error Correction (FEC) encoder
+ * @title: rtpulpfecenc
+ *
+ * Generic Forward Error Correction (FEC) encoder using Uneven Level
+ * Protection (ULP) as described in RFC 5109.
+ *
+ * Since: 1.14
+ */
+
#include
#include
#include