服务器无法加载海康sdk依赖的问题

  • 首先遇到的jna.jar和examples.jar无法加载的问题,尝试了很多方法无效,以下方法实测有效

  • 其次是动态链接库无法加载的问题,而且是播放库,我的方法比较简单,netsdk加载出来就行了,播放库用不到,删掉引用就行了

  • 最后,我尝试了不少于五种方式,只能说以下方式对我的项目有效,其他方式也对他们的项目有效

  • 需求是从海康录像机上按时间下载视频文件,然后上传到ftp

以下是对我有效的方式

  1. 打开命令行,将第三方jar包安装在本地maven仓库(注意修改Dfile,DgroupId,DartifactId,Dversion)
bash 复制代码
mvn install:install-file -Dfile=E:\IdeaProjects\uav-platform\lib\jna.jar -DgroupId=com.sun.jna -DartifactId=jna -Dversion=1.0  -Dpackaging=jar
mvn install:install-file -Dfile=E:\IdeaProjects\uav-platform\lib\examples.jar -DgroupId=com.sun.jna -DartifactId=examples -Dversion=1.0  -Dpackaging=jar
  1. 在工程pom文件引入即可
xml 复制代码
<dependency>
    <groupId>com.sun.jna</groupId>
    <artifactId>jna</artifactId>
    <version>1.0</version>
</dependency>
<dependency>
    <groupId>com.sun.jna</groupId>
    <artifactId>examples</artifactId>
    <version>1.0</version>
</dependency>
  1. 动态库加载说明

    【库文件加载说明】

    1. lib文件夹里面所有库文件libhcnetsdk.solibHCCore.so、libssl.so.1.1、libcrypto.so.1.1以及HCNetSDKCom文件夹都需要加载到工程中。

    2. HCNetSDKCom文件夹如果和libhcnetsdk.solibhpr.so、libHCCore文件、可执行文件不在同级目录,或者加载失败,可以调用NET_DVR_SetSDKInitCfg(enumType类型赋值为2,lpInBuff对应结构体NET_DVR_LOCAL_SDK_PATH)设置组件库所在路径。

    3. libcrypto.so.1.1和libssl.so.1.1是开源库,如果库文件加载失败,可以调用NET_DVR_SetSDKInitCfg(enumType类型赋值为3,lpInBuff对应libcrypto.so.1.1所在的路径字符串)、NET_DVR_SetSDKInitCfg(enumType类型赋值为4,lpInBuff对应libssl.so.1.1所在的路径字符串)指定下这些库文件加载路径。

    4. 如果库文件加载始终不成功,初始化失败,可以尝试将SDK所在路径添加到LD_LIBRARY_PATH环境变量中。

    【路径设置的Java示例代码】
    //这里是库的绝对路径,请根据实际情况修改,注意改路径必须有访问权限

    //设置HCNetSDKCom组件库所在路径
    String strPathCom = "/home/test/Desktop/JavaDemoLinux/lib";
    HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH();
    System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length());
    struComPath.write();
    hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer());

    //设置libcrypto.so所在路径
    HCNetSDK.BYTE_ARRAY ptrByteArrayCrypto = new HCNetSDK.BYTE_ARRAY(256);
    String strPathCrypto = "/home/test/Desktop/JavaDemoLinux/lib/libcrypto.so.1.1";
    System.arraycopy(strPathCrypto.getBytes(), 0, ptrByteArrayCrypto.byValue, 0, strPathCrypto.length());
    ptrByteArrayCrypto.write();
    hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArrayCrypto.getPointer());

    //设置libssl.so所在路径
    HCNetSDK.BYTE_ARRAY ptrByteArraySsl = new HCNetSDK.BYTE_ARRAY(256);
    String strPathSsl = "/home/test/Desktop/JavaDemoLinux/lib/libssl.so.1.1";
    System.arraycopy(strPathSsl.getBytes(), 0, ptrByteArraySsl.byValue, 0, strPathSsl.length());
    ptrByteArraySsl.write();
    hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArraySsl.getPointer());

    【路径设置的C++示例代码】
    char cryptoPath[2048] = {0};
    sprintf(cryptoPath, "/home/test/Desktop/alarm_demo/libcrypto.so.1.1");
    NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_LIBEAY_PATH, cryptoPath);

    char sslPath[2048] = {0};
    sprintf(sslPath, "/home/test/Desktop/alarm_demo/libssl.so.1.1");
    NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_SSLEAY_PATH, sslPath);

    NET_DVR_LOCAL_SDK_PATH struComPath = {0};
    sprintf(struComPath.sPath, "/home/test/Desktop/alarm_demo"); //HCNetSDKCom文件夹所在的路径
    NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_SDK_PATH, &struComPath);

参考:

  1. https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10
  2. https://blog.csdn.net/shiwenjun18/article/details/130205302
  3. 一些尝试过的其他方式
xml 复制代码
<!-- 加地址 -->
<dependency>
    <groupId>com.sun.jna</groupId>
    <artifactId>jna</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/jna.jar</systemPath>
</dependency>
xml 复制代码
<!-- 外部地址 -->
<dependency>
    <groupId>com.sun.jna</groupId>
    <artifactId>jna</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/../lib/jna.jar</systemPath>
</dependency>
xml 复制代码
<!-- 项目提示无法加载外部依赖 -->
<dependency>
    <groupId>com.sun.jna</groupId>
    <artifactId>jna</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${pom.basedir}/../lib/jna.jar</systemPath>
</dependency>
xml 复制代码
<!-- 在以上方式的基础上添加配置 -->
<configuration>
    <includeTypes>jar</includeTypes>
    <includeScope>system</includeScope>
</configuration>
相关推荐
vx_Biye_Design1 小时前
【关注可免费领取源码】云计算及其应用网络教学系统--毕设附源码35183
java·spring·spring cloud·servlet·eclipse·云计算·课程设计
码农阿豪8 小时前
Nacos 日志与 Raft 数据清理指南:如何安全释放磁盘空间
java·安全·nacos
直有两条腿8 小时前
【大模型】Langchain4j
java·langchain
love530love8 小时前
Scoop 完整迁移指南:从 C 盘到 D 盘的无缝切换
java·服务器·前端·人工智能·windows·scoop
i220818 Faiz Ul8 小时前
计算机毕业设计|基于springboot + vue鲜花商城系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
消失的旧时光-19438 小时前
C++ 多线程与并发系统取向(二)—— 资源保护:std::mutex 与 RAII(类比 Java synchronized)
java·开发语言·c++·并发
莫寒清8 小时前
ThreadLocal
java·面试
iambooo8 小时前
Shell在日志分析与故障排查中的实战应用
linux·服务器·网络
一路往蓝-Anbo9 小时前
第 9 章:Linux 设备树 (DTS) ——屏蔽与独占外设
linux·运维·服务器·人工智能·stm32·嵌入式硬件
左手厨刀右手茼蒿9 小时前
Flutter for OpenHarmony: Flutter 三方库 image_size_getter 零加载极速获取图片尺寸(鸿蒙 UI 布局优化必备)
android·服务器·flutter·ui·华为·harmonyos