# 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` 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-node` already publishes CMAF init on a dedicated MoQ track (`init`) and publishes segments on the main chunks track. - `--raw-cmaf` is only valid with `--container cmaf` and 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-cmaf` can remain as a debug and interoperability mode.