wt-publish: default to CMAF passthrough seedbox mode

This commit is contained in:
every.channel 2026-02-24 21:32:55 -08:00
parent 8e9eafe735
commit 1197bb4baa
No known key found for this signature in database
4 changed files with 31 additions and 3 deletions

View file

@ -60,6 +60,8 @@ cargo run -p ec-node -- wt-publish \
--control-endpoint-addr-out /tmp/la-nbc-control-endpoint.json --control-endpoint-addr-out /tmp/la-nbc-control-endpoint.json
``` ```
`wt-publish` defaults to `--passthrough=true` so relay and archive retain exact CMAF fragment bytes.
Watch (web): Watch (web):
```txt ```txt

View file

@ -435,7 +435,7 @@ struct WtPublishArgs {
transcode: bool, transcode: bool,
/// Transmit fMP4 fragments directly (passthrough mode). /// Transmit fMP4 fragments directly (passthrough mode).
/// When false, the importer may reframe into CMAF fragments. /// When false, the importer may reframe into CMAF fragments.
#[arg(long, default_value_t = false, action = clap::ArgAction::Set)] #[arg(long, default_value_t = true, action = clap::ArgAction::Set)]
passthrough: bool, passthrough: bool,
/// Danger: disable TLS verification for the relay. /// Danger: disable TLS verification for the relay.
#[arg(long, default_value_t = false)] #[arg(long, default_value_t = false)]

View file

@ -0,0 +1,26 @@
# ECP-0072: CMAF Seedbox Invariant For Relay Archive
## Context
Archive replay currently stores and serves relay groups exactly as received, but many existing broadcasts were published in `legacy` container mode. Those bytes are not browser-HLS compatible, so archive playback fails despite a valid timeline and object store.
## Decision
Make `wt-publish` default to CMAF passthrough (`--passthrough=true`) so:
- relay subscribers and archive workers observe the same CMAF fragment bytes (`moof+mdat`);
- archive replay can serve those exact bytes without re-encoding;
- the archive acts as a history seedbox of previously played chunks.
Update the NixOS module default `services.every-channel.ec-node.passthrough = true` to keep host deployments aligned with the seedbox invariant.
## Rationale
- Zero-transform archive path is simpler and more auditable.
- Exact-byte retention avoids drift between live and replay.
- Browsers can play CMAF fragments via standard HLS tooling; no custom legacy converter is required for new streams.
## Reversibility
- Operators can explicitly set `passthrough = false` per host to revert to legacy framing.
- Existing archived legacy data remains readable for timeline/index use, but may require separate migration tooling for browser playback.

View file

@ -60,8 +60,8 @@ in
passthrough = lib.mkOption { passthrough = lib.mkOption {
type = lib.types.bool; type = lib.types.bool;
default = false; default = true;
description = "Whether to transmit fMP4 fragments directly (moq-mux passthrough)."; description = "Whether to transmit CMAF fMP4 fragments directly (seedbox-compatible passthrough).";
}; };
tlsDisableVerify = lib.mkOption { tlsDisableVerify = lib.mkOption {