49 lines
2.2 KiB
Markdown
49 lines
2.2 KiB
Markdown
# 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.
|