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.