GStreamer RTP-over-QUIC implementation

I would like to announce that I’ve just published an implementation of RTP-over-QUIC as a set of GStreamer plugins. This comprises a set of plugins that enable QUIC transport using ngtcp2 as a backend and expose the QUIC stream interface through GStreamer pads, and a further set of plugins that use the QUIC transport plugins to carry RTP-over-QUIC.

The elements support sending RTP frames on one or multiple logical QUIC streams. The default is for all packets belonging to a given RTP session to be sent on the same QUIC stream. However, it is also possible to start a new QUIC stream for each media frame carried in the RTP session, or even to start a new stream at each media access boundary (e.g. Group of Pictures, GOP) if the pipeline encoder supports it.

If you’d like to check it out, the repositories are here: GitHub - bbc/gst-quic-transport: Core QUIC Transport elements for GStreamer and GitHub - bbc/gst-roq: RTP-over-QUIC elements for GStreamer

So feel free to give them a try and I welcome any and all feedback and look forward to doing some interop with other implementations in the future.

2 Likes

That looks interesting, thanks!

Did you see https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1036 , which is adding another set of QUIC transport elements.

Would the RTP-over-QUIC elements work on top of any kind of QUIC transport elements, or does it require close interaction with the QUIC implementation?

Yes, I was aware of the other elements but they didn’t really satisfy my use case, and I wanted to build something that I could freely experiment with.

My RTP-over-QUIC implementation currently requires close interaction with my quic transport elements, as I wanted the ability to more easily experiment with QUIC stream mapping, however in the future I suppose they could be made more generic.