Top |
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 |
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 |
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 “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