基于 SpringBoot+Hikvision SDK 远程查看配置海康网络摄像头配置

写在前面


  • 工作中遇到,简单整理
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》


海康设备 通过 SDK 查看修改网络摄像头配置

有个简单需求,需要通过程序远程修改 海康网络摄像头配置,可以在指定的时间间隔的情况下抓图,通过 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(每天什么时候抓图)

项目目录

X:.
├─main
│  ├─java
│  │  └─com
│  │      └─xtj
│  │          └─hikvisionsdkintegration
│  │              ├─config
│  │              ├─controller
│  │              ├─dto
│  │              ├─sdklib
│  │              ├─service
│  │              ├─task
│  │              └─util
│  └─resources

项目地址: https://github.com/LIRUILONGS/Hikvision-sdk-Integration

调用方式通过接口调用,支持 Get,Post 方式

get 方式

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 方式

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"
]'
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 UI ,接口文档,可以直接调用

在这里插入图片描述

配置说明

server:port: 8099logging:level:org:springframework.web: info# 摄像头配置
CAMERA:username: "admin"password: "hik12345"# ftp 配置
FTP:username: "face"password: "face"serverIP: "110.110.110.110"serverPort: 21enableAnony: 0custdir: "face"#抓图配置
snapshot:dwPicInterval: 4000 # 抓图时间间隔 4s

部署

当前 SDK , window 下需要把SDK 包和 当前项目 jar 包放到同一级目录, Linux 需放到 /usr/lib/ 下面

java -jar  hikvision-sdk-integration-0.0.1-SNAPSHOT.jar

Docker 方式

┌──[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 DockerfileFROM openjdk:8u102-jdkCOPY ./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

docker pull liruilong/hikvision-sdk-config-ftp
┌──[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        : 软件生成日期:Build:2021.7.14

海康 SDK 使用

开发手册,动态库下载:

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

  • 确定需要调用的动态库功能
  • 通过开发手册查看对应的宏定义,结构体
  • 定义宏变量,结构体转化
  • 编写需要的功能业务,可以参考官方的 Demo

以 FTP 配置为 Demo:

宏变量

    public static final int NET_DVR_GET_FTPCFG_V40 = 6162;  //获取FTP信息public static final int NET_DVR_SET_FTPCFG_V40 = 6163;  //设置FTP信息

结构体转化

public static class NET_DVR_STRUCTHEAD extends Structure {public short wLength;        //结构长度public byte byVersion ;    /*高低4位分别代表高低版本,后续根据版本和长度进行扩展,不同的版本的长度进行限制*/public byte byRes;}//图片命名扩展 2013-09-27public static class NET_DVR_PICTURE_NAME_EX extends Structure {public byte[] byItemOrder = new byte[PICNAME_MAXITEM];    /*    桉数组定义文件命名的规则 */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~图片前缀名定义(启用struPicNameRule中的byPicNamePrefix字段)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];}

编写功能业务

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知,这是一个开源项目,如果你认可它,不要吝啬星星哦 😃


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. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多输入多输出 | MATLAB实现CNN-BiGRU-Attention卷积神经网络-双向门控循环单元结合SE注意力机制的多输入多输出预测

多输入多输出 | MATLAB实现CNN-BiGRU-Attention卷积神经网络-双向门控循环单元结合SE注意力机制的多输入多输出预测 目录 多输入多输出 | MATLAB实现CNN-BiGRU-Attention卷积神经网络-双向门控循环单元结合SE注意力机制的多输入多输出预测预测效果基本介绍程序设计往期精彩参考…

HarmonyOS学习 -- ArkTS开发语言入门

文章目录 一、编程语言介绍二、TypeScript基础类型1. 布尔值2. 数字3. 字符串4. 数组5. 元组6. 枚举7. unknown8. void9. null 和 undefined10. 联合类型 三、TypeScript基础知识条件语句if语句switch语句 函数定义有名函数和匿名函数可选参数剩余参数箭头函数 类1. 类的定义2.…

低压配电系统中浪涌保护器的作用,安装位置和接线方法

低压配电系统是指在变压器低压侧或用户侧的电气装置,主要用于向用户提供安全、可靠和经济的电能。低压配电系统中常见的电气设备有低压配电柜、分支箱、开关箱、插座、照明等。这些设备都需要防止因外部或内部原因产生的过电压对其造成损坏或影响其正常工作。过电压…

竞赛选题 深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数:2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 4 MobileNetV2网络5 损失函数softmax 交叉熵5.1 softmax函数5.2 交叉熵损失函数 6 优化器SGD7 学…

virtuoso如何导出def?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 数模混合的项目中需要把PAD位置通过def的形式读入pr设计中,以此让power plan规避PAD的区域,避免DRC问题。 使用virtuoso导出def的流程如下: 1)新建一个空cell,在Library Manager-File-New-Cell…

【从0开发】百度BML全功能AI开发平台【实操:以部署情感分析模型为例】

目录 一、全功能AI开发平台介绍二、AI项目落地应用流程(以文本分类为例)2-0、项目开始2-1、项目背景2-2、数据准备介绍2-3、项目数据2-4、建模调参介绍2-5、项目的建模调参2-6、开发部署2-7、项目在公有云的部署 附录:调用api代码总结 一、全…

PromptScript:轻量级 DSL 脚本,加速多样化的 LLM 测试与验证

TL;DR 版本 PromptScript 是一个轻量级的 Prompt 调试用的 DSL (Yaml)脚本,以用于快速使用、构建 Prompt。 PromptScript 文档:https://framework.unitmesh.cc/prompt-script Why PromptScript ? 几个月前&…

CSS特殊学习网址

css基本教程内填充padding——前端编程新手必学_哔哩哔哩_bilibilicss3基本语法CSS flex布局(弹性布局/弹性盒子)Agence digitale crative Paris et Montpellier | Sweet PunkCSS布局CSS Layout — Phuoc NguyenCSS中文特效Coco ’s blog特效网址Coco ’…

linux中安装RocketMQ以及dashboard

前提: 需要安装jdk8 上传下面的文件到服务器中 新建目录 mkdir rocketmq 将下载后的压缩包上传到阿里云服务器或者虚拟机中去,并解压 unzip rocketmq-all-4.9.2-bin-release.zip 配置环境变量 vim /etc/profile 配置内容: export NAM…

使用 Apache Camel 和 Quarkus 的微服务(五)

【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 在本系列的第三部分中,我们了解了如何在 Minikube 中部署基于 Quarkus/Camel 的微服务,这是最常用的 Kubernetes 本地实现之一。虽然这样的本地…

力扣:130. 被围绕的区域(Python3)

题目: 给你一个 m x n 的矩阵 board ,由若干字符 X 和 O ,找到所有被 X 围绕的区域,并将这些区域里所有的 O 用 X 填充。 来源:力扣(LeetCode) 链接:力扣(LeetCode&#…

SpringBoot的配置文件——.yml和.properties

目录 1. Spring Boot 配置文件的使用场景 2. 配置文件的两种格式 2.0 特殊说明: 2.1 .properties 2.1.1 格式 2.2.2 缺陷 2.2.3 解决中文乱码的问题 2.2 .yml 2.2.3 格式 配置数据库连接 注意转义字符 ​编辑 ​编辑 配置null 配置对象 从.yml读取文件举例 Stud…

设计模式 - 行为型模式考点篇:迭代器模式(概述 | 案例实现 | 优缺点 | 使用场景)

目录 一、行为型模式 一句话概括行为型模式 1.1、迭代器模式 1.1.1、概述 1.1.2、案例实现 1.1.3、优缺点 1.1.4、使用场景 一、行为型模式 一句话概括行为型模式 行为型模式:类或对象间如何交互、如何划分职责,从而更好的完成任务. 1.1、迭代器…

Vuex使用方式及异步问题处理

🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 生活的理想,为了不断更新自己 ! 目录 1.Vuex简介: 2.vuex获取值 2.1安装 2.2.菜单栏 2.3.模块 2.4使用 3.改…

vue项目npm intall时发生版本冲突的解决办法

在日常使用命令npm install / npm install XX下载依赖的操作中,我经常会遇到无法解析依赖树的问题(依赖冲突) 当遇到这种情况的时候,可以通过以下命令完成依赖安装: npm install --legacy-peer-deps npm install xxx…

C# OpenVINO 人脸识别

效果 耗时 Preprocess: 1.41ms Infer: 4.38ms Postprocess: 0.03ms Total: 5.82ms 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Text; using Syste…

关于网络协议的若干问题(三)

1、当发送的报文出问题的时候,会发送一个 ICMP 的差错报文来报告错误,但是如果 ICMP 的差错报文也出问题了呢? 答:不会导致产生 ICMP 差错报文的有: ICMP 差错报文(ICMP 查询报文可能会产生 ICMP 差错报文…

如何在Firefox中配置HTTP?

在浏览器中配置HTTP是一个常见的需求,它可以让我们轻松访问需要的网站或保护个人隐私。本文将为您详细介绍如何在Firefox浏览器中配置HTTP应用,帮助您实现无缝的HTTP体验。无论您是初次接触HTTP还是有一定经验的用户,本文都能为您提供实用的操…

玩转ChatGPT:图像识别(vol. 1)

一、写在前面 来了来了,终于给我的账号开放图像识别功能了,话不多说,直接开测!!! 二、开始尝鲜 (1)咒语: GPT回复: 这幅图显示了从2005年1月到2012年12月的…

pdf怎么合并在一起?

pdf怎么合并在一起?对于pdf合并这个问题,有的小伙伴想很简单,只需要将文件直接复制再其中的一个后面不就完事了吗。其实不然,因为我们如果要是需要将很多文件进行合并的话,就会产生很多问题的。总之,在现在…