The MoQ working group met three times at IETF 126 in Vienna. Alan Frindell landed 72 pull requests since IETF 125, Location Filters and Top N Tracks moved toward the base transport draft, Secure Objects was proposed for working group last call, management and diagnostics were spun into a new document — and the interop runner posted a 131-pass / 208-fail scorecard against draft-18. Here is what actually happened and what it means for implementers.
WebRTC and MoQT are both low-latency, but they solve differently shaped problems. WebRTC is built for real-time conversation between a few peers; MoQT is built to distribute a live stream to many subscribers at scale. This post compares their topologies (peer/SFU vs relay tree), latency profiles, and fan-out economics — and gives a clear decision framework for which to reach for, including the hybrid pattern where you use both.
HLS and DASH built the modern streaming stack, but their latency floor is structural — it comes from chopping media into segments and buffering them over TCP. This post explains where those seconds actually go, how Low-Latency HLS and chunked-CMAF DASH claw some back, and how MoQT's object-over-QUIC model gets to sub-second delivery while keeping CDN-scale fan-out — plus a realistic migration path and when HLS/DASH is still the right call.
A walkthrough of the wire-format and semantic changes in draft-ietf-moq-transport-19 — Range Filters, the Request ID removal from GOAWAY, GROUP_ORDER moving to SUBSCRIBE_TRACKS, PUBLISH_BLOCKED becoming PUBLISH_SKIPPED, multiple subscriptions per track, MAX_REQUEST_UPDATES, and more.
MoQT is a relay-based protocol — a relay is an entity that is both a publisher and a subscriber. This post explains what relays actually do: aggregate many downstream subscriptions into one upstream request, cache immutable objects to serve FETCH and late joiners, re-run the scheduler per subscriber while forwarding publisher priority untouched, propagate namespaces, enforce authorization, prevent loops, and drain gracefully with GOAWAY and REDIRECT.
When a MoQT sender has more data ready than bandwidth to send it, something has to choose the order. This post explains the two priority fields (publisher and subscriber), group order, and the scheduling hierarchy that turns them into an actual send order — plus delivery timeouts, the drop-vs-deliver decision, ties, and the non-monotonic-delivery edge cases the working group is still arguing about.
A SUBSCRIBE in MoQT is not a GET. It's a standing request with a filter, a forwarding switch, a priority, and a lifecycle that can be updated mid-flight. This post walks the full subscription model — the four filter types (Largest Object, Next Group Start, AbsoluteStart, AbsoluteRange), forward state, what SUBSCRIBE_OK tells you, how to narrow a subscription with REQUEST_UPDATE, and how subscriptions end.
A walkthrough of the wire-format and semantic changes introduced in draft-ietf-moq-transport-18 — required-request-id removal, the SUBSCRIBE_NAMESPACE / SUBSCRIBE_TRACKS split, REDIRECT, GOAWAY on request streams, split delivery timeouts, FETCH delta encoding, and more.
MoQT organizes data into tracks, groups, subgroups, and objects. Each level solves a specific problem — join points, priority, head-of-line avoidance. This post explains the hierarchy through the use cases the IETF MoQ working group designed it around: video GOPs, SVC temporal layers, simulcast, audio, catalogs, chat, logging, and more.
A factual walkthrough of how the MoQT (Media over QUIC Transport) wire protocol changed across 18 IETF drafts over nearly three years — covering message framing, session establishment, identity and addressing, the publisher-subscriber model, and data stream encoding.
A step-by-step guide to diagnosing Media over QUIC Transport player issues using browser DevTools. Learn how to trace subscription failures, stalled playback, missing objects, and media detection problems in MoQT-based video players.