Core pub/sub transport protocol for Media over QUIC
moq-lite is the core transport layer for Media over QUIC, providing a generic pub/sub protocol built on WebTransport and QUIC.
This crate implements a simplified subset of the IETF MoQ specification, focusing on practical features and deployability. It’s highly recommended to use moq-lite instead of the full IETF standard until at least draft-30.
A collection of broadcasts, produced by one or more sessions.
use moq_lite::Origin;// Create a producer/consumer pairlet origin = Origin::produce();let origin_producer = origin.clone();let origin_consumer = origin.consume();// Publish a broadcast to the originorigin_producer.publish_broadcast("my-broadcast", broadcast.consume());
A collection of groups, delivered out-of-order until expired.
use moq_lite::Track;// Create a tracklet mut track = broadcast.create_track(Track { name: "audio".to_string(), priority: 1, // Higher priority = delivered first})?;// Append a group to the tracklet mut group = track.append_group()?;// Or write a single-frame grouptrack.write_frame(bytes::Bytes::from("data"))?;
A collection of frames, delivered in order until cancelled.
// Create a grouplet mut group = track.append_group()?;// Write multiple framesgroup.write_frame(bytes::Bytes::from("frame1"))?;group.write_frame(bytes::Bytes::from("frame2"))?;// Finish the groupgroup.finish()?;
use moq_lite::Client;// Typically used via moq-native::ClientConfiglet client = moq_native::ClientConfig::default().init()?;let session = client.connect(url).await?;
use moq_lite::Server;// Typically used via moq-native::ServerConfiglet server = moq_native::ServerConfig::default().init()?;let session = server.accept().await?;