1.7 KiB
1.7 KiB
ECP-0034: Raw CMAF Output (CMAF-First, Playlist-Optional)
Status: Draft Author: Codex Reviewers: founder@every.channel Created: 2026-02-07
Decision
Treat CMAF artifacts (init segment + fMP4 media fragments) as the canonical transport payload for low-latency video in every.channel.
Add a subscriber option to write raw CMAF files to disk without generating an HLS playlist:
ec-node moq-subscribe --container cmaf --subscribe-init --raw-cmaf- writes
init.mp4 - writes
segment_%06d.m4s
- writes
HLS (and any other playlist formats) become optional views over those CMAF bytes, generated by a separate component when needed.
Motivation
- CMAF is the common denominator for modern streaming and is the right level of abstraction for MoQ object transport.
- Keeping the transport canonical at "init + fragments" avoids hard coupling the core to HLS/DASH playlist semantics.
- Determinism experiments should focus on fragment bytes, not playlist formatting.
Scope
In scope:
- Raw CMAF sink for
ec-node moq-subscribe. - Keep the existing HLS writer for local playback workflows.
Out of scope:
- MPEG-DASH support (explicitly not pursued here).
- Browser-native playback pipeline (still expected to use a view layer like HLS/MSE).
Implementation Notes
ec-nodealready publishes CMAF init on a dedicated MoQ track (init) and publishes segments on the main chunks track.--raw-cmafis only valid with--container cmafand errors otherwise.- Naming is stable and deterministic for tests and downstream proxies.
Reversibility
- This change is additive and gated behind a flag.
- If we later standardize a manifest-driven playlist format,
--raw-cmafcan remain as a debug and interoperability mode.