# 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 rtpstorage element and attempt to recover packets declared lost through custom 'GstRTPPacketLost' events, usually emitted by rtpjitterbuffer.

If no storage is provided using the storage 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 pt property.

When using rtpbin, this element should be inserted through the 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

See also: rtpulpfecenc, rtpbin, rtpstorage

## 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

### passthrough

    “passthrough” gboolean

Whether to push data through without any modification. If passthrough is enabled, then no packets will ever be recovered.

Flags : Read / Write

Default value : false

Since : 1.22

### 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