springboot框架 集成海康ISUP-SDK 并实现 协议透传给设备下发指令!

最近有一个需求 需要通过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 动态库环境配置
在这里插入图片描述

注意5:报警回调 sdk里写了一个pxml 我一直以为 报警数据会在 pxml里面,需要注意一点 报警类型的不一样 如果是 ISAPI 报警上传 他在 NET_EHOME_ALARM_ISAPI_INFO.pAlarmData 对象里。sdk里也有相关代码,报警类型是 13。
在这里插入图片描述

说白了,就是海康的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 {

    @Autowired
    AlarmService alarmService;

    @Autowired
    SsService ssService;

    @Autowired
    CmsService cmsService;

    @Override
    public 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Json____

您的鼓励是我创作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值