Skip to content

Draft: net/quinn: Add Media over QUIC subscriber

Sanchayan Maity requested to merge SanchayanMaity/gst-plugins-rs:quinn-moq into main

This adds a moqdemux element which acts as a MoQ subscriber. With quinnquicsrc (requires !1634 (merged)) upstream to moqdemux, we can receive MoQ tracks via QUIC. With !1867 (merged) and !1966, we can receive MoQ tracks via WebTransport with quinnwtclientsrc upstream to moqdemux.

Tested with moq-rs for MoQ draft version 05. moq-rs publisher example only sends two tracks packaged in CMAF as of now, which is what has been tested. We primarily use the type definitions and serializing/deserializing support of those types from moq-rs. MoQ messages on bidirectional stream and QUIC transport itself is completely handled within GStreamer. We do not rely on moq-rs in any way for this.

To test with moxygen we will need Low Overhead Container de-packetizer (yet to be implemented).

Testing with vanilla QUIC, needs a small change in moq-rs/dev/pub. Scheme needs to be changed to moqt to use vanilla QUIC. MoQ specification supports both WebTransport and QUIC. No change needed for WebTransport.

SCHEME="${SCHEME:-moqt}"

Run the MoQ relay and publisher as below in two separate terminals.

RUST_LOG=moq_relay=trace dev/relay
RUST_LOG=moq_pub=trace dev/pub

For testing with QUIC, run the example code as

GST_PLUGIN_PATH=target/debug cargo run -p gst-plugin-quinn --example moq_sub

For testing with WebTransport, run the example code as

GST_PLUGIN_PATH=target/debug cargo run -p gst-plugin-quinn --example moq_sub -- --webtransport

MoQ specification is not finalized and is still undergoing changes. This is an experimental implementation as per the current state of the specification and will keep changing till the specification is finalized.

Edited by Sanchayan Maity

Merge request reports

Loading