Skip to main content

MediaMTX

Лицензия: MIT. Один бинарник на Go, без зависимостей.

Что это​

Ретранслятор реального времени. Забирает поток из источника (RTSP/RTMP/…), раздаёт его одновременно по RTSP, WebRTC, HLS, SRT, RTMP. Не транскодирует — ремультиплексирует, поэтому почти не грузит CPU.

Сильные стороны под наш кейс​

  • sourceOnDemand — поток с камеры забирается только когда его кто-то смотрит. Для 1000+ камер критично: не держим тысячу активных потоков, если смотрят 50.
  • Масштабируется на сотни одновременных RTSP-сессий — хорошее «ядро».
  • HTTP API (:9997) — динамически добавлять/удалять пути без рестарта.
  • Конфиг — простой YAML, пути генерятся скриптом из списка камер.

Порты по умолчанию​

ПортНазначение
8554RTSP (можно повесить на 554, если от root)
8888HLS (браузер)
8889WebRTC (браузер, низкая задержка)
8890SRT
1935RTMP
9997HTTP API (управление путями)
9998Prometheus-метрики

Любой меняется одной строкой в конфиге. Всё можно спрятать за 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.