HydraSRT
An open-source alternative to Haivision SRT Gateway.
Report Bug
·
Request Feature
Status
Project Status: Beta.
Supported transports
| Transport | Input | Output |
|---|---|---|
| SRT | ✔ | ✔ |
| UDP | ✔ | ✔ |
| RTMP | ✔ | ✔ |
| RTP | ✔ | — |
| NDI | ✔ | ✔ |
NDI is off by default. It needs the NDI runtime, which is not shipped with HydraSRT and is installed by the operator: see docs/ndi.md.
Planned transports
| Transport | Input | Output |
|---|---|---|
| HLS | — | — |
| WebRTC | — | — |
| MoQ | — | — |
Capabilities
RTMP output remuxes the route MPEG-TS stream to FLV without decoding. It supports codecs accepted by GStreamer's FLV muxer, such as H.264 video and AAC/MP3 audio.
| Capability | Notes | Status |
|---|---|---|
| One-to-many distribution | Single source to multiple unicast/multicast outputs | Beta |
| Reliability | Source failover and reconnection | Beta |
| Security | SRT passphrase and stream ID | Beta |
| Observability | Prometheus metrics, route stats, and pipeline logs | Beta |
Missing a feature? Open an issue.
Overview
HydraSRT is an open-source alternative to Haivision SRT Gateway for reliable video transport and routing. It manages SRT, UDP, and RTP streams with built-in failover, supervision, metrics, and a modern web UI and API designed for broadcast and live production workflows.
Built with Elixir(Erlang/OTP), Rust, and GStreamer, HydraSRT combines strong fault isolation with lightweight orchestration. The BEAM supervises routing and control logic, while isolated media pipelines run only where active streams are present, providing high reliability with low system overhead.
Architecture
HydraSRT has three layers:
flowchart LR
UI[React UI] -->|REST/WebSocket| API[Phoenix API]
API --> Control[Elixir/OTP Supervisor]
Control -->|spawns & monitors| Pipeline1[Rust Pipeline 1]
Control -->|spawns & monitors| Pipeline2[Rust Pipeline 2]
Control -->|spawns & monitors| PipelineN[Rust Pipeline N]
Control --> SQLite[(SQLite Config)]
Control --> VictoriaMetrics[(VictoriaMetrics)]
Control --> VictoriaLogs[(VictoriaLogs)]Management & Control (Elixir/OTP)
- Supervises routes and restarts failed route processes
- Stores configuration and route state in SQLite
- Exposes REST and WebSocket APIs
- Handles failover and source switching
Streaming & Processing (Rust + GStreamer)
- Runs each route as an isolated OS process
- Uses GStreamer for media processing
- Keeps pipeline crashes limited to the affected route
User Interface (React + Vite)
- Route management dashboard
- Real-time status over WebSocket
- Historical metrics and logs
See docs/architecture.md for details.
Quick Start
Docker
docker compose upOpen http://127.0.0.1:4000 and log in with admin / password123.
The default Compose file uses Linux host networking. If your Docker Engine cannot use Linux host networking, run with explicit port mappings:
docker compose -f docker-compose.yml -f docker-compose.ports.yml upHost networking is intended for native Linux, including WSL2 only when Docker Engine runs inside the WSL distro.
Local Development
# First-time setup
mix setup
# Start dev server (Elixir + Vite)
make devWeb UI: http://localhost:5173.
Setup, deployment, and troubleshooting: docs/development.md.
Features
- SRT source and destination modes: Listener, Caller, Rendezvous
- UDP sources and destinations
- RTP (TS over RTP) sources
- SRT authentication with passphrase and stream ID support
- Source failover with primary + backup sources, automatic failover, and manual source switching
- System metrics via Prometheus
/metrics - Historical analytics and route events stored in VictoriaMetrics
- Historical pipeline logs stored in VictoriaLogs
- Real-time route status updates over WebSocket
Documentation
| Document | Purpose |
|---|---|
| docs/development.md | Setup, deployment, and Docker guide |
| docs/architecture.md | System design and technical details |
| docs/api.md | REST API documentation |
| docs/mcp.md | MCP server, tokens, and client setup |
| docs/envs.md | Environment variables reference |
| docs/ndi.md | Installing and enabling NDI |
Contributing
See CONTRIBUTING.md for contribution guidelines.
License
Apache 2.0. See LICENSE.
Inspiration
Contact
Use GitHub issues: https://github.com/streamband/hydra-srt/issues