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β unencryptedcmsf/drm-cbcsβ Widevine, PlayReady, FairPlaycmsf/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
seconds % 10 == 0.
This ensures every subscriber joining at the same wall-clock time receives the same content.
Unix_epoch_ms / 1000,
so group boundaries fall on exact second boundaries.
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.
π» 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.