rtpulpfecenc

rtpulpfecenc — Generic RTP Forward Error Correction (FEC) encoder

Properties

gboolean multipacket Read / Write / Construct
gboolean mux-seq Read / Write / Construct
guint percentage Read / Write / Construct
guint percentage-important Read / Write / Construct
guint protected Read
guint pt Read / Write / Construct
guint ssrc Read / Write / Construct

Types and Values

Object Hierarchy

    GObject
    ╰── GInitiallyUnowned
        ╰── GstObject
            ╰── GstElement
                ╰── GstRtpUlpFecEnc

Description

Generic Forward Error Correction (FEC) encoder using Uneven Level Protection (ULP) as described in RFC 5109.

This element will insert protection packets in any RTP stream, which can then be used on the receiving side to recover lost packets.

This element rewrites packets' seqnums, which means that when combined with retransmission elements such as GstRtpRtxSend, it *must* be placed upstream of those, otherwise retransmission requests will request incorrect seqnums.

A payload type for the protection packets *must* be specified, different from the payload type of the protected packets, with the GstRtpUlpFecEnc:pt property.

The marker bit of RTP packets is used to determine sets of packets to protect as a unit, in order to modulate the level of protection, this behaviour can be disabled with GstRtpUlpFecEnc:multipacket, but should be left enabled for video streams.

The level of protection can be configured with two properties, “percentage” and “percentage-important”, the element will determine which percentage to use for a given set of packets based on the presence of the GST_BUFFER_FLAG_NON_DROPPABLE flag, upstream payloaders are expected to set this flag on "important" packets such as those making up a keyframe.

The percentage is expressed not in terms of bytes, but in terms of packets, this for implementation convenience. The drawback with this approach is that when using a percentage different from 100 %, and a low bitrate, entire frames may be contained in a single packet, leading to some packets not being protected, thus lowering the overall recovery rate on the receiving side.

When using GstRtpBin, this element should be inserted through the “request-fec-encoder” signal.

Example programs using this element can be found at https://github.com/sdroege/gstreamer-rs/blob/master/examples/src/bin/rtpfecserver.rs and https://github.com/sdroege/gstreamer-rs/blob/master/examples/src/bin/rtpfecclient.rs.

See also: GstRtpUlpFecDec, GstRtpBin

Synopsis

Element Information

plugin

rtp

author

Mikhail Fludkov <misha@pexip.com>

class

Codec/Payloader/Network/RTP

Element Pads

name

sink

direction

sink

presence

always

details

application/x-rtp

name

src

direction

source

presence

always

details

application/x-rtp

Functions

Types and Values

struct GstRtpUlpFecEnc

struct GstRtpUlpFecEnc;

Property Details

The “multipacket” property

  “multipacket”              gboolean

Apply FEC on multiple packets.

Flags: Read / Write / Construct

Default value: TRUE


The “mux-seq” property

  “mux-seq”                  gboolean

Mux seqnum for media and fec packets in same seqnum space.

Flags: Read / Write / Construct

Default value: FALSE


The “percentage” property

  “percentage”               guint

FEC overhead percentage for the whole stream.

Flags: Read / Write / Construct

Allowed values: <= 100

Default value: 0


The “percentage-important” property

  “percentage-important”     guint

FEC overhead percentage for important packets.

Flags: Read / Write / Construct

Allowed values: <= 100

Default value: 0


The “protected” property

  “protected”                guint

Count of protected packets.

Flags: Read

Default value: 0


The “pt” property

  “pt”                       guint

The payload type of FEC packets.

Flags: Read / Write / Construct

Allowed values: <= 255

Default value: 255


The “ssrc” property

  “ssrc”                     guint

The SSRC to use on FEC'd packets.

Flags: Read / Write / Construct

Default value: 0