Media over QUIC

Robotics

Robots have a lot of cameras. They’re basically cameras with legs or wheels or pinchers or spinning blades or you get the idea.

Teleoperation is becoming less and less relevant, but something still needs to monitor the little guys. A human, a fleet dashboard, an AI model looking for trouble, and/or an archive for the inevitable post-mortem.

Now imagine operating on the worst networks, or in the middle of the ocean, with no fear.

nine cameras on a boat

Arr, there be a kraken on the starboard bow.

Pull, not Push

Existing contribution protocols (ex. WebRTC, SRT, RTMP) are push-based. The robot constantly transmits everything to a server, watched or not. Not great when you’ve got 9 cameras and StarLink is expensive.

MoQ is pull-based. Each camera is a broadcast, split into tracks like 1080p, 360p, audio and telemetry. Note that last one; MoQ is not just for Media, but any live data. The benefit of pull is that nothing is transmitted until somebody subscribes to a track.

Imagine an AI model that only subscribes to 360p from each camera. If it spots a kraken, then it subscribes to the 1080p track from that camera. Camera 7 doesn’t touch the uplink until somebody cares about camera 7.

Shit Networks

Robots tend to be somewhere with a terrible network: cellular, satellite, mesh radio, or nothing at all. Your bandwidth will fluctuate, and something has to give.

You decide what gives. Every subscription has a priority, and they all cooperate over one QUIC connection. Controls before audio before telemetry before the kraken cam before the rest of the cameras. When the link degrades, the least important stuff waits.

And it waits, it doesn’t disappear. Real-time RTP stacks like WebRTC give up on a frame after a short deadline, and it’s gone forever. MoQ sends the newest frames first and keeps the old ones in RAM, up to a TTL.

Each subscriber decides how long it’s willing to wait:

The result is a lossy live feed AND a pristine VOD from the same stream, as long as the link recovers before the recorder’s deadline.

Realtime vs Backfill

If I ever own a racing team, it’s going to be called The Backfill Boyes

Bonded Pairs

Near the coast? Use cellular and satellite.

QUIC supports path migration, so you can switch from WiFi to cellular to satellite without dropping the connection. There’s also a multi-path extension that uses multiple paths at the same time.

Or go up a layer and open multiple MoQ connections: P2P via iroh, a self-hosted relay, a public CDN. The robot announces its broadcasts on all of them, and every subscription takes the best available path. Idle connections cost nothing, because nothing flows until somebody subscribes.

bonded pairs

Like kittens, these pairs are bonded.

Fan Out

If 100 viewers subscribe to the same track, moq-relay merges them into a single upstream subscription. The robot serves at most one copy of each track, no matter how many people are watching.

Relays connect to each other and form a cluster, handling discovery, routing, and failover. Self-host a relay on the robot or the base station to keep everything on your network. Then cluster it with a public CDN like moq.pro or Cloudflare when the whole world wants to watch.

relay fanout

One uplink from the boat, any number of viewers.

Not Just Media

There’s nothing special about media. It’s just timestamped, delta-encoded data, and so is everything else a robot produces.

Stamp it all with the same clock and send it over the same connection, so you can put humpty back together on the other side. WebRTC botches this: data channels have their own congestion control that fights the media instead of cooperating with it.

Controls work the same way, just backwards. The operator publishes a controls track, and the robot subscribes to it. Lockout, handoff, or anarchy is your application’s call, not the relay’s. The MoQ Boy demo does exactly this, with a GameBoy standing in for the robot.

MoQ Boy

weapon of mass destruction?

In Production

Autonomous boats

Saronic

MoQ is the primary video system across its autonomous vessels. Transmits multiple cameras/qualities over Starlink.

Teleoperation

Evolve Robotics

Using MoQ extensively for VR teleoperation. Point clouds, controls, the whole works, all transmitted over MoQ.

Drones

REDACTED

A major government contractor flying drones around with MoQ. That's all we're legally allowed to say.

Drones

REDACTED

A defense contractor flying drones across international borders with Starlink. The drone controls are also transmitted via MoQ.

Yours?

That’s only the companies willing to tell me they’re using the moq.dev libraries. Running MoQ on something that moves? Tell us, we’d love to brag about it. Or don’t, and we’ll add another black bar.

Want the long version? Read On a Boat and the Cars 2 post.