提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、下载海康sdk
  • 二、依赖海康提供的jar包
    • 1.拷贝jar包至工程目录
    • 2.pom中引入依赖
  • 三、添加海康库文件及HCNetSDK
    • 1.拷贝库文件至工程目录
    • 2.引入HCNetSDK
  • 四、添加类库加载配置类
  • 五、HCNetSDK的使用
  • 总结

前言

在springboot中使用海康sdk时,加载库文件时需要写死路径才能完成加载,由于想在不同的环境下进行灵活的切换,所以想通过nacos配置文件的方式获取库文件路径来进行加载,大体的思路就是在项目启动时读取配置文件的路径后生成bean对象,在需要引入的地方直接注入即可。


一、下载海康sdk

此处以windows版本为例,访问 海康开放平台,下载"设备网络SDK_Win64 V6.1.9.4_build20220412"至电脑指定目录即可。

二、依赖海康提供的jar包

1.拷贝jar包至工程目录

将海康提供的jna.jar、examples.jar拷贝至工程的resources/lib目录下,如图:

2.pom中引入依赖


tips:此方式需要在build-plugin中添加<includeSystemScope>true</includeSystemScope>,表示maven打包时会将外部引入的jar包(比如在根目录下或resource文件下新加外部jar包)打包到项目jar,如下图所示:

三、添加海康库文件及HCNetSDK

1.拷贝库文件至工程目录

将windows下的库文件拷贝至resources/hikvision/windows目录下,如图:

2.引入HCNetSDK


tips:引入后可注释掉 HCNetSDK INSTANCE = ......开头的代码,另外可以将extends StdCallLibrary改成extends Library,在windows环境下照样可以运行,需要注意的是,改成extends Library后,接口中所定义的一些回调函数,其继承类需要由原来的extends StdCallCallback 改成 extends Callback,否则会报错。

四、添加类库加载配置类

package com.qcc.hksdkdemo.config;import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.qcc.hksdkdemo.hksdk.HCNetSDK;
import com.sun.jna.Native;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.File;/*** @创建人 qianchengcheng* @创建时间 2022/4/25* @描述*/
@Configuration
public class HikLibConfig {@Value("${hiklib_path}")private String hikLibPath;private static HCNetSDK hcNetSDK;@Beanpublic HCNetSDK initHkSDK() {System.out.println("initHkSDK.getHklibPath=========>"+ hikLibPath);String os = System.getProperty("os.name");if (StringUtils.isNotEmpty(os) && os.toLowerCase().startsWith("windows")){if ("-1".equals(hikLibPath)){// 未配置海康库文件路径,且未打成jar包,读取工程中的库文件String path = (HikLibConfig.class.getResource("/").getPath()).replaceAll("%20", " ").substring(1).replace("/","\\");hikLibPath = path + "hikvision" + File.separator + "windows" + File.separator + "HCNetSDK.dll";}}hcNetSDK = (HCNetSDK) Native.loadLibrary(hikLibPath,HCNetSDK.class);return hcNetSDK;}
}

tips: hiklib_path这个值是在nacos中进行了配置,具体的路径为HCNetSDK.dll所在的路径,当然,这边加了一个逻辑,非常的简单,就是判断当前的系统是否是windows且配置值为-1时,当满足此条件时,就读取该工程resources/hikvision/windows路径下的文件,处于此设计的原因为:当其他人想在本地ide中运行你的这部分代码且他没有下载这个库文件时,就可以直接运行了。当然,hiklib_path改成 -1的场景只适用于windows环境且想在ide中运行此代码时才可以,通过jar的方式只能通过配置库文件路径的方式来进行启动。

五、HCNetSDK的使用

当springboot启动时,会执行HikLibConfig配置类,读取对应的配置后生成bean对象,此时,只需要使用 @Autowired注入即可,参考代码如下:

package com.qcc.hksdkdemo.service.impl;import com.qcc.hksdkdemo.hksdk.HCNetSDK;
import com.qcc.hksdkdemo.service.HikVisionService;
import com.sun.jna.NativeLong;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @创建人 qianchengcheng* @创建时间 2022/4/25* @描述*/
@Service
public class HikVisionServiceImpl implements HikVisionService {@Autowiredprivate HCNetSDK hcNetSDK;@Overridepublic NativeLong login(String ip, String port, String userName, String passWord) {// 初始化if (!hcNetSDK.NET_DVR_Init()){System.out.println("SDK初始化失败");return new NativeLong(-10);}// 设置连接时间与重连时间hcNetSDK.NET_DVR_SetConnectTime(2000, 1);hcNetSDK.NET_DVR_SetReconnect(100000, true);// 设备信息HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();// 登录NativeLong userIdNL = hcNetSDK.NET_DVR_Login_V30(ip,Short.valueOf(port),userName,passWord,m_strDeviceInfo);if (userIdNL.intValue() == -1){System.out.println("登录失败,错误号:"+hcNetSDK.NET_DVR_GetLastError());}return userIdNL;}
}

总结

此方式的优点在于,当在不同的环境切换时,只需要修改配置文件即可实现切换,当然,因人而异,对于有这方面需求的兄弟,希望我的这边文章能提供给你们思路,最后,感谢大家的阅读~

springboot优雅的加载海康sdk相关推荐

  1. Springboot集成海康SDK(以海康USB_SDK为例)

    新建Springboot项目 Pom文件 <!--Spring boot 2.3.2--> <parent><groupId>org.springframework ...

  2. 海康sdk项目部署Linux系统时出现java.lang.UnstisfiedLinkError:jnidispatch(xxx)not found in resource path错误

    海康sdk项目部署Linux系统时出现java.lang.UnstisfiedLinkError:jnidispatch(xxx)not found in resource path错误 问题描述 解 ...

  3. 海康sdk捕获码流数据通过JavaCV推成rtmp流的实现思路(PS流转封装RTMP)

    海康sdk捕获码流数据通过JavaCV推成rtmp流的实现思路(PS流转封装RTMP) 问题分析 转码推rtmp PS流转封装 码云(Gitee)主页:https://gitee.com/banmaj ...

  4. 海康SDK开发实时读取摄像头图像

    1.概述 最近项目需要实时读取网络摄像头,并对图像做处理,参考网络资料和海康SDK开发文档,文档中给了两种方式(1)SDK直接解码显示(2)实时流数据回调,用户自行处理码流数据(开发文档上以软解显示为 ...

  5. 基于Qt+海康sdk+MySql的远程录像下载程序

    一.前言 距离上次完成的Linux下QT实时音频采集传输项目已经有一个月的时间.之后又在Linux上完成了许多大大小小的项目,多是与UI有关. 这次给实现的是Windows下的QT+Mysql+海康s ...

  6. linux64下调用海康sdk(=登陆、获取通道列表、获取文件列表、按照文件下载文件、按照时间下载文件)

    linux下调用海康sdk 1.库文件的配置 mkdir /data/hk_sdk/ cd /data/hk_sdk/将海康SDK的lib文件夹复制到/data/hk_sdk/下 lib文件下面的结构 ...

  7. spring boot:从零开始搭建一个项目 - day 7 springboot devtools热加载+MybatisPlus配置+kisso从入门到放弃

    spring boot:从零开始搭建一个项目 - day 7 springboot devtools热加载+MybatisPlus配置+kisso从入门到放弃 一.springboot devtool ...

  8. SpringBoot启动如何加载application.yml配置文件

    一.前言 在spring时代配置文件的加载都是通过web.xml配置加载的(Servlet3.0之前),可能配置方式有所不同,但是大多数都是通过指定路径的文件名的形式去告诉spring该加载哪个文件: ...

  9. springboot mybatis 热加载mapper.xml文件(最简单)

    大家好,我是烤鸭: 今天介绍一下springboot mybatis 热加载mapper.xml文件. 本来不打算写的,看到网上比较流行的方式都比较麻烦,想着简化一下. 网上流行的版本. https: ...

  10. springboot多环境加载yml和logback配置

    大家好,我是烤鸭: 这是一篇关于springboot多环境加载yml和logback配置文件. 环境: 开发工具 idea(推荐)/eclipse(对yml支持不好) jdk  1.8 springb ...

最新文章

  1. Nat. Mach. Intel. | 突变后蛋白蛋白结合力的拓扑网络树预测模型
  2. MobileNet、GhostNet理解及测试
  3. 30个数据可视化小技巧(文末赠书)
  4. linux虚拟内存api,Linux虚拟内存空间分布-Go语言中文社区
  5. 训练日志 2019.7.24
  6. 公司邮箱发邮件的util类
  7. 页面缓存,数据源缓存
  8. Map.Entry如何使用?
  9. HTML+CSS制作3D步数统计界面
  10. Qt中的对话框(模态,非模态,关于,问题,文件)
  11. 大神带你实现 NLP 从入门到获奖,还有免费算力可以薅
  12. 编写递归算法,计算二叉树叶子结点的数目。
  13. asp.net开源资料——国内.NET论坛源代码
  14. 安卓Autojs逆向破解必备基础smail基础语法
  15. OPENWRT路由器设置
  16. 小程序前端view内容重叠问题
  17. 爱奇艺qsv格式视频无损转换为MP4
  18. 带有滚动效果的ViewPager
  19. 大型券商机构智能大数据营销平台
  20. C语言蓝桥杯刷题:成绩统计

热门文章

  1. 微型计算机原理及应用 湖南大学,2011年10月自考02277微型计算机原理及应用真题及答案...
  2. rmnet蠕虫病毒样本分析
  3. 成功的背后!(给所有IT人)
  4. 绿色版DNF(地下城勇士)全键盘连发工具,支持DNF双开
  5. 数据挖掘导论思维导图
  6. 计算机病毒发展简史,计算机病毒分析_计算机病毒简史
  7. 二叉树遍历算法(递归实现+层次遍历)
  8. jQuery页面加载事件
  9. eclipse安装教程 以及汉化包安装
  10. 21天学通JAVA——学习笔记