Hikvision Camera Manager
Веб-приложение для управления IP-камерами Hikvision и HiWatch через браузер. Разработано специально для работы в локальной сети, для доступа к интерфейсу не требуется Internet Explorer — современный браузер на основе Chromium/Firefox/Safari.
Начиная с версии 2.0 приложение не использует проприетарный SDK (HCNetSDK, libhcnetsdk.so) — только открытые протоколы камер (ISAPI/HTTP, RTSP) и воспроизведение протокола работы через порт 8000 на чистом Python. Бинарных модулей нет, архитектура процессора сервера не важна.
Возможности
-
🔍 Поиск камер в локальной сети -
🎥 Просмотр live-видео в реальном времени через HLS с fallback на MJPEG -
📼 Архивные записи с фильтром по дате и времени -
⬇ ️ Пакетное скачивание архива с прогрессом (MP4 через FFmpeg)- быстрый путь: фирменный порт-8000 протокол (~26× realtime, побитово та же выгрузка, что даёт SDK) — используется автоматически, если камера отвечает на порту 8000;
- fallback: RTSP-playback (~1× realtime), если порт 8000 недоступен
-
💾 Докачка и кэш — скачанные файлы не перекачиваются повторно -
📷 Снимки экрана в HD-качестве -
🔐 Авторизация в веб-интерфейсе -
🔒 HTTPS из коробки — автоматическая генерация самоподписанного сертификата
Совместимость
Протестировано с камерами:
- HiWatch DS-I452S и аналогичные модели
- Hikvision с совместимыми прошивками
Поддерживаемые протоколы:
- ISAPI (HTTP, Digest-аутентификация) — поиск, архив, снимки, MJPEG
- RTSP через FFmpeg — live HLS и скачивание архива (fallback)
-
порт 8000 (репликация протокола HCNetSDK на чистом Python) — быстрое
скачивание архива; см.
docs/phase0-isapi-vs-sdk.mdв репозитории пакета
⚠ ️ Камера должна поддерживать ISAPI. Некоторые функции могут отличаться в зависимости от модели и версии прошивки.
Требования
- ОС: Linux (архитектура не важна — бинарных модулей нет)
- Python: 3.8+
- FFmpeg: 4.4+ (рекомендуется 7.x)
Python-зависимости
pip3 install flask werkzeug cryptography --user
cryptography нужна только для быстрого порта-8000 пути скачивания
(эфемерный RSA-handshake входа). Без неё приложение работает, скачивание
архива автоматически идёт через RTSP.
Установка
- Клонировать репозиторий:
git clone https://hub.mos.ru/i/hik.git
cd hik
-
Установить зависимости (см. выше).
-
Запустить:
python3 hikvison.py
По умолчанию пароль входа выводится при запуске программы. Обязательно смените его через:
python3 hikvison.py --modify
После запуска откройте в браузере:
https://<ip-адрес-сервера>:5000
Переменные окружения
| Переменная | Назначение |
|---|---|
HIK_DATA_DIR |
Каталог состояния (БД, кэш, сертификаты) вместо папки скрипта |
HIK_DISABLE_PORT8000 |
Если установлена (любое значение) — отключить быстрый путь скачивания, всегда RTSP |
Использование
CLI-аргументы
| Аргумент | Описание |
|---|---|
-v, --version
|
Вывести версию |
-r, --reset
|
Сбросить пароль входа на значение по умолчанию |
-m, --modify
|
Изменить пароль входа |
-p, --port
|
Задать порт (по умолчанию 5000) |
--no-https |
Запустить без HTTPS (только для диагностики) |
Добавление камеры
- Нажмите «Добавить камеры».
- Укажите диапазон IP, порт, логин и пароль.
- Нажмите «Начать поиск».
- Выберите найденные камеры и сохраните.
Архив и скачивание
- Выберите камеру в списке слева.
- Перейдите на вкладку «Архив».
- Выберите дату и нужные записи.
- Нажмите «Скачать выбранные».
Скачанные записи конвертируются в MP4 и объединяются, если выбрано несколько. Скорость: при доступном порте 8000 — около 26× realtime, иначе — около realtime через RTSP.
Live-просмотр
- Выберите камеру.
- Перейдите на вкладку «Live».
- Используйте кнопки «HD / SD» для переключения потока и «HLS / MJPEG» для смены режима.
HTTPS и сертификаты
Приложение автоматически использует HTTPS:
- Если в папке
cert/есть пара сертификат + ключ, используется она. - Если сертификатов нет — генерируется самоподписанный сертификат.
Поддерживаемые имена файлов в папке cert/:
cert/
├── certificate.crt + private.key
├── cert.pem + key.pem
├── server.crt + server.key
├── fullchain.pem + privkey.pem
└── certificate.pem + private.key
Чтобы использовать свой сертификат, положите файлы в папку cert/ с одной из перечисленных пар имён. При отсутствии сертификатов программа сама создаст cert/certificate.crt и cert/private.key.
⚠ ️ При использовании самоподписанного сертификата браузер будет предупреждать о небезопасном соединении. Это нормально. Для production разместите сертификат, выданный доверенным CA, или добавьте самоподписанный сертификат в доверенные корневые сертификаты системы.
Запуск через systemd (от текущего пользователя)
- Создайте файл сервиса:
mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/hikvison.service
- Вставьте содержимое (путь к папке проекта отредактируйте при необходимости):
[Unit]
Description=Hikvision Camera Manager
After=network.target
[Service]
Type=simple
WorkingDirectory=%h/hik
ExecStart=/usr/bin/python3 %h/hik/hikvison.py
Restart=on-failure
[Install]
WantedBy=default.target
- Перезагрузите конфигурацию systemd, включите и запустите сервис:
systemctl --user daemon-reload
systemctl --user enable --now hikvison
- Проверить статус:
systemctl --user status hikvison
- Просмотр логов:
journalctl --user -u hikvison -f
Структура проекта
.
├── hikvison.py # Основной Flask backend
├── isapi_client.py # ISAPI-доступ (Digest, поиск, playback-URL)
├── port8000.py # Быстрое скачивание: репликация протокола порта 8000
├── templates/
│ ├── index.html # Основной интерфейс
│ └── login.html # Страница входа
├── static/
│ ├── hls.min.js # Локальная копия hls.js
│ └── script.js # Frontend логика
├── cert/ # TLS-сертификаты
├── upload/ # Временные файлы и кэш
├── cameras.db # SQLite база камер
├── port8000-protocol.md # Спецификация протокола Hikvision для 8000 порта
└── README.md # Этот файл
Решение проблем
Браузер предупреждает о небезопасном соединении
Это нормально для самоподписанного сертификата. Используйте свой сертификат, выданный доверенным CA, или добавьте самоподписанный сертификат в доверенные корневые сертификаты системы.
Скачивание идёт медленно (около realtime)
Проверьте, что порт 8000 на камере доступен серверу (nc -zv <ip-камеры> 8000) и установлен пакет cryptography. Если порт закрыт политикой сети, приложение использует RTSP — это ожидаемо. Принудительно выключить быстрый путь можно переменной HIK_DISABLE_PORT8000.