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

news2025/2/27 11:28:10

写在前面


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

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


海康设备 通过 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: 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"


#抓图配置
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 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

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-27
    public 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.coloradmin.cn/o/1087405.html

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

相关文章

【C++杂货铺】一文带你走进哈希:哈希冲突 | 哈希函数 | 闭散列 | 开散列

文章目录 一、unordered 系列关联式容器二、unordered_map1.1 unordered_map 介绍1.2 unordered_map 的接口说明1.2.1 unordered_map 的构造1.2.2 unordered_map 的容量1.2.3 unordered_map 的迭代器1.2.4 unordered_map 的元素访问1.2.5 unordered_map 的查询1.2.6 unordered_…

【正点原子STM32连载】 第四十二章 IIC实验 摘自【正点原子】APM32F407最小系统板使用指南

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html## 第四…

Zookeeper【Curator客户端Java版】从0到1——万字学习笔记

目录 初识Zookeeper Zookeeper作用 维护配置信息 分布式锁服务 集群管理 生产分布式唯一ID Zookeeper的设计目标 Zookeeper 工作机制 数据模型 ZooKeeper 命令操作 服务端常用命令 客户端常用命令 ZooKeeper JavaAPI操作 Curator 介绍 Curator API 常用操作 导入依赖 建立连接 …

腾讯wifi码推广如何代理?方法详解!

腾讯wifi码推广是一种利用微信扫码连接商家wifi的方式,用户看完广告后就可以免费上网,而推广者则可以获得广告收益。 那么怎样代理腾讯wifi码推广呢? 答案是腾讯官方没有这个项目,那是怎么回事呢,腾讯wifi码正确的名称…

时间复杂度O(n)

目录 一. 前言 二. 时间频度和空间复杂度 2.1. 时间频度 2.2. 空间复杂度 三. 时间复杂度 3.1. 概念 3.2. 常见的时间复杂度 3.3. 计算实例 四. 大O记法 五. 对数log小知识 一. 前言 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的…

【计算机网络笔记】数据交换之电路交换

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 文章目录 系列文章目录为什么需要数据交换数据交换的类型电路交换什么是多路复用?频分多路复用(FDM)时分多路复用(TDM)波分…

深度神经网络压缩与加速技术

// 深度神经网络是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。深度神经网络是一…

百度SEO优化全攻略(提高网站排名的5个方面)

百度SEO入门介绍: 随着互联网的不断发展,SEO已经成为网站优化的重要一环。而百度作为中国最大的搜索引擎,其SEO优化更是至关重要。SEO不仅能够提高网站排名,还能够提高网站流量、用户体验以及品牌知名度。因此,掌握百…

软件性能瓶颈问题之数据库性能问题定位

前言:数据库的性能瓶颈包括:数据库索引,锁,表空间,慢sql,数据量 一、性能问题 1.1 缺乏索引: 索引本质上是一种数据结构,允许数据库快速查找特定的数据 1.2 查询效率低&#xff1…

【数据库系统概论】第三章关系数据库标准语言SQL

选择题会考: 1.数据查询: SELECT:用于选择需要查询的列和行。 FROM:用于指定要查询的表。 WHERE:用于指定查询条件。 GROUP BY:用于按照指定的列对结果进行分组。 HAVING:用于指定分组条件…

解决jmeter软件显示为英文、返回数据乱码、设置编码格式的问题

一.jmeter软件每次打开都需要手动切换中文 1.修改配置文件,可以把jmeter设置成中文: 2.打开jmeter.properties配置文件,修改languagezh_CN 二.返回数据乱码 改配置文件 进入Jmeter的bin目录下,找到jmeter.properties文件&#…

科研上新 | 第2期:可驱动3D肖像生成;阅读文本密集图像的大模型;文本控制音色;基于大模型的推荐智能体

编者按:欢迎阅读“科研上新”栏目!“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里,你可以快速浏览研究院的亮点资讯,保持对前沿领域的敏锐嗅觉,同时也能找到先进实用的开源工具。 本期内容速览 …

minio桶命名规则

一、背景 今天做项目需要上传图片到minio,上传失败,查看错误是桶未创建成功。 minio桶的创建具有自己的命名规则,不符合则无法创建。 二、命名规则 1、存储桶名称的长度必须介于 3(最小)到 63(最大&…

KBL610-ASEMI内置4颗84MIL芯片KBL610

编辑:ll KBL610-ASEMI内置4颗84MIL芯片KBL610 型号:KBL610 品牌:ASEMI 封装:KBL-4 恢复时间:>50ns 正向电流:6A 反向耐压:1000V 芯片个数:4 引脚数量&#xff1…

将C盘中的文件夹迁移到其他盘符

目录 1 微信文件 2 移动系统自带文件夹 3 清除软件的缓存 1 微信文件 微信文件默认存储在C盘中,放任不管可能会占用很大的空间 更改后文件会自动挪过去,在C盘中只保留较小的空间 2 移动系统自带文件夹 像文档,图片这种文件夹&#…

数据治理是一个怎样的体系化的过程?_光点科技

数据治理是一个复杂而系统化的过程,旨在确保企业能够有效地管理、维护和利用其日益增长的数据资产。这一过程涉及多个层面和步骤,需要有明确的框架和战略规划。 数据治理的体系化始于明确定义的目标和愿景。企业需要明确意识到数据对于业务成功的重要性&…

华泰证券:京东营收增长或短期承压

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,华泰证券近期发布研报称京东营收增长或短期承压。华泰证券主要观点如下:营收增长或短期承压,聚焦长期内生能力建设 考虑到消费情绪的恢复仍需一定时间,我们预计…

免疫球蛋白介绍

免疫球蛋白(Immunoglobulin,Ig)是广泛存在于哺乳动物血清、淋巴液、组织液和外分泌液中的一种具有抗体活性或化学结构与抗体相似的球蛋白,在机体防御疾病的重要成分在疾病研究、药物研发、疫苗评价中具有重要作用。抗体&#xff0…

PLL的环路滤波器

本篇文章仅为分享PLL学习过程及一些公式推导,如有错误,还请批评指正! 文章目录 1、一阶RC低通滤波器(II类锁相环)2、二阶RC低通滤波器A、加电容型B、加RC低通滤波器型 3、三阶低通滤波器 锁相环3大组成部分&#xff1…

浅谈IT运维-服务目录

目录 服务目录的作用 服务目录常见的应用场景 服务目录是否必须有 服务目录的视图分类 用户视图 客户视图 服务提供者视图 服务目录的分类原则 为什么要分类 服务目录的分类方法 服务目录划分的颗粒度把握 服务详情 服务目录包括:服务目录、服务详情两大…