Свой NVR на одноплатнике.
Без облачной подписки
zorcam-nvr превращает Raspberry Pi и обычные IP-камеры в видеорегистратор: Live по WebRTC, детектор движения, ролики и снимки, push на iPhone, роли пользователей. Записи — на вашем диске. Python без фреймворков, ffmpeg, go2rtc, systemd. Исходники открыты для чтения.
==> Packages OK ffmpeg, python3-pil, python3-cryptography, curl ==> go2rtc 1.9.14 OK installed v1.9.14 (go2rtc_linux_arm64) ==> systemd restarted zorcam-nvr-go2rtc restarted zorcam-nvr-gallery restarted zorcam-nvr-capture ==> Verification OK camera front connects, codec H.264 OK WebRTC listens on port 8555 (TCP and UDP) OK gallery answers on port 80 Done. Now open http://192.168.1.60/ — the setup wizard asks for the cameras.
Как устроено
Три сервиса под systemd с watchdog и лимитами памяти. Одно подключение к каждой камере — у go2rtc; всё остальное берёт поток у него. Пароли камер не попадают в аргументы процессов.
IP-камера ──RTSP──▶ go2rtc ──WebRTC :8555──────────────────▶ браузер / iPhone (Live) (H.264) │ └─HLS (запасной) │ rtsp://127.0.0.1:8554/<id>[.sub] ▼ zorcam-nvr-capture процесс на камеру, надзиратель перезапускает зависшие ffmpeg → JPEG ключевых кадров → детектор (1/8, серый, 160×90) ├─ снимки на диск раз в N с ├─ ролики: из кадров в памяти или из кусков потока без перекодирования └─ сигнал галерее ──▶ zorcam-nvr-gallery :80 http.server · роли · мастер · push (VAPID) мониторинг · очистка по срокам опционально: zorcam-nvr-cloud ── frpc / wss:443 ──▶ облако Zorcam (доступ извне)
// детектор
Анализирует только ключевые кадры: JPEG декодируется сразу в 1/8 и сравнивается в 160×90. Задержка реакции ≈ интервал ключевых кадров. Второй (облегчённый) поток камеры — для разгрузки Pi.
// надёжность
systemd watchdog, MemoryMax/CPUQuota в юнитах,
нарастающая пауза переподключений, ограниченная очередь кодирования, временное — в /dev/shm, чтобы беречь SD.
// без зависимостей
Только стандартная библиотека Python и пакеты Debian (python3-pil,
python3-cryptography, ffmpeg). Никаких pip, node и контейнеров на Pi.
// доступ
Роли admin / viewer / liveviewer, камеры
видны только тем, кому разрешены. PBKDF2, сессии, CSRF.
// уведомления
Web Push (VAPID + RFC 8291) на iPhone с экрана «Домой»: движение по камере, проблемы и восстановление. Датчики движения для «Дома с Алисой».
// диагностика
diagnose.py читает журналы: просадки питания, троттлинг, SD-карта,
счётчик high в memory.events. debug.sh save — архив без паролей.
Железо
Что проверено и на чём стоит пробовать. Видео плата не перекодирует (кроме роликов из ключевых кадров), поэтому важнее память и стабильное питание, чем частота.
| Плата | Статус | Сколько камер | Заметки |
|---|---|---|---|
| Raspberry Pi 3B / 3B+ | проверено | 4–5 со вторым потоком | 1 ГБ: следите за high в памяти детектора. Блок питания от 2.5 А |
| Raspberry Pi 4 / 5 | должно работать | больше | Тот же Debian/Raspberry Pi OS 64-бит. Отчёты приветствуются |
| Orange Pi Zero 3 (2 ГБ) | экспериментально | оценка: как Pi 3 и больше | Armbian на Debian 12/13. Нет vcgencmd — данные о питании «n/a»; шаг установщика с cmdline.txt пропускается. Пока не проверено нами |
| x86 тонкий клиент | должно работать | зависит от CPU | Debian 13 amd64, установщик берёт go2rtc для x86_64 |
| Pi Zero 2 W | мало памяти | 1–2 | 512 МБ, без Ethernet |
// камеры
- RTSP, видео H.264 (H.265 — только запись «весь поток», не Live в браузере)
- второй поток камеры (
sub) сильно разгружает Pi - поиск по ONVIF прямо из мастера
// носитель
- SD-карта работает, но запись на неё сведена к минимуму
- для круглосуточной записи лучше USB-SSD
- сроки хранения кадров и роликов — для каждой камеры
Установка
Raspberry Pi OS Lite (Debian 13, 64-бит), пользователь с sudo, интернет. Скрипт идемпотентный:
повторный запуск обновляет только изменённое.
# 1. скачать sudo apt update && sudo apt install -y git git clone https://github.com/davydovv-creator/zorcam-nvr-community.git ~/zorcam-nvr # 2. поставить: пакеты, go2rtc, сервисы zorcam-nvr-* ~/zorcam-nvr/app/install.sh # 3. открыть http://<ip-pi>/ — мастер: пароль admin, камеры # обновить cd ~/zorcam-nvr && git pull && ./app/install.sh # что происходит python3 ~/zorcam-nvr/app/diagnose.py journalctl -u zorcam-nvr-capture -n 50
.deb и apt-репозиторий на zorcam.ru — следом: sudo apt install zorcam-nvr.Ссылки
repo ↗
Исходники ядра: снимок каждого релиза.
releases ↗
Архивы, позже — пакеты .deb и заметки к версиям.
issues ↗
Баги, идеи, отчёты о работе на вашем железе.
CLA.md ↗
Соглашение участника — нужно для pull request.
zorcam.ru →
Для тех, кому нужен результат: приложение, облако, Zorcam Box.
mail →
zorcam@yandex.ru — вопросы, лицензия, уязвимости (не в публичных issue).
Лицензия и участие
Честно о модели: это source-available, а не open source. Код можно читать, ставить и бесплатно использовать на своих устройствах — в том числе в своём бизнесе. Нельзя продавать программу или устройства с ней и распространять изменённые сборки без договора. Issue и pull request принимаем: каждый PR читаем, но принять не обязаны; принятое переносится в основной репозиторий и выходит в следующем релизе. Для PR нужно подписать CLA — бот попросит сам.