go2rtc
Лицензия: MIT. Один бинарник, без зависимостей. Автор из экосистемы Home Assistant / Frigate.
Что это
Потоковый ретранслятор с упором на браузерный WebRTC. Забирает RTSP с камеры (on-demand), раздаёт по WebRTC/MSE (браузер), RTSP (iVMS), а также RTMP/HLS. Не транскодирует (кроме случаев, когда явно нужно — умеет и это через ffmpeg).
Почему стартовать с него
- Раздаёт и RTSP (:8554), и WebRTC (:1984) — один бинарник закрывает и iVMS, и браузер сразу.
- Лучший в классе WebRTC — задержка < 1 с, что даёт «моментальное переключение».
- Встроенная веб-панель со списком потоков (техническая, но для быстрого «зайти-посмотреть» годится).
- Отлично дружит именно с Hikvision, умеет двустороннее аудио.
- On-demand по умолчанию — поток с камеры живёт, только пока смотрят.
Порты по умолчанию
| Порт | Назначение |
|---|---|
| 1984 | HTTP API + веб-панель + WebRTC signaling |
| 8554 | RTSP (сюда ходит iVMS) |
| 8555 | WebRTC TCP (для проброса через firewall) |
Минимальный конфиг
streams:
cam0001: rtsp://user:pass@10.x.x.1:554/Streaming/Channels/101
cam0001_sub: rtsp://user:pass@10.x.x.1:554/Streaming/Channels/102
api:
listen: ":1984"
rtsp:
listen: ":8554"
URL клиентам:
- iVMS / VLC:
rtsp://<server>:8554/cam0001 - Браузер:
http://<server>:1984/stream.html?src=cam0001 - Встраиваемый плеер (для HTML-мозаики):
http://<server>:1984/webrtc.html?src=cam0001
On-demand и «прогрев» субпотоков
go2rtc забирает поток только при первом клиенте и держит, пока есть зрители. Для «моментального» открытия сетки руководства — прогревать субпотоки. Способ: держать в конфиге второй источник и/или дёргать его keepalive-запросом. Практично — собрать HTML-мозаику на субпотоках (102): при загрузке страницы все плитки подключаются разом, дальше переключение мгновенно.
Связка MediaMTX + go2rtc
Смысл при серьёзной нагрузке: MediaMTX — «ядро», держит все камеры и обслуживает массу RTSP-клиентов (iVMS). go2rtc подключается к MediaMTX как обычный клиент и делает WebRTC для браузера.
Камеры ──▶ MediaMTX (rtsp://mtx:8554/cam0001) ──▶ go2rtc ──▶ браузер (WebRTC)
└──────────────────────────────────▶ iVMS (RTSP напрямую)
Конфиг go2rtc в этом случае:
streams:
cam0001: rtsp://127.0.0.1:8554/cam0001 # источник — локальный MediaMTX
On-demand работает по цепочке: никто не смотрит → ни go2rtc, ни MediaMTX камеру не дёргают. Оба бинарника живут на одной тачке, не мешают друг другу. Миграция с «только go2rtc» безболезненна — источники в конфиге меняются с адреса камеры на адрес MediaMTX.