springboot优雅的加载海康sdk
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、下载海康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相关推荐
- Springboot集成海康SDK(以海康USB_SDK为例)
新建Springboot项目 Pom文件 <!--Spring boot 2.3.2--> <parent><groupId>org.springframework ...
- 海康sdk项目部署Linux系统时出现java.lang.UnstisfiedLinkError:jnidispatch(xxx)not found in resource path错误
海康sdk项目部署Linux系统时出现java.lang.UnstisfiedLinkError:jnidispatch(xxx)not found in resource path错误 问题描述 解 ...
- 海康sdk捕获码流数据通过JavaCV推成rtmp流的实现思路(PS流转封装RTMP)
海康sdk捕获码流数据通过JavaCV推成rtmp流的实现思路(PS流转封装RTMP) 问题分析 转码推rtmp PS流转封装 码云(Gitee)主页:https://gitee.com/banmaj ...
- 海康SDK开发实时读取摄像头图像
1.概述 最近项目需要实时读取网络摄像头,并对图像做处理,参考网络资料和海康SDK开发文档,文档中给了两种方式(1)SDK直接解码显示(2)实时流数据回调,用户自行处理码流数据(开发文档上以软解显示为 ...
- 基于Qt+海康sdk+MySql的远程录像下载程序
一.前言 距离上次完成的Linux下QT实时音频采集传输项目已经有一个月的时间.之后又在Linux上完成了许多大大小小的项目,多是与UI有关. 这次给实现的是Windows下的QT+Mysql+海康s ...
- linux64下调用海康sdk(=登陆、获取通道列表、获取文件列表、按照文件下载文件、按照时间下载文件)
linux下调用海康sdk 1.库文件的配置 mkdir /data/hk_sdk/ cd /data/hk_sdk/将海康SDK的lib文件夹复制到/data/hk_sdk/下 lib文件下面的结构 ...
- spring boot:从零开始搭建一个项目 - day 7 springboot devtools热加载+MybatisPlus配置+kisso从入门到放弃
spring boot:从零开始搭建一个项目 - day 7 springboot devtools热加载+MybatisPlus配置+kisso从入门到放弃 一.springboot devtool ...
- SpringBoot启动如何加载application.yml配置文件
一.前言 在spring时代配置文件的加载都是通过web.xml配置加载的(Servlet3.0之前),可能配置方式有所不同,但是大多数都是通过指定路径的文件名的形式去告诉spring该加载哪个文件: ...
- springboot mybatis 热加载mapper.xml文件(最简单)
大家好,我是烤鸭: 今天介绍一下springboot mybatis 热加载mapper.xml文件. 本来不打算写的,看到网上比较流行的方式都比较麻烦,想着简化一下. 网上流行的版本. https: ...
- springboot多环境加载yml和logback配置
大家好,我是烤鸭: 这是一篇关于springboot多环境加载yml和logback配置文件. 环境: 开发工具 idea(推荐)/eclipse(对yml支持不好) jdk 1.8 springb ...
最新文章
- Nat. Mach. Intel. | 突变后蛋白蛋白结合力的拓扑网络树预测模型
- MobileNet、GhostNet理解及测试
- 30个数据可视化小技巧(文末赠书)
- linux虚拟内存api,Linux虚拟内存空间分布-Go语言中文社区
- 训练日志 2019.7.24
- 公司邮箱发邮件的util类
- 页面缓存,数据源缓存
- Map.Entry如何使用?
- HTML+CSS制作3D步数统计界面
- Qt中的对话框(模态,非模态,关于,问题,文件)
- 大神带你实现 NLP 从入门到获奖,还有免费算力可以薅
- 编写递归算法,计算二叉树叶子结点的数目。
- asp.net开源资料——国内.NET论坛源代码
- 安卓Autojs逆向破解必备基础smail基础语法
- OPENWRT路由器设置
- 小程序前端view内容重叠问题
- 爱奇艺qsv格式视频无损转换为MP4
- 带有滚动效果的ViewPager
- 大型券商机构智能大数据营销平台
- C语言蓝桥杯刷题:成绩统计