MediaMTX
Лицензия: MIT. Один бинарник на Go, без зависимостей.
Что это
Ретранслятор реального времени. Забирает поток из источника (RTSP/RTMP/…), раздаёт его одновременно по RTSP, WebRTC, HLS, SRT, RTMP. Не транскодирует — ремультиплексирует, поэтому почти не грузит CPU.
Сильные стороны под наш кейс
- sourceOnDemand — поток с камеры забирается только когда его кто-то смотрит. Для 1000+ камер критично: не держим тысячу активных потоков, если смотрят 50.
- Масштабируется на сотни одновременных RTSP-сессий — хорошее «ядро».
- HTTP API (:9997) — динамически добавлять/удалять пути без рестарта.
- Конфиг — простой YAML, пути генерятся скриптом из списка камер.
Порты по умолчанию
| Порт | Назначение |
|---|---|
| 8554 | RTSP (можно повесить на 554, если от root) |
| 8888 | HLS (браузер) |
| 8889 | WebRTC (браузер, низкая задержка) |
| 8890 | SRT |
| 1935 | RTMP |
| 9997 | HTTP API (управление путями) |
| 9998 | Prometheus-метрики |
Любой меняется одной строкой в конфиге. Всё можно спрятать за nginx на 443 c TLS.
Ключевые параметры пути
paths:
cam0001:
source: rtsp://user:pass@10.x.x.x:554/Streaming/Channels/101
sourceOnDemand: yes # тянуть с камеры только когда смотрят
sourceOnDemandCloseAfter: 10s # закрыть поток через 10с после ухода последнего
sourceProtocol: tcp # TCP надёжнее UDP для Hikvision по WAN
Когда добавлять MediaMTX к go2rtc
Начинать стоит с go2rtc. MediaMTX подключить, когда:
- одновременных RTSP-клиентов (iVMS) становятся сотни;
- нужно раздавать SRT/RTMP;
- нужны Prometheus-метрики и HTTP API для оркестрации парка.
Схема связки — см. go2rtc.md, раздел «Связка MediaMTX + go2rtc».
Пример systemd и генератор конфига
См. config-examples.md.