|
2 | 2 |
|
3 | 3 | > **AI-assisted project.** This codebase was created with [Claude](https://claude.com/claude-code) |
4 | 4 | > (Anthropic), directed and reviewed by a human author. The relay/crosspoint |
5 | | -> engine and web UI have been exercised locally (unit tests, real SRT |
6 | | -> listener sockets, a live crosspoint switch via the web UI — see |
7 | | -> [Status](#status)) but **not yet run against real-world SRT |
8 | | -> encoders/decoders or over an actual network path**. Review before relying |
9 | | -> on it for anything live. |
| 5 | +> engine and web UI have been exercised locally — including integration |
| 6 | +> tests that relay real SRT protocol traffic end-to-end and a live |
| 7 | +> crosspoint switch via the web UI, see [Status](#status) — but **not yet |
| 8 | +> run against real-world third-party SRT encoders/decoders or over an |
| 9 | +> actual (non-loopback) network path**. Review before relying on it for |
| 10 | +> anything live. |
10 | 11 |
|
11 | 12 | A crosspoint-based [SRT](https://www.srtalliance.org/) router: any number of |
12 | 13 | SRT inputs, any number of SRT outputs, and a router-style crosspoint (each |
@@ -44,19 +45,29 @@ hardware router's control port. |
44 | 45 | - The crosspoint engine (`crates/core`) — output-follows-route-change |
45 | 46 | behavior is unit tested. |
46 | 47 | - A local web UI (`crates/web`) — grid of outputs x sources, click to route, |
47 | | - polls `/api/state` once a second. |
48 | | -- Verified locally: `cargo test` passes; running the binary against |
49 | | - `config/example.toml` actually binds real UDP/SRT listener sockets |
50 | | - (confirmed via `lsof`), the REST API drives real crosspoint state changes, |
51 | | - and clicking a cell in the web UI (in a real browser) correctly re-routes |
52 | | - an output. |
53 | | - |
54 | | -**Not yet done:** no test against a real SRT encoder/decoder or over a real |
55 | | -network (only loopback-adjacent local testing so far), no persistence of |
56 | | -routing across a restart, no special-purpose sources (stills/media |
57 | | -player/scaler), no auth on the web UI/API, no external control |
58 | | -API/Companion integration. See [docs/roadmap.md](docs/roadmap.md) for the |
59 | | -full phased plan. |
| 48 | + updated live over a websocket (`GET /ws`) with a REST poll (`GET |
| 49 | + /api/state`) as first paint / fallback. |
| 50 | +- Routing changes optionally persist to disk (`[state]` in the config) and |
| 51 | + reload on restart, overriding each output's `default_source`. |
| 52 | +- CI (GitHub Actions) runs `fmt --check`, `clippy -D warnings`, and the full |
| 53 | + test suite on every push/PR. |
| 54 | +- Verified locally, not just compiled: `cargo test` passes, including |
| 55 | + integration tests (`crates/srt-io/tests/relay.rs`) that relay real SRT |
| 56 | + protocol traffic end-to-end through the crosspoint using `srt-tokio` |
| 57 | + clients as the encoder/decoder — one test also exercises a **live |
| 58 | + re-route mid-stream over an already-established SRT connection**. |
| 59 | + Separately confirmed by hand: running the binary against |
| 60 | + `config/example.toml` binds real UDP/SRT listener sockets (via `lsof`), |
| 61 | + the REST API and a real browser click both drive live crosspoint changes, |
| 62 | + the websocket push updates the grid with no client-side polling, and a |
| 63 | + persisted route survives a real process restart. |
| 64 | + |
| 65 | +**Not yet done:** no test against a real third-party SRT |
| 66 | +encoder/decoder or over a real (non-loopback) network path — only local |
| 67 | +testing so far, still the main open gap. Also missing: special-purpose |
| 68 | +sources (stills/media player/scaler), auth on the web UI/API, external |
| 69 | +control API/Companion integration. See [docs/roadmap.md](docs/roadmap.md) |
| 70 | +for the full phased plan. |
60 | 71 |
|
61 | 72 | ## Quick start |
62 | 73 |
|
|
0 commit comments