Demos

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

MoQ Boy
MoQ Boy

Multiplayer (anarchy) Game Boy emulation on a remote server, using MoQ tracks for everything. Emulation and encoding only run when at least one viewer is watching.

BBB
B I G B U C K B U N N Y

Watch a “live” broadcast of everybody’s favorite rodent friend. The video player is available as a (tree-shakable) Javascript library or <moq-watch> web component.

hang.live
hang.live

A full-blown conferencing app built entirely on MoQ. Includes custom WebGL rendering, WebAudio panning, markdown chat, dank memes, you name it. You’ll need a friend though, or at least another tab (I won’t judge).

Publish
Publish

Go live! Share your camera, microphone, or screen with the world. Just keep in mind that all test streams are public… please don’t do anything stupid.

Build Your Own

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

Everything under /anon is public and ephemeral. Pick a unique broadcast name, do not publish anything private, and stop the command when you’re done.

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 --client-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_every_frame - \
  | moq --client-connect https://cdn.moq.pro/anon \
      --broadcast YOUR_NAME.hang import fmp4

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

moq --client-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?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