Language: Go (moqtransport, moqlivemock) + TypeScript/JavaScript (warp-player) Organization: Eyevinn Technology Maintainer: Torbjörn Einarsson GitHub: Eyevinn/moqtransport · Eyevinn/moqlivemock · Eyevinn/warp-player Demo: moqlivemock.demo.osaas.io Draft support: draft-14 and draft-16 (ALPN-based version negotiation) Packaging formats: CMSF, LOC (HEVC + AVC + AAC + Opus), MSF, moq-mi (since v0.8.0), LOCMAF v0.1

Overview

Eyevinn’s MoQ stack spans three repositories that together cover the full media pipeline: a Go transport library, a Go live publisher/subscriber test app, and a browser-based TypeScript player using MSE. It exercises CMSF, LOC, MSF, moq-mi, and LOCMAF packaging with commercial DRM and interop testing.

Components

moqtransport

moqlivemock

  • GitHub: Eyevinn/moqlivemock — Go. Latest: v0.13.0 (Aug 6, 2026).
  • Live MoQ publisher (mlmpub) and subscriber (mlmsub) test tools with CMSF, LOC, MSF, moq-mi, and LOCMAF media support, DRM, and interop testing — plus mlmtest for the interop-runner framework.

warp-player

  • GitHub: Eyevinn/warp-player — JavaScript / TypeScript. Latest: v0.13.0 (Aug 6, 2026).
  • Browser-based player for CMSF media (MSE), LOC media (WebCodecs), and LOCMAF (compressed CMAF) over MoQ. Supports Widevine, PlayReady, FairPlay, and ClearKey on the MSE path. CTA-608 closed-caption extraction + overlay rendering landed Aug 2–3, 2026 on both the WebCodecs/LOC and MSE/CMAF+LOCMAF paths, with the CC on/off toggle completed Aug 3 (see Recent Highlights). Captions render for AVC and HEVC but not yet AV1 (AV1 caption extraction is not yet supported in the common media library); the CC button is struck through when captions are impossible.

Catalog Handling

Supports both FETCH and SUBSCRIBE for retrieving the MSF catalog. Each cmsf/* and msf/* namespace serves its own catalog describing the available tracks under that namespace. The moq-mi/clear namespace has no catalog — moq-mi is identified by namespace prefix convention (see IsMoqMINamespace in internal/sub/moqmi.go).

Media Support

  • Video: H.264, HEVC, AV1 (AV1 in the CMSF/CMAF + LOCMAF path only — gracefully excluded from LOC/moq-mi; warp-player AV1 playback landed July 22 via the WebCodecs/LOC pipeline)
  • Audio: AAC, Opus, AC-3
  • Subtitles: wvtt, stpp (dynamically generated with timestamps and group numbers)
  • Closed captions: CTA-608 — auto-generated in-band caption SEI messages injected by mlmpub across the CMAF/LOCMAF/LOC/moq-mi serve paths and all three video codecs (AVC/HEVC/AV1), advertised in the catalog as an accessibility descriptor with cross-packaging decode round-trip verified (July 2026); a -cc608mode flag selects paint-on (default) / pop-on / roll-up presentation (Aug 2026). Player-side rendering is complete for AVC/HEVC; AV1 caption rendering is pending common-media-library support.
  • Sync: Wall-clock synchronized — group X starts at second X, video clock aligned with UTC modulo 10s, audio beeps on seconds
  • Format: CMSF (CMAF chunks over MOQT)

Namespaces

mlmpub announces a fixed set of namespaces, each carrying a different packaging and (for CMSF) protection mode. Subscribers pick a namespace to select packaging/protection:

NamespacePackagingProtectionDetails
cmsf/clearCMSF (CMAF chunks)NoneUnencrypted CMSF — default for mlmsub
cmsf/drm-{scheme}CMSF (CMAF chunks)Commercial DRMWidevine, PlayReady, FairPlay via CPIX; {scheme} = cenc or cbcs
cmsf/eccp-{scheme}CMSF (CMAF chunks)ClearKey / ECCPExplicit key delivery via HTTP /clearkey side endpoint
msf/clearLOC (raw codec frames)NoneMSF catalog describing LOC tracks (HEVC + AVC + AAC + Opus)
moq-mi/clearmoq-miNoneMoQ Media Interop format (no catalog; convention-based namespace prefix)

All five namespaces are announced concurrently when mlmpub runs, so subscribers can choose the packaging and protection model independently. The CMSF DRM/ECCP namespaces are only announced when a DRM config or ClearKey IV/KID is provided.

CMSF ContentProtection

The CMSF ContentProtection signaling spec (moq-wg/cmsf PR #18, merged Apr 14) was proposed by Eyevinn based on the moqlivemock implementation. DRM support in moqlivemock and warp-player was implemented by Hugo Björs (Eyevinn). warp-player supports Widevine, PlayReady, FairPlay, and ClearKey/ECCP. It was the first running implementation, now joined by shaka-player (PR #9972, also merged Apr 14).

LOCMAF (Low Overhead CMAF)

LOCMAF is a compact LOC-inspired/compatible CMAF packaging format for MoQT, encoding only the non-derivable moof/moov fields as MoQT key-value pairs using QUIC varints (first object = full moof, subsequent objects = delta moofs). It carries a locmafVersion field in the CMSF catalog and follows a locmaf-vX.Y git-tag snapshot policy. v0.1 shipped in moqlivemock/warp-player v0.9.0 (May 17, 2026), including an encoder/decoder, a cmd/locmaf roundtrip CLI, a design doc, and a DRM section. Initial support originated in a Master’s-thesis context (Hugo Björs). See media-packaging for the full design and comparison vs. compressed-mp4.

Demo

Recent Highlights (as of August 2026)

Day-by-day PR/issue history lives in the wiki log; this section keeps only durable milestones.

  • Coordinated v0.13.0 release wave (Aug 6): moqlivemock v0.13.0, warp-player v0.13.0, and moqtransport v0.10.0 shipped together, consolidating the CTA-608 caption + AV1 work. moqlivemock gained a selectable -cc608mode (paint-on default / pop-on / roll-up, #125), a go-608 v0.9.0 bump (#124), and a deterministic catalog codec ordering (video AVC → HEVC → AV1, audio AAC → Opus → AC-3, #126); warp-player added a struck-through CC button when captions are impossible (#180) and completed its cc608 end-to-end verification (#177). AV1 now carries CTA-608 like AVC/HEVC on both the WebCodecs and MSE/EME paths, though warp-player does not yet render AV1 captions. The stack remains on draft-14 & draft-16; a draft-18 update is planned next.
  • CTA-608 in-band closed captions (Jul 24–25): mlmpub gained an internal cc608 package that generates CTA-608 caption data as H.264/HEVC SEI messages (PR #114), injected across all four serve paths — CMAF/LOCMAF/LOC/moq-mi (PR #115), then advertised in the catalog as an accessibility descriptor with cross-packaging decode-round-trip verification (PR #117, merged Jul 25, +278/−5) — completing the publisher side of the caption epic. The warp-player player side landed Aug 2 (resolving warp-player #156): CTA-608 extraction on both the WebCodecs/LOC path (warp-player #169) and the MSE/CMAF+LOCMAF path (#171), plus a timed-text overlay seam + CTA-608 renderer (#170, ~4,700 LOC total). The CC on/off toggle + caption-sink wiring completed Aug 3 (#173 merged), closing the CTA-608 capture→publish→extract→render round trip end to end. An encrypted-playback thread then opened: a test proving CTA-608 captions survive cbcs subsample encryption (#174 merged Aug 3) landed alongside a new bug — encrypted playback failing on the first audio packet (warp-player #175, OPEN, blocking the encrypted interop rows). Makes the Eyevinn stack an accessibility-signaling testbed on top of its AVC/HEVC/AV1 codec coverage.
  • AV1 as a first-class CMSF codec (Jul 21, PR #102): AV1 (av01) joins AVC and HEVC in the CMSF/CMAF + LOCMAF path — SVT-AV1 low-delay CBR test content, appearing in every CMSF catalog as CMAF + LOCMAF renditions, with a new Codec: overlay line on all generated video. AV1 is gracefully excluded from LOC/moq-mi (those paths keep AVC/HEVC). moqlivemock’s first AV1-over-MoQ media path. warp-player AV1 playback landed the next day (Jul 22, warp-player PR #155, +440/−9) — AV1 (av01) video decode via the WebCodecs/LOC pipeline — completing the AV1 capture→publish→play round trip. Separately, a “Add TS support” request (issue #103) was filed by Álvaro Velad Galván (Shaka Player).
  • v0.12.0 ships LOCMAF v0.3, codec extracted to a standalone module (Jul 6): the LOCMAF implementation was pulled out of moqlivemock into the standalone Eyevinn/locmaf module (shared with the LOCMAF draft).
  • Joining-FETCH catalog retrieval (Jul 4) landed across all three repos: a subscriber retrieves the current catalog object via a relative joining FETCH instead of SUBSCRIBE-and-wait. moqtransport v0.9.0 (PR #14) added publisher-side joining-FETCH resolution (draft-16); moqlivemock (PR #95) added a -catalog-mode flag; warp-player (PR #149) mirrored it in the TS/MSE player.
  • Interop-robustness hardening (Jun, moqlivemock v0.11.1): bound interop SETUP by the per-test deadline and refuse a silent WebTransport draft-14 downgrade, so one hung peer can’t stall the sequential interop matrix. The fix was pushed down into moqtransport itself so any consumer benefits.
  • LOCMAF v0.1 (May 17, v0.9.0): wire format frozen at v0.1 with publisher and player released together, ready for interop.
  • LOCMAF DRM support: end-to-end encrypted-CMAF → LOCMAF-wire → reconstructed-CMAF → MSE/EME/CDM pipeline (mdat bytes byte-equal end-to-end so the CDM sees identical ciphertext); catalog contentProtections covering both cenc and cbcs schemes.
  • v0.8.0 (May 5): added HEVC LOC packaging, MSF/LOC/moq-mi support, and accurate per-packaging bitrate exposed in the catalog.

Interop

  • shaka-player subscribing to moqlivemock publisher (including CMSF ContentProtection)
  • mlmtest client available for the interop-runner framework
  • Draft-16 support opens interop with moq-rs, moxygen, libquicr, and other draft-16 implementations

Related