every.channel/evolution/proposals/ECP-0034-raw-cmaf-output.md
2026-02-15 16:17:27 -05:00

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

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.