rtpulpfecdec
Generic Forward Error Correction (FEC) decoder for Uneven Level Protection (ULP) as described in RFC 5109.
It differs from the RFC in one important way, it multiplexes the FEC packets in the same sequence number as media packets. This is to be compatible with libwebrtc as using in Google Chrome and with Microsoft Lync / Skype for Business.
This element will work in combination with an upstream element and attempt to recover packets declared lost through custom 'GstRTPPacketLost' events, usually emitted by GstRtpJitterBuffer.
If no storage is provided using the property, it will try to get it from an element upstream.
Additionally, the payload types of the protection packets must be provided to this element via its property.
When using GstRtpBin, this element should be inserted through the GstRtpBin::request-fec-decoder signal.
Example pipeline
gst-launch-1.0 udpsrc port=8888 caps="application/x-rtp, payload=96, clock-rate=90000" ! rtpstorage size-time=220000000 ! rtpssrcdemux ! application/x-rtp, payload=96, clock-rate=90000, media=video, encoding-name=H264 ! rtpjitterbuffer do-lost=1 latency=200 ! rtpulpfecdec pt=122 ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink
This example will receive a stream with FEC and try to reconstruct the packets.
Example programs are available at https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/blob/master/examples/src/bin/rtpfecserver.rs and https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/blob/master/examples/src/bin/rtpfecclient.rs
Hierarchy
GObject ╰──GInitiallyUnowned ╰──GstObject ╰──GstElement ╰──rtpulpfecdec
Factory details
Authors: – Mikhail Fludkov
Classification: – Codec/Depayloader/Network/RTP
Rank – none
Plugin – rtp
Package – GStreamer Good Plug-ins
Pad Templates
sink
application/x-rtp:
Presence – always
Direction – sink
Object type – GstPad
src
application/x-rtp:
Presence – always
Direction – src
Object type – GstPad
Properties
pt
“pt” guint
FEC packets payload type
Flags : Read / Write
Default value : 0
recovered
“recovered” guint
The number of recovered packets
Flags : Read
Default value : 0
storage
“storage” GObject*
RTP storage
Flags : Read / Write
unrecovered
“unrecovered” guint
The number of unrecovered packets
Flags : Read
Default value : 0
The results of the search are