61 lines
2.8 KiB
Markdown
61 lines
2.8 KiB
Markdown
# ECP-0089: Broadcast-Scoped Discovery Identity For Gossip And DHT
|
|
|
|
Status: Implemented
|
|
|
|
## Decision
|
|
|
|
When `ec-node` needs to synthesize a default `stream_id` for publish/announce flows, it will prefer a broadcast-scoped identifier derived from channel metadata over a source-scoped identifier.
|
|
|
|
Current rule:
|
|
|
|
- If the selected channel yields a usable broadcast identity, generate `ec/stream/v1/broadcast/...`.
|
|
- Otherwise keep the existing source-scoped fallback `ec/stream/v1/source/...`.
|
|
- Explicit `--stream-id` continues to override both behaviors.
|
|
|
|
For HDHomeRun lineup sources, the usable broadcast identity is assembled from the channel record when present:
|
|
|
|
- `standard = atsc`
|
|
- `program_number` from lineup `ProgramNumber`/`ProgramID` when available
|
|
- `virtual_channel` from `GuideNumber`
|
|
- `callsign` from typed lineup metadata or channel name fallback
|
|
- optional `region` / `frequency` hints when present
|
|
|
|
## Motivation
|
|
|
|
Today identical OTA channels announced from different ingest nodes often diverge because the default identity is source-scoped (`hdhr`, device id, local channel selection). That defeats gossip/DHT dedupe and makes the network treat equivalent broadcasts as unrelated streams.
|
|
|
|
We already have a long-term architectural direction in ECP-0004: broadcast identity is the primary convergence key and source identity is a fallback. This change applies that rule to the current discovery boundary instead of waiting for deeper ingest metadata work.
|
|
|
|
## Scope
|
|
|
|
In scope:
|
|
|
|
- Channel-to-broadcast identity helper in `ec-core`
|
|
- Typed lineup metadata extraction in `ec-hdhomerun`
|
|
- Default `stream_id` synthesis updates in `ec-node`
|
|
- Unit coverage for identity derivation and lineup parsing
|
|
- Operator docs describing the precedence rules
|
|
|
|
Out of scope:
|
|
|
|
- Deep MPEG-TS/PSIP extraction of TSID/program data from live transport packets
|
|
- Automatic migration of already-running source-scoped publishers
|
|
- Cryptographic anti-spoofing or admission control for gossip/DHT announcements
|
|
|
|
## Constraints
|
|
|
|
- Must remain additive and reversible
|
|
- Must not break explicit operator-provided `--stream-id`
|
|
- Must keep non-broadcast-aware sources working unchanged
|
|
|
|
## Alternatives considered
|
|
|
|
- Keep source-scoped defaults until full PSIP parsing exists. Rejected because it preserves a known convergence flaw in the current network behavior.
|
|
- Force all operators to manually specify canonical `--stream-id`. Rejected because it is error-prone and defeats zero-config dedupe.
|
|
- Collapse purely onto channel number. Rejected because channel number alone is too weak without additional hints.
|
|
|
|
## Rollout / Reversibility
|
|
|
|
- Additive change: only synthesized defaults change, not explicit IDs.
|
|
- Roll back by restoring source-scoped default synthesis.
|
|
- Existing automation can pin old behavior with explicit `--stream-id` if needed during transition.
|