Skip to main content
MoQ

Media over QUIC

Proposed

Media over QUIC (MoQ) is an IETF protocol (draft-ietf-moq-transport) for live media streaming built on QUIC. It aims to replace the fragmented RTMP-ingest + HLS/DASH-delivery + WebRTC-for-real-time stack with a single publish-subscribe protocol that delivers sub-500ms latency at CDN scale. MoQ multiplexes live and on-demand content over QUIC streams with publisher-defined object priorities.

MoQQUICLive StreamingIETFWebTransportCDN2022

In one line

Media over QUIC (IETF draft-ietf-moq-transport, active 2024–2026) is a pub/sub media protocol over QUIC (WebTransport in browsers). Publishers send Objects organized in Groups and Tracks to a Relay infrastructure. Subscribers request Tracks with a priority and latency preference. QUIC stream prioritization enables sub-500ms live broadcast at CDN scale. Goals: replace RTMP ingest, HLS delivery, and WebRTC for real-time video with a single protocol.

Quick Reference

FieldSizeDescription
TransportQUIC / WebTransportNative clients use raw QUIC. Browser clients use WebTransport (requires QUIC/HTTP/3). Both share the same MoQ application protocol on top.
Object modelTrack > Group > ObjectTrack: a named content stream (e.g., 'video/1080p', 'audio/aac'). Group: a group of related objects (e.g., one GOP/segment). Object: an individual media unit (e.g., one video frame or audio packet).
RelayCDN-operatedMoQ relays (operated by CDNs) route content from publishers to subscribers at scale. Unlike SFUs in WebRTC, MoQ relays are generic – they do not decode media.
Priorityper objectPublishers assign delivery priority to each object. QUIC stream scheduling delivers high-priority objects first. This enables I-frame prioritization for live video.
Latency modesreal-time to VODSubscribers choose a delivery preference: real-time (drop old groups, minimize latency) to default (full delivery, allow buffering). Same infrastructure for live and VOD.
SUBSCRIBETrack requestSubscribers send SUBSCRIBE messages for specific Tracks. The relay routes Objects for those Tracks from the publisher through the relay network.
ANNOUNCETrack advertisementPublishers send ANNOUNCE to tell relays which Track Namespaces they can serve. Enables dynamic content discovery without pre-configuration.

Key Characteristics

Sub-500ms at CDN scale

MoQ's QUIC stream priority scheduling delivers high-priority frames first. I-frames get priority over B-frames. Live sports at broadcast quality with YouTube-level scale.

Single protocol for all latencies

Same MoQ infrastructure serves real-time interactive video (sub-500ms), near-real-time live (2–10s), and VOD. No separate RTMP/HLS/WebRTC stacks.

CDN relay compatible

MoQ relays are generic packet forwarders – they route Objects without decoding media. Existing CDN infrastructure can add MoQ relay capability without media processing.

Pre-RFC, active work

MoQ is still an active IETF draft. The API and wire format may change before RFC publication. Production deployment is experimental as of 2026.

Message Format

Request
http
// MoQ session establishment over WebTransport
const transport = new WebTransport('https://relay.example.com/moq');
await transport.ready;

// MoQ control stream (bidirectional stream 0)
// CLIENT_SETUP message:
//   [MESSAGE_TYPE=0x20][VERSION=0x01][NUM_PARAMS=1]
//   [PARAM_PATH=/live/event123]

// ANNOUNCE: publisher tells relay about available tracks
// [MESSAGE_TYPE=0x0E][TRACK_NAMESPACE=live/event123]
//   [TRACK_NAME=video/1080p]

// SUBSCRIBE: subscriber requests a track
// [MESSAGE_TYPE=0x03][SUBSCRIBE_ID=1]
//   [TRACK_NAMESPACE=live/event123]
//   [TRACK_NAME=video/1080p]
//   [FILTER_TYPE=LATEST_GROUP]
//   [PRIORITY=128]
Response
http
// Object delivery (QUIC streams)
// Each MoQ Object arrives on its own QUIC stream:
// STREAM_HEADER_SUBGROUP message:
//   [GROUP_ID=1001][SUBGROUP_ID=0][PUBLISHER_PRIORITY=128]
// OBJECT:
//   [OBJECT_ID=0][OBJECT_PAYLOAD_LENGTH=4096]
//   [H.264 I-frame bytes...]

// SUBSCRIBE_OK from relay:
// [MESSAGE_TYPE=0x04][SUBSCRIBE_ID=1]
//   [EXPIRES=0] // no expiry
//   [CONTENT_EXISTS=1]
//   [LARGEST_GROUP=1000][LARGEST_OBJECT=5]

// Latency preference (subscriber sets at SUBSCRIBE time):
// FILTER_TYPE = LATEST_OBJECT: minimize latency, may skip objects
// FILTER_TYPE = LATEST_GROUP: skip to latest group (I-frame)
// FILTER_TYPE = ABSOLUTE_START: start from specific group/object

Implementations

linuxsince moq-rs (Rust, experimental). Meta's moq-go. Warp streaming demo (Quinn QUIC). Cloudflare experimental relay.available
macossince Same as Linux. Safari 26.4 WebTransport enables browser MoQ clients.available
windowssince moq-rs, moq-go. Chrome/Edge WebTransport for browser clients.available
iossince Safari iOS 26.4 WebTransport. Experimental MoQ players via WebTransport API.available
androidsince Chrome Android WebTransport. Experimental MoQ players.available