every.channel: sanitized baseline
This commit is contained in:
commit
897e556bea
258 changed files with 74298 additions and 0 deletions
49
evolution/proposals/ECP-0046-web-directory-and-signaling.md
Normal file
49
evolution/proposals/ECP-0046-web-directory-and-signaling.md
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
# ECP-0046: Web Directory + WebRTC Signaling via Workers (Interim)
|
||||
|
||||
## Why
|
||||
|
||||
The deployed website at `every.channel` is static and cannot yet join the QUIC/MoQ mesh directly.
|
||||
We still need a practical way for web viewers to:
|
||||
- see a global list of available live channels, and
|
||||
- connect to one without manual copy/paste.
|
||||
|
||||
Browsers do support WebRTC DataChannels. We already use them as a bridge transport (ECP-0043),
|
||||
but we need a rendezvous mechanism for offers/answers and a directory that the website can query.
|
||||
|
||||
## Proposal
|
||||
|
||||
Add a small `/api/*` surface to the existing Cloudflare Worker (same origin as the website):
|
||||
- `/api/directory` (GET): list announced live channels (short TTL).
|
||||
- `/api/announce` (POST): publish a channel entry `{stream_id,title,offer}` with a TTL.
|
||||
- `/api/answer` (POST/GET): store and retrieve WebRTC answers for a given `stream_id`.
|
||||
|
||||
Add an `ec-node` mode that:
|
||||
- creates a WebRTC offer,
|
||||
- announces it to `/api/announce`,
|
||||
- polls `/api/answer?stream_id=...` until a browser answers,
|
||||
- streams CMAF objects once connected.
|
||||
|
||||
Update the website UI to:
|
||||
- fetch `/api/directory`,
|
||||
- show a global list with a basic liveness heuristic (TTL),
|
||||
- on selection, generate a WebRTC answer and POST it to `/api/answer`.
|
||||
|
||||
## Notes / Risks
|
||||
|
||||
- This is intentionally **centralized** for discovery/signaling. Data still flows P2P once connected.
|
||||
- Answers are treated as **one-shot** (first reader consumes) since one WebRTC offer maps to one peer connection.
|
||||
- Entries and answers are aggressively TTL'd and size-capped; this is not a spam-resistant directory.
|
||||
- Anti-junk / rate limiting / signing is not implemented in this ECP; it must be addressed before
|
||||
relying on this API for open public use.
|
||||
- This does not replace the long-term goal of native MoQ mesh discovery.
|
||||
|
||||
## Deployment Notes
|
||||
|
||||
- Cloudflare requires a `workers.dev` subdomain to be created for the account even if we only use custom domains.
|
||||
If `wrangler deploy` fails with code `10063`, open the Workers landing page once in the Cloudflare dashboard,
|
||||
then retry deploy.
|
||||
|
||||
## Reversibility
|
||||
|
||||
High. The API is an interim adapter to bridge web constraints. It can be removed or replaced by
|
||||
decentralized rendezvous without changing the core stream objects.
|
||||
Loading…
Add table
Add a link
Reference in a new issue