The MOQ ecosystem has two container format philosophies for packaging media.

LOC - Low Overhead Container

moq-loc (draft-ietf-moq-loc-02)

  • Minimal encapsulation overhead
  • WebCodecs-native: aligns directly with browser APIs
  • Optimized for real-time and interactive use (<500ms latency)
  • Codec-agnostic via metadata properties
  • No existing tooling ecosystem

CMAF - Common Media Application Format

Used via moq-cmsf (draft-ietf-moq-cmsf-01, submitted 2026-06-03)

  • Industry standard for OTT streaming (HLS/DASH)
  • Broad tooling support: encoders, packagers, players
  • Higher overhead per object
  • Well-understood by CDN operators
  • Supports DRM workflows

Bridges Between LOC and CMAF

Two proposals attempt to bridge LOC’s low overhead with CMAF’s compatibility — coming from opposite directions:

Compressed MP4 (spec-side, varint compression of ISO BMFF)

draft-lcurley-compressed-mp4-00 (luke-curley, submitted 17 March 2026). Approach: keep the ISO BMFF box hierarchy but rewrite the encoding — a cmpd table in moov maps varint IDs ↔ 4-char box type names, and four compressed box variants (cmfh, cfhd, cfdt, crun) replace fixed-width payload fields with QUIC-style varints. Reduces per-fragment overhead from ~96 to ~21 bytes (~78%) and is losslessly reversible to standard fMP4. Original framing: “it’s kinda gross, but maybe it’s enough to bridge the gap between LOC and CMAF so we don’t have a container split based on the use-case.”

LOCMAF (impl-side, structural compression) — now an individual draft

LOCMAF (Low Overhead CMAF) graduated from an Eyevinn experiment (twin PRs moqlivemock #79 / warp-player #120, May 7) into a formal IETF individual draft, draft-einarsson-moq-locmaf-00 (submitted 2026-06-02, authors Torbjörn Einarsson (Eyevinn) + Hugo Björs (KTH); no WG adoption call yet). Approach: carry CMAF chunk metadata as tagged LOC-style fields while leaving sample data unchanged; the receiver reconstructs a functionally equivalent CMAF chunk for MSE/EME playback. Gets per-object overhead to ~2 bytes steady-state (even with common encryption) — LOC-like overhead while staying MSE/EME-compatible. Slots between LOC (no MSE/EME) and CMSF (full CMAF chunks).

0.2 dropped initData compression (the v0.1 impl had carried a compressed init-segment property): now LOCMAF relies on catalog-referenced init, leaning on the initData type that MSF -01 added to the catalog (so "cmaf" and "locmaf" packagings can share one initData) plus MSF-01’s catalog compression. LOCMAF carries only the per-object delta-compressed chunk metadata. Shipped in moqlivemock v0.11.0 (PR #91, June 4) and warp-player v0.11.0.

ApproachPathAuthorStatus
compressed-mp4Rewrite ISO BMFF box headers + four common boxes with QUIC-style varintsluke-curleyIndividual draft -00 Mar 17
LOCMAFCarry CMAF chunk metadata as tagged LOC fields, receiver reconstructs the chunk; catalog-referenced initTobbe Einarsson + Hugo BjörsIndividual draft -00 Jun 2

Media Interop (Concrete Wire Format)

moq-media-interop (draft-cenzano-moq-media-interop-03, individual, EXPIRED 2026-04-23 — no -04 published)

  • Defines a concrete media wire format on top of LOC
  • Covers H.264 video (AVCC), Opus audio, AAC-LC audio, and UTF-8 text
  • Uses MOQT extension headers for metadata (PTS, DTS, timebase, wallclock)
  • Supports mid-stream encoding parameter changes
  • Authored by Jorge Cenzano-Ferret and alan-frindell at Meta
  • Documents the wire format used by moxygen

Current State

Both approaches coexist within moq-msf:

  • MSF supports LOC-packaged media natively
  • CMSF extends MSF with CMAF packaging support
  • The community has not converged on one approach

The individual-draft landscape is now stratified by container/initData semantics: CMSF = full CMAF chunks; LOCMAF = delta-compressed CMAF chunk metadata + catalog-referenced init; LOC = strips fMP4 entirely; compressed-mp4 = varint-compressed fMP4 boxes; MSFTS = MPEG-2 TS.

Convergence: shared init carriage (June 2026)

Both MSF -01 (June 2) and CMSF -01 (June 3) landed in the same window and reframed how init data is carried. MSF-01’s catalog-referenceable initData type is what let LOCMAF 0.2 drop its own init compression and made "cmaf"/"locmaf" packagings able to share one initData (see catalog init data).

The open design question — where init data lives — narrowed at the June London CMSF slot. Will Law’s proposal: carry init via both a Track property AND an Object property — a stable Track property for steady-state init, an Object property for synchronized mid-track changes (DASH-period switch, DRM key rotation). This answers the long-running moq-msf Issue #153 initTrack problem and gives LOCMAF a spec-blessed home for its catalog-referenced init. See moq-locmaf, catalog-format.

Which to Use?

Use CaseRecommended
Real-time conferencingLOC
Live interactive streamingLOC
OTT broadcast-styleCMAF via CMSF
Existing CMAF pipelineCMAF via CMSF
WebCodecs-first browser appLOC

Related