go2rtc — безкоштовний open-source сервер, який приймає відео з IP-камер, перетворює або ретранслює потоки та дозволяє переглядати їх у браузері, мобільних застосунках і системах автоматизації.
Його головна перевага — можливість організувати перегляд RTSP-камер через звичайний веббраузер без встановлення спеціалізованих програм або плагінів.
Офіційний репозиторій: https://github.com/AlexxIT/go2rtc
1. Для чого потрібен go2rtc?
Більшість IP-камер підтримують RTSP. Цей протокол чудово працює у VLC, відеореєстраторах і спеціалізованих програмах відеоспостереження, але сучасні браузери не відтворюють RTSP безпосередньо.
go2rtc працює як проміжний сервер:
IP-камера → RTSP → go2rtc → WebRTC / MSE / HLS → браузер
Наприклад, маємо вісім камер Dahua, Hikvision або інших виробників. Замість встановлення програм на кожен комп’ютер можна створити локальну вебсторінку, яка показуватиме всі камери одночасно.
Типові сценарії використання:
- Відеоспостереження з переглядом через Chrome, Safari, Firefox або Edge.
- Відеопанелі з 4, 8, 16 чи більшою кількістю камер.
- Інтеграція з Home Assistant, Frigate і власними вебзастосунками.
- Перегляд камер на телевізорах із браузером.
- Ретрансляція одного камерного потоку кільком клієнтам.
- Отримання окремих кадрів із камер через HTTP API.
- Інтеграція в Python-сервіси та системи автоматизації.
Важливо: go2rtc — не повноцінна система відеореєстрації NVR. Для постійного запису, архіву, пошуку подій і детекції руху зазвичай використовують додаткові компоненти.
2. Основні можливості
go2rtc підтримує RTSP, WebRTC, HTTP, MJPEG, RTMP та низку інших способів отримання й передачі відео.
Сервер може передавати потік без повного перекодування, якщо кодеки джерела сумісні з обраним способом перегляду. Це суттєво зменшує навантаження на процесор.
Найважливіші функції:
- WebRTC: відтворення відео з низькою затримкою.
- MSE: відтворення відео у сумісних браузерах.
- RTSP-сервер: повторна видача потоків іншим програмам.
- FFmpeg: перетворення несумісних форматів аудіо та відео.
- HTTP API: можливість інтеграції з Python, JavaScript та іншими програмами.
- Two-way audio: двостороннє аудіо з підтримуваними камерами.
- WebUI: налаштування камер через вебінтерфейс.
Затримка залежить від протоколу, кодека, мережі, буферизації та клієнта. WebRTC за сприятливих умов може забезпечувати дуже низьку затримку, але гарантувати її повну відсутність не можна.
3. Системні вимоги
Для простого ретранслювання H.264-потоків без транскодування часто достатньо невеликого Linux-сервера, міні-ПК або Raspberry Pi.
Орієнтовна конфігурація для невеликої системи:
| Компонент | Рекомендація |
|---|---|
| ОС | Ubuntu Server, Debian, Windows або Docker |
| Процесор | x86-64 або ARM64 |
| RAM | 1–2 ГБ для невеликого стенду |
| Диск | Невеликий обсяг для програми та конфігурації |
| Мережа | Ethernet, бажано Gigabit |
| GPU | Не обов’язковий без транскодування |
Це орієнтири, а не офіційні мінімальні вимоги. Реальні ресурси залежать від кількості потоків, роздільної здатності, бітрейту та кількості глядачів.
4. Встановлення через Docker Compose
Docker — один із найзручніших варіантів встановлення go2rtc на сервері Linux.
Він дозволяє ізолювати програму, зберігати налаштування в окремому каталозі та швидко оновлювати контейнер.
Крок 1. Створюємо директорію
На Ubuntu або Debian:
sudo mkdir -p /opt/go2rtc/config
cd /opt/go2rtc
Крок 2. Створюємо конфігурацію
Створіть файл /opt/go2rtc/config/go2rtc.yaml:
api:
listen: ":1984"
username: "admin"
password: "CHANGE_THIS_PASSWORD"
local_auth: true
rtsp:
listen: ":8554"
webrtc:
listen: ":8555"
streams:
camera1: "rtsp://viewer:CAMERA_PASSWORD@192.168.1.50:554/Streaming/Channels/101"
Тут використано приклад RTSP-адреси Hikvision. Для Dahua, Tapo або іншого виробника URL буде відрізнятися.
Обов’язково замініть пароль адміністратора та облікові дані камер.
Обмежте доступ до файлу:
sudo chmod 600 /opt/go2rtc/config/go2rtc.yaml
Зверніть увагу: при використанні bind mount контейнер повинен мати можливість читати файл. Якщо контейнер працює від іншого UID, скоригуйте власника та дозволи.
Крок 3. Створюємо docker-compose.yml
Файл /opt/go2rtc/docker-compose.yml:
services:
go2rtc:
image: alexxit/go2rtc:latest
container_name: go2rtc
network_mode: host
restart: unless-stopped
environment:
TZ: Europe/Kyiv
volumes:
- ./config:/config
Режим network_mode: host рекомендований для Linux-серверів, особливо коли використовуються WebRTC, UDP або протоколи виявлення камер.
Важливо: Docker host networking не означає захищений доступ. API і RTSP потрібно обмежувати правилами firewall та автентифікацією. На Docker Desktop у Windows і macOS поведінка host networking відрізняється від звичайного Linux.
Крок 4. Запускаємо сервер
cd /opt/go2rtc
sudo docker compose config
sudo docker compose up -d
sudo docker compose ps
Переглянути журнали:
sudo docker compose logs --tail=100 go2rtc
Перевірити відповідь HTTP API:
curl -u admin:CHANGE_THIS_PASSWORD \
http://127.0.0.1:1984/api/streams
Команда має повернути JSON зі списком налаштованих потоків. Наявність потоку в списку ще не гарантує, що камера доступна та передає відео.
Крок 5. Відкриваємо WebUI
На сервері:
http://localhost:1984/
З іншого комп’ютера в дозволеній локальній мережі:
http://192.168.1.10:1984/
Тут 192.168.1.10 — приклад IP сервера go2rtc.
5. Docker без host network: режим bridge
Іноді потрібно запускати go2rtc поряд з іншими контейнерами, не використовуючи мережу хоста.
Тоді можна опублікувати необхідні порти:
services:
go2rtc:
image: alexxit/go2rtc:latest
container_name: go2rtc
restart: unless-stopped
ports:
- "1984:1984/tcp"
- "8554:8554/tcp"
- "8555:8555/tcp"
- "8555:8555/udp"
environment:
TZ: Europe/Kyiv
volumes:
- ./config:/config
Для клієнтів WebRTC, які підключаються з іншої мережі, може знадобитися додаткова конфігурація адрес candidates, NAT та firewall. Просто опублікувати порт іноді недостатньо.
Якщо RTSP-сервер go2rtc не використовується іншими системами, порт 8554 можна не публікувати.
Не відкривайте порт 1984 безпосередньо в Інтернет.
6. Встановлення на Ubuntu / Debian без Docker
go2rtc можна запускати як звичайну програму Linux без контейнерів.
Крок 1. Завантаження
Для системи Linux x86-64:
sudo apt update
sudo apt install -y curl ca-certificates
sudo mkdir -p /opt/go2rtc
sudo curl -fL \
https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64 \
-o /opt/go2rtc/go2rtc
sudo chmod 755 /opt/go2rtc/go2rtc
Для ARM64 використовуйте відповідний файл go2rtc_linux_arm64.
Перед використанням у production бажано зафіксувати конкретну версію релізу та перевірити контрольні суми завантаженого файлу, якщо вони опубліковані.
Крок 2. Створення конфігурації
sudo nano /opt/go2rtc/go2rtc.yaml
Приклад мінімального локального конфіга:
api:
listen: "127.0.0.1:1984"
rtsp:
listen: "127.0.0.1:8554"
streams:
camera1: "rtsp://viewer:CAMERA_PASSWORD@192.168.1.50:554/Streaming/Channels/101"
Крок 3. Перевірка запуску
cd /opt/go2rtc
sudo ./go2rtc -c /opt/go2rtc/go2rtc.yaml
Для постійної роботи замість запуску з термінала краще використати systemd.
Крок 4. Системний користувач і systemd
Створюємо окремого користувача:
sudo useradd --system --no-create-home \
--shell /usr/sbin/nologin go2rtc
Налаштовуємо власника каталогу:
sudo chown -R go2rtc:go2rtc /opt/go2rtc
sudo chmod 700 /opt/go2rtc
sudo chmod 600 /opt/go2rtc/go2rtc.yaml
Створюємо службу:
sudo nano /etc/systemd/system/go2rtc.service
Вміст:
[Unit]
Description=go2rtc Camera Streaming Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=go2rtc
Group=go2rtc
WorkingDirectory=/opt/go2rtc
ExecStart=/opt/go2rtc/go2rtc -c /opt/go2rtc/go2rtc.yaml
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
Активуємо:
sudo systemctl daemon-reload
sudo systemctl enable --now go2rtc
sudo systemctl status go2rtc
Перевірка журналів:
sudo journalctl -u go2rtc -n 100 --no-pager
Тепер сервер автоматично запускатиметься після перезавантаження Linux.
Примітка: наведена конфігурація слухає API тільки на 127.0.0.1. Для доступу з іншого комп’ютера знадобиться SSH-тунель або правильно захищений reverse proxy.
7. Встановлення на Windows 10/11
Для Windows необов’язково використовувати Docker або WSL.
- Відкрийте сторінку релізів: https://github.com/AlexxIT/go2rtc/releases
- Завантажте архів
go2rtc_win64.zip. - Розпакуйте його в
C:\go2rtc. - Створіть поряд із виконуваним файлом
go2rtc.yaml. - Запустіть програму.
Приклад PowerShell:
New-Item -ItemType Directory -Force C:\go2rtc
Invoke-WebRequest `
-Uri "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_win64.zip" `
-OutFile "$env:TEMP\go2rtc_win64.zip"
Expand-Archive `
-Path "$env:TEMP\go2rtc_win64.zip" `
-DestinationPath "C:\go2rtc" `
-Force
Set-Location C:\go2rtc
Після створення конфігурації:
.\go2rtc.exe -c .\go2rtc.yaml
Відкрийте браузер:
http://localhost:1984
Для роботи як служби Windows можна використовувати NSSM або інший менеджер служб. У production потрібно окремо налаштувати обліковий запис служби, firewall та автозапуск.
8. Встановлення в Home Assistant
go2rtc можна використовувати як окремий сервер або через інтеграцію Home Assistant.
Один із доступних варіантів — add-on із репозиторію:
https://github.com/AlexxIT/hassio-addons
Загальна процедура:
- Відкрити налаштування додатків Home Assistant.
- Додати репозиторій додатків AlexxIT, якщо ваша інсталяція підтримує add-ons.
- Знайти та встановити go2rtc.
- Налаштувати потрібні камери.
- Використовувати потоки в Home Assistant.
Також існує WebRTC Camera custom integration, яка може працювати з окремим сервером go2rtc.
9. Налаштування IP-камер Dahua та Hikvision
Dahua
Приклад основного потоку:
streams:
dahua_main: "rtsp://viewer:CAMERA_PASSWORD@192.168.1.101:554/cam/realmonitor?channel=1&subtype=0"
Приклад додаткового потоку:
streams:
dahua_sub: "rtsp://viewer:CAMERA_PASSWORD@192.168.1.101:554/cam/realmonitor?channel=1&subtype=1"
Зазвичай subtype=0 означає основний потік, а subtype=1 — допоміжний, але це залежить від моделі та конфігурації камери.
Hikvision
streams:
hikvision_main: "rtsp://viewer:CAMERA_PASSWORD@192.168.1.102:554/Streaming/Channels/101"
hikvision_sub: "rtsp://viewer:CAMERA_PASSWORD@192.168.1.102:554/Streaming/Channels/102"
У багатьох камерах Hikvision 101 позначає основний потік першого каналу, а 102 — додатковий.
Обліковий запис viewer у прикладах умовний. Створіть користувача з мінімальними правами, необхідними для перегляду відео.
10. Основні мережеві порти
| Порт | Протокол | Призначення |
|---|---|---|
| 1984 | TCP | WebUI та HTTP API |
| 8554 | TCP | RTSP-сервер |
| 8555 | TCP | WebRTC |
| 8555 | UDP | WebRTC |
Це стандартні порти, які можна змінити через конфігурацію.
Порт RTSP камери (часто 554) — окремий від порту RTSP-сервера go2rtc (за замовчуванням 8554).
11. Перевірка потоків через API
go2rtc має HTTP API, що дозволяє отримати інформацію про потоки та інтегрувати сервер з іншими програмами.
Приклад запиту:
curl -u admin:CHANGE_THIS_PASSWORD \
http://127.0.0.1:1984/api/streams
Для одного потоку:
curl -G \
-u admin:CHANGE_THIS_PASSWORD \
--data-urlencode "src=camera1" \
http://127.0.0.1:1984/api/streams
RTSP-потік go2rtc можна відкрити у VLC:
rtsp://192.168.1.10:8554/camera1
Це працює, якщо RTSP-сервер увімкнений, доступний у мережі та правила безпеки дозволяють підключення.
12. Інтеграція з Python
Для роботи з go2rtc з Python існує бібліотека go2rtc-client від home-assistant-libs.
Репозиторій:
https://github.com/home-assistant-libs/python-go2rtc-client
Встановлення в ізольованому середовищі:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install go2rtc-client
Альтернативний варіант:
uv pip install go2rtc-client
Варто розрізняти два компоненти:
- go2rtc — сервер, який отримує та передає відеопотоки.
- go2rtc-client — Python-бібліотека для взаємодії із сервером.
Для простих запитів необов’язково використовувати спеціалізовану бібліотеку. Достатньо стандартного HTTP-клієнта Python.
Приклад: отримання списку камер
Наступний приклад використовує лише стандартну бібліотеку Python і не потребує сторонніх пакетів.
import base64
import json
import os
from urllib.request import Request, urlopen
GO2RTC_URL = os.getenv(
"GO2RTC_URL",
"http://127.0.0.1:1984",
)
USER = os.environ["GO2RTC_USER"]
PASSWORD = os.environ["GO2RTC_PASSWORD"]
credentials = f"{USER}:{PASSWORD}".encode()
token = base64.b64encode(credentials).decode()
request = Request(
f"{GO2RTC_URL.rstrip('/')}/api/streams",
headers={
"Authorization": f"Basic {token}",
"Accept": "application/json",
},
)
with urlopen(request, timeout=10) as response:
streams = json.load(response)
for name in streams:
print(f"Камера: {name}")
Перед запуском:
export GO2RTC_USER="admin"
export GO2RTC_PASSWORD="YOUR_PASSWORD"
export GO2RTC_URL="http://127.0.0.1:1984"
python3 check_cameras.py
Для віддаленого доступу використовуйте HTTPS або захищений тунель. HTTP Basic Authentication не шифрує пароль — він лише кодується у Base64.
У реальній програмі варто додати обробку помилок підключення, HTTP 401/403, тайм-аутів та недоступних камер.
13. Як організувати відеопанель на 8 камер
Один із найцікавіших варіантів застосування — власний дашборд відеоспостереження.
Архітектура:
IP-камери Dahua / Hikvision
|
| RTSP
v
Linux-сервер
|
| go2rtc
|
+------+------+
| |
WebRTC RTSP API
| |
v v
Веббраузер Інші сервіси
|
v
Панель 8 камер
Рекомендується використовувати допоміжні потоки камер для загального перегляду.
Наприклад:
- Основний потік: 1920×1080 або вища роздільна здатність.
- Допоміжний потік: 640×360 або 704×576.
- Перегляд усіх камер: допоміжні потоки.
- Перегляд однієї камери на весь екран: основний потік.
Це дозволяє зменшити навантаження на браузер, сервер та мережу.
Для створення вебсторінки можна використати HTML, CSS, JavaScript і офіційні вебкомпоненти або приклади go2rtc.
Не варто просто вставляти відкритий WebUI адміністратора go2rtc у публічну сторінку. Краще створити окремий інтерфейс перегляду, де користувачі не матимуть доступу до конфігурації та адміністративних API.
14. Безпека go2rtc
Це один із найважливіших розділів.
За замовчуванням інтерфейс керування та потоки go2rtc можуть бути доступні іншим пристроям у мережі.
Помилка конфігурації може відкрити не тільки відео, але й дані авторизації камер.
Рекомендації:
- Не публікувати порт 1984 безпосередньо в Інтернет.
- Обмежувати доступ через firewall, VPN або reverse proxy.
- Використовувати окремого користувача камер тільки з правами перегляду.
- Не зберігати справжні паролі в публічному Git-репозиторії.
- Не використовувати
privileged: trueбез технічної необхідності. - Не відкривати RTSP-сервер для сторонніх мереж без захисту.
- Встановлювати актуальні стабільні версії та перевіряти повідомлення про вразливості.
- Для публічного вебзастосунку відокремити сервіс перегляду від адміністративного API.
Для локального сервера без потреби в зовнішньому API можна використати:
api:
listen: "127.0.0.1:1984"
rtsp:
listen: "127.0.0.1:8554"
webrtc:
listen: ":8555"
Цей приклад підходить для нативного запуску Linux або Docker із host networking, де localhost відповідає хостовій мережі.
Для Docker bridge networking потрібно враховувати окремий мережевий простір контейнера.
15. Типові проблеми та діагностика
Камера не відображається
Перевірте RTSP-адресу у VLC або FFmpeg, облікові дані, IP-адресу камери та доступність порту 554.
Є звук, але немає зображення
Можлива несумісність відеокодека з браузером. Спробуйте змінити H.265 на H.264 у налаштуваннях камери або скористатися FFmpeg.
Висока затримка
Перевірте протокол відтворення, параметри потоку, буферизацію та якість мережі. Для інтерактивного перегляду зазвичай варто починати з WebRTC.
Високе навантаження CPU
Переконайтеся, що go2rtc не виконує зайве перекодування. Якщо перекодування необхідне, розгляньте апаратне прискорення.
WebRTC не працює через VPN або NAT
Перевірте доступність TCP/UDP 8555, IP-адреси WebRTC candidates та маршрутизацію між клієнтом і сервером.
Після оновлення контейнер не запускається
Перегляньте журнал:
docker compose logs --tail=200 go2rtc
Перед оновленням бажано зберегти конфігурацію та знати попередній тег образу.
16. Оновлення Docker-контейнера
cd /opt/go2rtc
sudo cp -a config config.backup
sudo docker compose pull
sudo docker compose up -d
sudo docker compose ps
sudo docker compose logs --tail=100 go2rtc
Для production рекомендується фіксувати конкретну перевірену версію образу, а не автоматично переходити на latest.
17. Висновок
go2rtc — практичний інструмент для створення локального сервера відеопотоків.
Він підходить для невеликих домашніх систем відеоспостереження, приватних серверів, майстерень, офісів і великих систем, у яких необхідно розділити джерела відео та інтерфейс перегляду.
Для нового проєкту найчастіше варто почати з Linux + Docker Compose. Якщо необхідна максимальна простота й мінімум компонентів, можна встановити нативний бінарний файл та налаштувати systemd.
Головне — правильно спроєктувати доступ до камер, не відкривати адміністративний API без захисту та використовувати транскодування тільки там, де воно справді потрібне.
Офіційні джерела
- go2rtc: https://github.com/AlexxIT/go2rtc
- Docker: https://github.com/AlexxIT/go2rtc/tree/master/docker
- HTTP API: https://github.com/AlexxIT/go2rtc/tree/master/internal/api
- Python client: https://github.com/home-assistant-libs/python-go2rtc-client
- Home Assistant add-on: https://github.com/AlexxIT/hassio-addons
- Релізи: https://github.com/AlexxIT/go2rtc/releases