An open-source alternative to Haivision SRT Gateway.
Report Bug
·
Request Feature
Project Status: Beta. APIs and behavior may change.
| Protocol/Feature | Source | Destination | Status |
|---|---|---|---|
| SRT | ✔ | ✔ | Beta |
| UDP | ✔ | ✔ | Beta |
| RTSP | - | - | Planned |
| RTMP | - | - | Planned |
| HLS | - | - | Planned |
| WebRTC | - | - | Planned |
| MoQ | - | - | Planned |
Missing a feature? Open an issue.
Screen.Recording.2025-03-09.at.17.18.22.1.mp4
HydraSRT is an open-source alternative to Haivision SRT Gateway for reliable video transport and routing. It manages SRT and UDP 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.
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 --> DuckDB[(DuckDB Analytics)]
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.
docker run --rm -p 4000:4000 \
-p 4100-4500:4100-4500/udp \
-v "$(pwd)/data/db:/app/db" \
-e PHX_SERVER=true \
-e DATABASE_PATH=/app/db/hydra_srt.db \
-e ANALYTICS_DATABASE_PATH=/app/db/hydra_srt_analytics.duckdb \
-e API_AUTH_USERNAME=admin \
-e API_AUTH_PASSWORD=password123 \
streamband/hydra-srt:latestOpen http://127.0.0.1:4000 and log in with admin / password123.
# First-time setup
mix setup
# Start dev server (Elixir + Vite)
make devWeb UI: http://localhost:5173.
Setup, deployment, and troubleshooting: docs/development.md.
- SRT source and destination modes: Listener, Caller, Rendezvous
- UDP sources and destinations
- 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 pipeline logs stored in DuckDB
- Real-time route status updates over WebSocket
| 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/envs.md | Environment variables reference |
See CONTRIBUTING.md for contribution guidelines.
Apache 2.0. See LICENSE.
Use GitHub issues: https://github.com/abc3/hydra-srt/issues