springboot优雅的加载海康sdk

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


前言

在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;

    @Bean
    public 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 {

    @Autowired
    private HCNetSDK hcNetSDK;

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


总结

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

  • 11
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
在Linux中集成海康SDKSpring Boot可以通过以下步骤进行: 1. 首先,确保已经在Linux系统上安装了JDK和Spring Boot。这可以通过使用包管理器(如apt-get或yum)或手动下载和安装的方式来实现。 2. 接下来,从海康官方网站下载并获取最新的海康SDK的Linux版本。将下载的SDK文件解压到合适的目录中。 3. 在Spring Boot项目的依赖管理文件(如pom.xml)中,添加引用海康SDK的依赖项。这可以通过在dependencies标签中添加相关的依赖项来实现。注意在添加依赖项之前,需要首先将SDK文件安装到本地Maven仓库或者提供引用其他本地存储库的路径。 4. 在Spring Boot应用程序的Java代码中,使用SDK提供的API实现与海康设备(如摄像头)的交互。根据需要,可以调用不同的SDK功能,例如视频流的获取、设备状态的查询等等。可以根据SDK提供的文档和示例代码来学习使用SDK的API。 5. 在Spring Boot应用程序的配置文件中,提供海康SDK相关的配置参数,如设备的IP地址、端口号、用户名、密码等等。这些配置参数的具体内容可以根据实际情况进行调整。 6. 最后,通过运行Spring Boot应用程序,可以实现与海康设备的集成。可以使用Spring Boot提供的web服务来提供与设备交互的接口,如获取视频流、控制设备等等。 需要注意的是,集成海康SDK可能面临一些挑战,如SDK与Linux的兼容性、依赖项的版本问题等等。在遇到问题时,可以参考SDK的文档、搜索相关的解决方案或者与SDK的技术支持团队取得联系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值