SRT Router
A broadcast-style crosspoint for SRT

What it does
A crosspoint for SRT that thinks like a broadcast video router: any number of inputs, any number of outputs, each output picking one source and switchable live, with sources and destinations added and removed while it's running, from a web UI.
By default routing is a straight relay. Payload chunks move from an input connection to an output connection untouched, with no decode or re-encode, so switching costs nothing and adds no latency beyond SRT's own buffering. NDI transport is included alongside SRT.
- Crosspoint grid in the browser, switching live and persisted across restarts
- Sources and destinations added and removed while it runs
- Pure relay: no transcode cost, no added latency
- REST API and WebSocket state — the same path the UI itself uses
- SRT and NDI transports, plus OMT behind an opt-in build feature
- Also ships as a desktop tray app
- Stills, a local media player and a scaler tap as sources, each running ffmpeg as a child process
Where it stands
Released at v0.2.5, whose launcher stops the router with SIGTERM before it resorts to SIGKILL. v0.2.4 has the desktop launcher say why a start failed rather than appearing to do nothing; v0.2.3 brought the launcher back (v0.2.2 shipped without one) and made quitting it stop the router; v0.2.2 made an output keep its connection when the source it's routed from is removed; and v0.2.1 was dependency upkeep plus a Windows installer that guards its write to the system PATH, which the earlier one could overwrite. The relay and crosspoint engine and the web UI have been exercised locally, including integration tests that relay real SRT, NDI, OMT and ffmpeg-made MPEG-TS traffic end to end (one of them re-routing mid-stream over an already established connection) and a live crosspoint switch through the UI. They haven't been tried against third-party SRT or NDI encoders and decoders, or over a real network path that isn't loopback.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead