Reliable Network Protocol

I have some data sources:
H.264 stream in MPEGTS over UDP
Other arbitrary data streams over UDP

I’d like to build a network solution as follows:
Sender/receiver applications to leverage more reliable FEC/RIST/SRT protocols to transmit these streams across a high latency and lossy IP network (300ms RTT, ~2% packet loss). I’d like to create a sender/receiver app where the sender ingests the UDP data, convert to reliable protocol to receiver, and the receiver outputs back to UDP in the original format to the downstream clients. I want the source MPEGTS and UDP payloads to be unmodified while flowing through applications.

I’m most interested in RIST and RaptorQ FEC solutions (there appears to be plugin raptorq and also fec encoding built into rtpbin). The RaptorQ appears to take RTP as input.

Looking for help in how I can build a pipeline for this. Here’s my pseudo pipeline for raptor:

udpsrc → queue → UDPtoRTP? → raptorqenc/rtpbin encode=raptorqenc → jitterbuffer → udpsink (for data) + udpsink (for fec data)

udpsrc (for data) + udpsrc (for fec data) → queue → raptorqdec/rtpbin encode=raptorqdec → RTPtoUDP? → udpsink (to data clients)

Some direct questions:
Do I have to convert my UDP to RTP in sender and then back from RTP to UDP on receiver end?
Any recommendations on the pipeline approach?

SRT might actually be the simplest approach for your use case I think.

Yes, I’ve had some success with SRT and RIST but they add a fair amount of latency. Looking to explore FEC options as I have bandwidth to spare, just some intermittent packet loss.

While searching for some solutions I came accross this which seems to fit your requirements :

thanks for that recommendation. Is there not a reasonable path to solve this with gstreamer? That UDPstreamer does a reed solomon FEC. Curious to experiment with RaptorQ and just looking for some tips on how to build the pipeline.