Media over QUIC

Demos

Click on any of them. That’s what they’re here for. Everything is open source!

Build Your Own

Want something you can run from a terminal? These copy-paste examples use the same MoQ stack as the browser demos.

CLI

The moq CLI imports and exports common media containers over MoQ. Install it with Homebrew or Cargo:

# macOS
brew install moq-dev/tap/moq

# Any platform with Rust
cargo install moq-cli

Then pull the always-on Big Buck Bunny broadcast out as fragmented MP4 and pipe it directly into ffplay:

moq --connect https://cdn.moq.pro/demo \
  --broadcast bbb.hang export fmp4 \
  | ffplay -

That’s the whole loop: moq handles the live transport and media tracks, while FFmpeg handles decoding and playback.

FFmpeg

Publish a generated video and audio test pattern. Replace YOUR_NAME with something unique so you don’t fight another publisher for the same broadcast.

ffmpeg -re \
  -f lavfi -i testsrc=size=1280x720:rate=30 \
  -f lavfi -i sine=frequency=440 \
  -c:v libx264 -preset veryfast -tune zerolatency -g 60 \
  -c:a aac \
  -f mp4 \
  -movflags cmaf+separate_moof+delay_moov+skip_trailer -frag_duration 1000 - \
  | moq --connect https://cdn.moq.pro/anon \
      --broadcast YOUR_NAME.hang import fmp4

While it is running, open /watch?project=anon&name=YOUR_NAME.hang on this site, or play it in another terminal:

moq --connect https://cdn.moq.pro/anon \
  --broadcast YOUR_NAME.hang export fmp4 \
  | ffplay -

Want a real camera instead? Replace the two generated inputs above with the input for your platform:

# macOS: first camera + first microphone
ffmpeg -f avfoundation -framerate 30 -i "0:0" ...

# Linux: first V4L2 camera + default ALSA input
ffmpeg -f v4l2 -framerate 30 -i /dev/video0 -f alsa -i default ...

# Windows: replace these names with devices from `ffmpeg -list_devices true -f dshow -i dummy`
ffmpeg -f dshow -i video="Integrated Camera":audio="Microphone" ...

FFmpeg device names vary, so use its device-list command before assuming the defaults are correct.

GStreamer

The moq-gst plugin provides two normal GStreamer elements:

The quickest install is Nix, which bundles the plugin with GStreamer and the common codec plugins:

nix shell github:moq-dev/moq#moq-gst --command gst-inspect-1.0 moq

Watch the public demo, explicitly connecting both the video and audio pads:

nix shell github:moq-dev/moq#moq-gst --command gst-launch-1.0 -v -e \
  moqsrc name=src url=https://cdn.moq.pro/demo broadcast=bbb.hang \
  src.video_0 ! queue ! decodebin3 ! videoconvert ! autovideosink \
  src.audio_0 ! queue ! decodebin3 ! audioconvert ! autoaudiosink

Or publish a live test pattern to your own public broadcast:

nix shell github:moq-dev/moq#moq-gst --command gst-launch-1.0 -v -e \
  videotestsrc is-live=true ! videoconvert \
    ! x264enc tune=zerolatency ! h264parse ! mux.sink_0 \
  audiotestsrc is-live=true ! audioconvert \
    ! avenc_aac ! aacparse ! mux.sink_1 \
  moqsink name=mux url=https://cdn.moq.pro/anon broadcast=YOUR_NAME.hang

Open /watch?project=anon&name=YOUR_NAME.hang while the pipeline is running. For a webcam or screen share, swap videotestsrc for your platform’s source element such as avfvideosrc, v4l2src, ximagesrc, or d3d11screencapturesrc.

Next Steps