H

hik

logo

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.

Установка

  1. Клонировать репозиторий:
git clone https://hub.mos.ru/i/hik.git
cd hik
  1. Установить зависимости (см. выше).

  2. Запустить:

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 (только для диагностики)

Добавление камеры

  1. Нажмите «Добавить камеры».
  2. Укажите диапазон IP, порт, логин и пароль.
  3. Нажмите «Начать поиск».
  4. Выберите найденные камеры и сохраните.

Архив и скачивание

  1. Выберите камеру в списке слева.
  2. Перейдите на вкладку «Архив».
  3. Выберите дату и нужные записи.
  4. Нажмите «Скачать выбранные».

Скачанные записи конвертируются в MP4 и объединяются, если выбрано несколько. Скорость: при доступном порте 8000 — около 26× realtime, иначе — около realtime через RTSP.

Live-просмотр

  1. Выберите камеру.
  2. Перейдите на вкладку «Live».
  3. Используйте кнопки «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 (от текущего пользователя)

  1. Создайте файл сервиса:
mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/hikvison.service
  1. Вставьте содержимое (путь к папке проекта отредактируйте при необходимости):
[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
  1. Перезагрузите конфигурацию systemd, включите и запустите сервис:
systemctl --user daemon-reload
systemctl --user enable --now hikvison
  1. Проверить статус:
systemctl --user status hikvison
  1. Просмотр логов:
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.