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?