Wall-Clock Synchronized MOQ Streaming Test Service

Implements draft-14 and draft-16 of the MOQ Transport protocol with automatic version negotiation, MSF v0 (draft-ietf-moq-msf-00), and CMSF v0 (draft-ietf-moq-cmsf-00). Streams synchronized multi-bitrate video and audio tracks.

⚠️ Work in Progress This service implements a subset of the evolving MOQ specifications. Check the GitHub repository for the latest development status and supported features.
πŸš€ MOQ Transport draft-14 & draft-16
🎬 MSF/CMSF v0
πŸ”„ Auto Version Negotiation
🌐 WebTransport Ready
πŸ“Ί Multi-bitrate Support
Try MOQ Player Now

Why Use MoqLiveMock?

Test your MOQ client implementations against a reliable, always-available server supporting both draft-14 and draft-16 with automatic version negotiation. MoqLiveMock simulates a true live MOQ streaming service with UTC-aligned content deliveryβ€”all clients receive synchronized streams regardless of join time. Stream 10-second loops of synchronized multi-bitrate content with CMAF chunks over QUIC.

Available Streams

Specially prepared relatively low-bitrate content for testing

πŸŽ₯ Video Tracks

H.264 (AVC) and HEVC encoded video streams at multiple bitrates for adaptive streaming

  • 400 kbps AVC
  • 600 kbps AVC
  • 900 kbps AVC
  • 400 kbps HEVC
  • 600 kbps HEVC
  • 900 kbps HEVC

🎡 Audio Tracks

Easily discernable audio tracks in AAC, Opus, and AC-3 with synchronized second beeps

  • Monotonic AAC (128 kbps)
  • Scale AAC (128 kbps)
  • Monotonic Opus (128 kbps)
  • Scale Opus (128 kbps)
  • Monotonic AC-3 (128 kbps)
  • Scale AC-3 (128 kbps)

πŸ“ Subtitle Tracks

Subtitle tracks in CMAF-compatible formats for testing text rendering

  • WVTT (WebVTT in CMAF)
  • STPP (TTML in CMAF)

πŸ”’ Content Protection

Multiple content protection modes served as separate namespaces

  • cmsf/clear β€” unencrypted
  • cmsf/drm-cbcs β€” Widevine, PlayReady, FairPlay
  • cmsf/eccp-cbcs β€” ClearKey (ECCP)

Each namespace has its own MSF catalog with only the relevant tracks. DRM and ECCP use independent encryption keys.

The content protection signaling follows the CMSF specification, proposed by Eyevinn and merged into the moq-wg/cmsf main branch for the next draft. Also supported by Shaka Player.

⚑ Technical Specs

Modern streaming protocols and formats

  • MOQ Transport draft-14 and draft-16
  • ALPN-based version negotiation
  • CMAF chunks
  • 10-second loops
  • Wall-clock synchronized
  • MSF/CMSF catalog per namespace
  • Multiple namespaces announced

Live Streaming Simulation

UTC-aligned streaming for consistent playback across all clients

πŸ• Wall-clock Alignment

MoqLiveMock simulates a live MOQ streaming service with precise UTC time alignment. This ensures all subscribers receive synchronized content regardless of when they join or when the publisher was started.

Two-Level Time Alignment

1.
10-Second Asset Loop is aligned to UTC modulo 10 seconds
The first sample of the clip maps to epoch times where seconds % 10 == 0. This ensures every subscriber joining at the same wall-clock time receives the same content.
2.
MoQ Groups are aligned to full UTC seconds
Each group number equals Unix_epoch_ms / 1000, so group boundaries fall on exact second boundaries.
πŸ’‘ No Drift: Audio is typically not compatible with integral seconds, so minimal displacement is applied without accumulated drift over time.

How to Use

Multiple ways to connect and stream content

🌐 Browser Player (Recommended)

Use the MOQ Player for instant playback in your browser (Chrome, Edge, Firefox, or Safari 26.4+). No installation required. Supports both draft-14 and draft-16 with automatic version negotiation.

Open MOQ Player

πŸ’» Command Line Client

For developers and advanced users, use mlmsub to stream from the terminal:

# Install the client
go install github.com/Eyevinn/moqlivemock/cmd/mlmsub@latest

# Stream clear content (default namespace: cmsf/clear)
mlmsub -addr moqlivemock.demo.osaas.io -videoname _avc -audioname _aac -muxout - | ffplay -

# Stream ClearKey/ECCP encrypted content
mlmsub -addr moqlivemock.demo.osaas.io -namespace cmsf/eccp-cbcs -videoname _eccp -audioname _eccp -muxout - | ffplay -

# Stream with WebTransport and debug logging
mlmsub -wt -addr https://moqlivemock.demo.osaas.io:443 -loglevel debug -muxout - | ffplay -

# Connect using a specific draft version (14 or 16, default: 16)
mlmsub -draft 14 -addr moqlivemock.demo.osaas.io -muxout - | ffplay -

πŸ”§ Run Your Own Server

Clone the repository and run your own MoqLiveMock instance:

# Clone and build
git clone https://github.com/Eyevinn/moqlivemock
cd moqlivemock
go build ./cmd/mlmpub

# Option 1: Using mkcert (recommended for development)
mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
mkcert -install
./mlmpub -cert cert.pem -key key.pem -addr localhost:4443

# Option 2: Using fingerprint (no cert installation needed)
./mlmpub -sideport 8081

# With ClearKey/ECCP encryption
./mlmpub -sideport 8081 \
  -kid 00112233445566778899aabbccddeeff \
  -iv 00000000000000000000000000000001 \
  -scheme cbcs -laurl http://localhost:8081/clearkey

When using fingerprint mode, connect with MOQ Player using:
β€’ Server URL: https://localhost:4443/moq
β€’ Fingerprint URL: http://localhost:8081/fingerprint
The -sideport enables an HTTP server for both /fingerprint and /clearkey endpoints.

Part of the Eyevinn Open Source Ecosystem