Skip to main content

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 по умолчанию — поток с камеры живёт, только пока смотрят.

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

ПортНазначение
1984HTTP API + веб-панель + WebRTC signaling
8554RTSP (сюда ходит iVMS)
8555WebRTC 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.