GStreamer RTP-layer FEC (Forward Error Correction) plugin

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

GStreamer RTP-layer FEC (Forward Error Correction) plugin

Akon2
Hello everyone!

Withing one project I'v developed GStreamer FEC plugin to boost multimedia apps performance while streaming withing unreliable medium, e.g. WiFi network space. In an unreliable medium there are packet losses, so a stream is produced with redundant packets (generated with Reed-Solomon) those are used to recover original lost packets on a client side. FEC works on RTP layer, so it's payload/protocol irrelevant in common case.

To get more understanding please take a look on typical pipelines for streaming H.264 video:

Sender:
gst-launch-1.0 videotestsrc ! x264enc tune=zerolatency ! rtph264pay ! fecencoder name=fe k=16 r=8 ek=6 er=6 fe.src ! udpsink async=false fe.fec ! udpsink async=false port=5005
 
Receiver:
gst-launch-1.0 -v udpsrc ! .sink_src fecdecoder name=fd ! application/x-rtp ! rtpjitterbuffer latency=200 ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink udpsrc port=5005 ! fd.sink_fec

Here there are two sockets between sender and receiver: SRC + FEC, so redundant packets are simply transmitted out-of-band. There are 50% redundancy and 50% packet losses emulation applied. While non-FEC-aware client becomes completely unusable under this condition, a FEC-aware one recovers all lost packets resulting initial video.

Now I'm considering packing several elementary video and audio streams into MREG-2 transport stream or MP4 container for streaming with FEC in the same manner. From the FEC implementation nature it's desirable:
1. To have all elementary streams units of the same size approximately, or, alternatively, force to a constant bit rate.
2. Multiplex elementary streams units in interleaving mode, i.e. A1 V1 A2 V2 ...
3. Place header information constantly over the stream and under given frequency (like 'fragment-duration'), so a client might connect at any time.
4. Minimize latency whenever it possible for real-time purpose.

How to achieve these things, e.g. for MPEG-2TS and MP4 formats?

Thanks in advance!
Reply | Threaded
Open this post in threaded view
|

Re: GStreamer RTP-layer FEC (Forward Error Correction) plugin

Akon2
I have played a bit with MPEG-2 TS and the question arise - how to hint 'rtpmp2tpay' to use its 'mtu' more smartly, i.e. to cover a whole number of NAL units and be not greater then specified limit (e.g. 300 bytes for WiFi app)?
Reply | Threaded
Open this post in threaded view
|

Re: GStreamer RTP-layer FEC (Forward Error Correction) plugin

nrjnapu
Hi,

I am looking for FEC implementation on top of RTP and would like to know
whether your gstreamer plugin can be shared

Best regards

 



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: GStreamer RTP-layer FEC (Forward Error Correction) plugin

ale ale
Hi all,

I'm looking for FEC implementation too. Can you Akon2 and nrjnapu tell me
the way of building a such project (FEC implementation on gstreamer)? May be
someone can share?



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: GStreamer RTP-layer FEC (Forward Error Correction) plugin

Akon2
Hello,

Unfortunately, it cannot be shared at the moment.



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel