最近有一个需求 需要通过springboot框架 来和 海康的摄像头设备进行通信,就研究了一下 海康的官方ISUP-SDK 文档对接。这个sdk 主要实现了 第三方快速集成海康的设备。
海康的文档地址:
https://open.hikvision.com/docs/docId?productId=5cda567cf47ae80dd41a54b3&version=%2F20cb4ea9062b4e7eba3f3dff540b0e23&tagPath=%E6%A6%82%E8%BF%B0-%E7%AE%80%E4%BB%8B
官方文档的内容还是很多的,就过摸索 后,了解了 这个sdk 的使用逻辑,下面我就简单的分享一下这个sdk文档的逻辑:
我截图一下 官方的一个图片,在图片上进行介绍:
本文章的代码 只接入了 ss 、ams 和 cms , sms 并没有接入。如果小伙伴需要,可自行接入即可,方法差不多
官方文档提供了 四种编程语言的对接,这篇文章 我们只分享 怎么使用 springboot 来集成ISUP-SDK
**
这篇文章 主要实现的是 对于 64 位 Linux 操作系统下运行的 demo
**
接下来 先说几个注意事项:
注意1. 系统要求 :如果是docker部署也要注意
注意2. 回调类的集成:
windows 环境 回调类 是集成 StdCallLibrary
linux 环境 是继承 Library
注意3. 文档里分享的 jna.jar 这个jar包
实际就是 一个 java调用 c++ 库的一个依赖包,如果不想使用他sdk里带的 jar
因为项目是maven管理的 导入到项目挺麻烦的,可以直接使用maven 引入:
<dependency><groupId>com.sun.jna</groupId><artifactId>jna</artifactId><version>3.0.9</version></dependency>
注意4. linux下 的 还需要在 系统里执行下方这些命令,docker镜像也需要:
命令1: 把路径写入到 /etc/profile 文件中 :
【/home/lib/linux64:/home/lib/linux64/HCAapSDKCom】 根据自己的项目路径自行调整
echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/home/lib/linux64:/home/lib/linux64/HCAapSDKCom" >> /etc/profile
命令2: 立即生效
source /etc/profile
命令3: 目录 还是根据自己的路径自行修改
echo "/home/lib/linux64" >> /etc/ld.so.conf && \echo "/home/lib/linux64/HCAapSDKCom" >> /etc/ld.so.conf
命令4: 更改生效
ldconfig
具体可参考文档里的:3.1 动态库环境配置
说白了,就是海康的c++的程序员写了一些 扩展库 dll文件或者是so文件 ,然后我们通过java 来调用 他们写的这些扩展库里的方法,从而实现和设备交互。
海康提供的sdk 和扩展库的下载地址 :大家按需下载即可
https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10&id=18e1e779efed4593bfceba6703d7f6a8
对于他的扩展库里 我们所需要的文件 我已经打包成压缩包 放到springboot项目下 ,项目启动的时候会自动解压
好了 根据文档 分析的注意事项 就分享到这里 ,接下来 分享一下springboot下的集成海康ISUP-SDK
java版本:java8
springboot版本:2.7
先给大家看项目目录i:
配置文件如下:
# 海康配置开始
# 海康服务的注册服务器 IP 地址
hk.cmsServerIP=0.0.0.0
# 海康服务的注册服务器监听的端口号
hk.cmsServerPort=7660# DAS地址(公网对接填入公网地址和端口)
hk.dasServerIP=127.0.0.1
hk.dasServerPort=7660# 报警服务器地址(公网对接填入公网地址和端口)
hk.alarmServerIP=127.0.0.1
# 海康报警服务器的 TCP 通信端口号
hk.alarmServerTCPPort=7663# 海康报警服务器的 UDP 通信端口号
hk.alarmServerUDPPort=7662# 报警服务器类型:
# 0 - 只支持 UDP 协议上报
# 1 - 支持 UDP 和 TCP 两种协议上报(ISUP4.0)
# 2 - 支持 MQTT 协议(ISUP5.0)
hk.alarmServerType=2# 报警服务器监听地址端口
# 报警服务器用于监听外部请求的 IP 地址
hk.alarmServerListenIP=0.0.0.0
# 报警服务器监听 TCP 协议连接的端口号
hk.alarmServerListenTCPPort=7663
# 报警服务器监听 UDP 协议连接的端口号
hk.alarmServerListenUDPPort=7662# 海康服务用来存储图片的服务器 IP 地址
hk.picServerIP=127.0.0.1
# 海康服务的图片存储服务器监听端口号
hk.picServerPort=6011# 图片存储服务器类型:
# 0 - Tomcat
# 1 - VRB
# 2 - 云存储
# 3 - KMS
# 4 - ISUP5.0
hk.picServerType=2# 图片存储服务器用于监听外部请求的 IP 地址
hk.picServerListenIP=0.0.0.0
# 图片存储服务器监听外部请求的端口号
hk.picServerListenPort=6011# 用于海康设备认证的秘钥,ISUP5.0协议中的必需项
hk.iSUPKey=123456# 报警服务器打印事件模式:
# file=事件保存到文件中
# console=事件打印在控制台上
hk.eventInfoPrintType=file# 动态库日志路径
# 存储海康 CMS 服务日志的文件路径
hk.cmsLogPath=/home/hk-cmsLogs/# 报警日志路径
# 存储海康报警服务日志的文件路径
hk.alarmLogPath=/home/hk-alarmLogs/# SS日志路径
# 存储海康 SS 服务日志的文件路径
hk.ssLogPath=/home/hk-ssLogs/
对应的配置类:
package com.haikang.base.haikangIsUp.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/**** User: Json* Date: 2025/5/20* 配置文件**/
@Component
@ConfigurationProperties(prefix = "hk")
@Data
public class HkConfig {/*** 注册服务器监听地址(服务器本地地址)*/private String cmsServerIP;/*** 注册服务器端口号*/private short cmsServerPort;/*** DAS地址*/private String dasServerIP;private short dasServerPort;/*** 报警服务器地址(公网对接时,填入公网地址和端口)*/private String alarmServerIP;/*** 报警服务器 TCP 端口号*/private short alarmServerTCPPort;/*** 报警服务器 UDP 端口号*/private short alarmServerUDPPort;/*** 报警服务器类型:* 0 - 只支持 UDP 协议上报* 1 - 支持 UDP 和 TCP 两种协议上报(ISUP4.0)* 2 - 支持 MQTT 协议(ISUP5.0)*/private int alarmServerType;/*** 报警服务器监听地址(监听端口)*/private String alarmServerListenIP;/*** 报警服务器监听 TCP 端口号*/private short alarmServerListenTCPPort;/*** 报警服务器监听 UDP 端口号*/private short alarmServerListenUDPPort;/*** 图片存储服务器地址(IUSP5.0版本接入端口建议固定为6011)*/private String picServerIP;/*** 图片存储服务器端口号*/private short picServerPort;/*** 图片存储服务器类型:* 0 - Tomcat* 1 - VRB* 2 - 云存储* 3 - KMS* 4 - ISUP5.0* 选择存储服务器类型,根据版本和设备类型而不同*/private int picServerType;/*** 图片存储服务器监听地址(监听端口)*/private String picServerListenIP;/*** 图片存储服务器监听端口号*/private short picServerListenPort;/*** ISUP5.0 登录秘钥*/private String iSUPKey;/*** 报警服务器打印事件模式:* file - 事件保存到文件中* console - 事件打印在控制台上*/private String eventInfoPrintType;/*** CMS 日志路径*/private String cmsLogPath;/*** 报警日志路径*/private String alarmLogPath;/*** SS 日志路径*/private String ssLogPath;}
配置文件里的那些ip 端口 我本来以为是 springboot这些 启动起来的,实际不是,配置文件的这些ip 端口号 是 java 这边 获取到配置文件信息后 发送给 c++ 写的动态库 ,动态库里 会监听这些端口。
通信步骤就是:设备-> 动态库-> java回调 接收
启动类:
package com.haikang.base.init;import com.haikang.base.haikangIsUp.service.AlarmService;
import com.haikang.base.haikangIsUp.service.CmsService;
import com.haikang.base.haikangIsUp.service.SsService;
import com.haikang.base.utils.ZipUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;/**** User: Json* Date: 2025/5/20**/
@Slf4j
@Component
public class HaiKangInit implements CommandLineRunner {@AutowiredAlarmService alarmService;@AutowiredSsService ssService;@AutowiredCmsService cmsService;@Overridepublic void run(String... args) throws Exception {log.info("开始执行");String zipFileInJar = "hklib/lib.zip"; // 这个文件位于 classpath 中String destinationDirectory = "/lib"; // 解压到指定目录if (!ZipUtils.isFolderExists(destinationDirectory)) {boolean isExtracted = ZipUtils.extractZipFromJar(zipFileInJar, destinationDirectory);if (isExtracted) {System.out.println("ZIP 文件成功解压!");} else {System.out.println("解压失败!");}}else{System.out.println("无需解压!");}//初始化报警服务alarmService.init();alarmService.startAlarmListen();//初始化存储服务ssService.init();ssService.startSsListen();//初始化流媒体服务 SMS 未引入 实际和别的服务差不多//初始化注册服务cmsService.init();cmsService.startCmsListen();}
}
协议透传的例子:
最后启动控制台效果:
测试 只能在linux64 下测试 windows的没有写。
实际集成的代码 类是很多的,因为文章长度有限,所以完整代码,文章里就不分享了,文章核心分享的是一个实现步骤。
大家也可以根据官方文档提供的 sdk 里的代码 自己整理 然后整合到自己的项目里,也是可以的。
我目前分享的 springboot框架 集成海康ISUP-SDK 就是根据他的sdk 自己整合到springboot 项目里的,完整代码已经压缩好了,有需要的小伙伴,可以通过下面链接进行获取:
https://wwwoop.com/home/Index/projectInfo?goodsId=84&typeParam=2&subKey=1