Удаленный просмотр и настройка конфигурации сетевой камеры Hikvision на основе SpringBoot+Hikvision SDK.
Удаленный просмотр и настройка конфигурации сетевой камеры Hikvision на основе SpringBoot+Hikvision SDK.

1 написано впереди

  • Встретились на работе, просто разобрались
  • Если вы недостаточно понимаете, пожалуйста, помогите мне исправить это.

У каждого есть только одна истинная ответственность: найти себя. Затем придерживайтесь этого в своем сердце до конца своей жизни, всем сердцем и никогда не останавливайтесь. Все остальные дороги непроходимы, человеческие побеги, трусливое возвращение к народным идеалам, дрейф, внутренние страхи - Герман Гессе, "Демиан"


2Устройство Haikang Просмотр и изменение конфигурации веб-камеры с помощью SDK

Существует простая необходимость удаленно изменить конфигурацию сетевой камеры Hikvision с помощью программы. Изображения могут захватываться через определенные промежутки времени и передаваться на назначенный сервер через FTP. Необходимо изменить следующие элементы конфигурации сетевой камеры:

  • FTP Конфигурация NET_DVR_SET_FTPCFG_V40,NET_DVR_GET_FTPCFG_V40
  • Снимок Конфигурация NET_DVR_GET_JPEG_CAPTURE_CFG,NET_DVR_SET_JPEG_CAPTURE_CFG(Размер изображения и т. д.,интервал времени)
  • План захвата Конфигурация NET_DVR_GET_SCHED_CAPTURECFG,NET_DVR_SET_SCHED_CAPTURECFG(每天什么时候Снимок)

Каталог проекта

Язык кода:javascript
копировать
X:.
├─main
│  ├─java
│  │  └─com
│  │      └─xtj
│  │          └─hikvisionsdkintegration
│  │              ├─config
│  │              ├─controller
│  │              ├─dto
│  │              ├─sdklib
│  │              ├─service
│  │              ├─task
│  │              └─util
│  └─resources

Адрес проекта: https://github.com/LIRUILONGS/Hikvision-sdk-Integration.

Вызывающий метод вызывается через интерфейс, поддерживающий Get,Post Способ

get Способ

Язык кода:javascript
копировать
http://127.0.0.1:8099/config/state/192.168.1.143
http://127.0.0.1:8099/config/ftp?ips=192.168.1.143,192.168.1.141,192.168.1.142
http://127.0.0.1:8099/config/ftp/status?ips=192.168.1.143,192.168.1.141,192.168.1.142

post Способ

Язык кода:javascript
копировать
curl --location --request POST 'http://127.0.0.1:8099/config/ftp' \
--header 'Content-Type: application/json' \
--data-raw ' [
    "192.168.1.143",
    "192.168.1.141",
    "192.168.1.142"
]'
Язык кода:javascript
копировать
curl --location --request POST 'http://127.0.0.1:8099/config/ftp/status' \
--header 'Content-Type: application/json' \
--data-raw ' [
    "192.168.1.143",
    "192.168.1.141",
    "192.168.1.142"
]

'

Предоставляет пользовательский интерфейс Swagger и документы интерфейса, которые можно вызывать напрямую.

Инструкции по настройке

Язык кода:javascript
копировать
server:
  port: 8099
logging:
  level:
    org:
      springframework.web: info
# Камера Конфигурация
CAMERA:
  username: "admin"
  password: "hik12345"
# ftp Конфигурация
FTP:
  username: "face"
  password: "face"
  serverIP: "110.110.110.110"
  serverPort: 21
  enableAnony: 0
  custdir: "face"
#СнимокConfiguration
snapshot:
  dwPicInterval: 4000 # Захват временного интервала 4s

развертывать

текущий SDK , window Вам необходимо скачать SDK Баова текущийпроект jar Поместите пакет в каталог того же уровня, Linux Нужно разместить /usr/lib/ под

Язык кода:javascript
копировать
java -jar  hikvision-sdk-integration-0.0.1-SNAPSHOT.jar

Докер способ

Язык кода:javascript
копировать
┌──[root@vms81.liruilongs.github.io]-[~/ftpconfig]
└─$ ls
Dockerfile  hikvision-sdk-integration-0.0.1-SNAPSHOT.jar  sdk  sdk.tar
┌──[root@vms81.liruilongs.github.io]-[~/ftpconfig]
└─$ cat Dockerfile

FROM openjdk:8u102-jdk

COPY ./hikvision-sdk-integration-0.0.1-SNAPSHOT.jar /
ADD  ./sdk.tar  /usr/lib/

# Установите команду при запуске контейнера
CMD ["java", "-jar" ,"hikvision-sdk-integration-0.0.1-SNAPSHOT.jar"]
┌──[root@vms81.liruilongs.github.io]-[~/ftpconfig]
└─$

Адрес склада: https://hub.docker.com/r/liruilong/hikvision-sdk-config-ftp

Язык кода:javascript
копировать
docker pull liruilong/hikvision-sdk-config-ftp
Язык кода:javascript
копировать
┌──[root@vms81.liruilongs.github.io]-[~/ftpconfig]
└─$ docker run --rm -it -p 8099:8099 hikvision-sdk-config-ftp:latest

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.5.3)

2023-10-12 17:20:41.184  INFO 1 --- [           main] c.x.h.HikvisionSdkIntegrationApplication : Starting HikvisionSdkIntegrationApplication v0.0.1-SNAPSHOT using Java 1.8.0_102 on bbb649e2e354 with PID 1 (/hikvision-sdk-integration-0.0.1-SNAPSHOT.jar started by root in /)
2023-10-12 17:20:41.186  INFO 1 --- [           main] c.x.h.HikvisionSdkIntegrationApplication : No active profile set, falling back to default profiles: default
2023-10-12 17:20:42.650  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8099 (http)
2023-10-12 17:20:42.669  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-10-12 17:20:42.669  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.50]
2023-10-12 17:20:42.764  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
.............
loop[2] find 2 mac and 0 ip
2023-10-12 17:20:44.151  INFO 1 --- [pool-1-thread-1] c.x.h.task.InitSdkTask                   : ============== InitSDK init success ====================
2023-10-12 17:21:02.986  INFO 1 --- [nio-8099-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-10-12 17:21:02.986  INFO 1 --- [nio-8099-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2023-10-12 17:21:02.988  INFO 1 --- [nio-8099-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 2 ms
2023-10-12 17:21:03.243  INFO 1 --- [nio-8099-exec-1] c.x.h.controller.ConfigController        : userId=0
2023-10-12 17:21:03.286  INFO 1 --- [nio-8099-exec-1] c.x.h.controller.ConfigController        : Получение параметров успешно
2023-10-12 17:21:03.287  INFO 1 --- [nio-8099-exec-1] c.x.h.controller.ConfigController        : ===========================  Информация об устройстве  ============================
2023-10-12 17:21:03.287  INFO 1 --- [nio-8099-exec-1] c.x.h.controller.ConfigController        : Имя устройства: IP CAMERA Серийный номер устройства: DS-IPC-B12HV2-IA20210812AACHG51171281.
2023-10-12 17:21:03.287  INFO 1 --- [nio-8099-exec-1] c.x.h.controller.ConfigController        : Название модели оборудования: DS-IPC-B12HV2-IA оборудование Модель: 31
2023-10-12 17:21:03.287  INFO 1 --- [nio-8099-exec-1] c.x.h.controller.ConfigController        : Количество аналоговых каналов: 1
2023-10-12 17:21:03.289  INFO 1 --- [nio-8099-exec-1] c.x.h.controller.ConfigController        : Номер версии программного обеспечения: [firstVersion:5, secondVersion:5, lowVersion:34]
2023-10-12 17:21:03.289  INFO 1 --- [nio-8099-exec-1] c.x.h.controller.ConfigController        : Дата сборки программного обеспечения: Сборка: 2021.7.14.

Использование Hikvision SDK

Руководство по разработке, загрузка динамической библиотеки:

https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10&id=5cda5902f47ae80dd41a54b7

  • Определите функции динамической библиотеки, которые необходимо вызвать
  • проходитьРуководство по разработкеПросмотрите соответствующее определение макроса,Структура
  • определение Макрос переменные,Преобразование структуры
  • Для написания необходимого функционала бизнеса вы можете обратиться к официальному демо.

Настройте FTP как демонстрационную версию:

Макрос переменные

Язык кода:javascript
копировать
    public static final int NET_DVR_GET_FTPCFG_V40 = 6162;  //Получаем информацию о FTP
    public static final int NET_DVR_SET_FTPCFG_V40 = 6163;  //Устанавливаем информацию о FTP

Преобразование структуры

Язык кода:javascript
копировать

    public static class NET_DVR_STRUCTHEAD extends Structure {
        public short wLength;        //длина структуры
        public byte byVersion ;    /*4 верхние и нижние цифры обозначают верхнюю и нижнюю версии соответственно. Последующее расширение будет зависеть от версии и длины, а длина различных версий будет ограничена*/.
        public byte byRes;
    }

    //Расширение именования изображений 2013-09-27
    public static class NET_DVR_PICTURE_NAME_EX extends Structure {
        public byte[] byItemOrder = new byte[PICNAME_MAXITEM];    /*    Массив Eucalyptus определяет правила именования файлов. */
        public byte byDelimiter;                    /*Разделитель, обычно '_'*/
        public byte[] byPicNamePrefix = new byte[PICNAME_PREFIX/*32*/];  //Пользовательский префикс имени изображения
    }

    public static class STRUCT_SELF_DOMAIN extends Structure {
        public byte[] szDomain = new byte[64];        //адрес сервера, можно использовать IPv4 IPv6 или доменное имя
        public byte[] byRes1 = new byte[80];
    }

    public static class STRUCT_SELF_IP extends Structure {
        public NET_DVR_IPADDR struIp = new NET_DVR_IPADDR(); /*IP-адрес: IPv4 IPv6-адрес, 144 байта*/
    }


    public static class UNION_SELF_FTPSEVER extends Union {
        public STRUCT_SELF_DOMAIN struDomain = new STRUCT_SELF_DOMAIN();
        public STRUCT_SELF_IP struAddrIP = new STRUCT_SELF_IP();
    }

    public static class NET_DVR_FTPCFG_V40 extends Structure {
        public NET_DVR_STRUCTHEAD struStruceHead = new NET_DVR_STRUCTHEAD();
        public byte byEnableFTP;            /*Включить ли функцию загрузки по ftp, 0-нет, 1-да*/
        public byte byProtocolType;             /*Тип протокола 0-FTP,1-SFTP*/
        public short wFTPPort;                /*порт*/
        public UNION_SELF_FTPSEVER unionServer = new UNION_SELF_FTPSEVER();
        public byte[] szUserName = new byte[32];            /*имя пользователя*/
        public byte[] szPassWORD = new byte[16];            /*пароль*/
        public byte[] szTopCustomDir = new byte[64];        /*Настраиваем каталог первого уровня*/
        public byte[] szSubCustomDir = new byte[64];        /*Пользовательский дополнительный каталог*/
        public byte byDirLevel;                /*0 = Нет структуры каталогов, сохранение непосредственно в корневом каталоге,    1 = использовать каталог уровня 1,2=использовать каталог уровня 2*/
        public byte byTopDirMode;            /* Каталог первого уровня, 0x1 = использоватьоборудованиеимя,0x2 = использоватьоборудование Число,0x3 = использоватьоборудованиеipадрес,
                                                    0x4=использовать точку мониторинга, 0x5=использовать время (год и месяц), 0x6-использовать пользовательское ,0x7=тип нарушения,0x8=направление,0x9=место*/
        public byte bySubDirMode;           /*Вторичный каталог, 0x1=использовать имя канала, 0x2=использовать номер канала 0x3=использовать время (год, месяц, день),
                                                    0x4=использовать номер полосы, 0x5-использовать пользовательский, 0x6=тип нарушения, 0x7=направление, 0x8=место, 0x9 = Номер парковочного места*/
        public byte byType;                    /* 0-сервер, 1-сервер*/
        public byte byEnableAnony;          /*Включить анонимность 0-нет 1 —*/
        public byte byAddresType;           /*0 использоватьIPV4、IPV6  1- использовать域имя*/        public byte byFTPPicType;           //0-зарезервировано, 1-правила именования снимков парковки
        public byte byPicArchivingInterval; //Интервал архивации изображений [1~30], 0 означает закрыто
        public NET_DVR_PICTURE_NAME_EX struPicNameRule = new NET_DVR_PICTURE_NAME_EX();   /* Правила именования изображений:
        byFTPPicType Когда ==1, правило именования в собственном массиве является правилом именования для снимков парковки*/
        public byte byPicNameRuleType;      //Тип правила команды изображения; 0 ~ тип по умолчанию, 1 ~ определение имени префикса изображения (включите поле byPicNamePrefix в struPicNameRule)
        public byte[] byRes = new byte[203];             /*бронировать*/


    }

    public static class NET_DVR_FTP_TYPE extends Structure {
        public byte byType;  // 0-главный сервер, 1-сервер
        public byte[] byRes = new byte[3];
    }

Напишите функциональный бизнес

3 Ссылки на часть сообщения в блоге

© Авторские права на ссылки в этой статье принадлежат оригинальному автору. Если есть какие-либо нарушения, пожалуйста, сообщите нам. Это проект с открытым исходным кодом. Если вы его одобряете, не скупитесь на звезды :)

https://github.com/LIRUILONGS/Hikvision-sdk-Integration

https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10&id=5cda5902f47ae80dd41a54b7

https://gitee.com/naylor_personal/ramble-spring-boot/tree/master/hikvision-sdk-integration

© 2018-2023 liruilonger@gmail.com, All rights reserved. Сохранение авторства – некоммерческое использование – ShareAlike (CC) BY-NC-SA 4.0)

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose