海康摄像头二次开发动态配置.dll与.so文件

本文档详细介绍了在海康摄像头二次开发过程中,如何处理Windows下的.dll和Linux下的.so文件动态配置问题。针对在jar包中无法直接获取文件路径的挑战,提出了通过Java代码解析jar包获取文件并复制到目标位置的解决方案,同时讨论了不通过jar包启动时的处理策略,以及使用System.getProperty('java.library.path')获取系统库路径的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

再对海康摄像头进行二次开发时,需要将海康提供的.dll(window)文件或.so(linux)文件通过路径的方式进行配置,项目在window上开发.在linux上进行部署,另一方面在linux上是通过jar包部署,无法直接获取到jar中.dll与.so文件的路径,需做成自动获取
在这里插入图片描述

问题

1.获取jar包中的指定的文件
2.如何填写有效的文件路径

通过jar包启动

获取jar包的路径,通过JarFile解析jar包,获取到想要的数据.复制到对应的文件夹下,将路径返回

代码

	//通过jar包启动
	public static String getLibraryPath(String type, String name) {
   
		String fileName = null;
		URL url= Application.class.getProtectionDomain().getCodeSource().getLocation();//获取jar包的路径
		try{
   
			//转化为utf-8编码,支持中文
			String path= URLDecoder.decode(url.getPath(),"utf-8");
			if(path.startsWith("file:")) {
   
				//判断是什么系统
				if (SystemUtils.name().equals("windows")) {
   
					path = path.replace("file:/", "");
				} else if (SystemUtils.name().equals("linux")) {
   
					path = path.replace("file:", "");
				}
			}
			if(path.contains(".jar!/")) {
   
				path = path.substring(0, path.indexOf(".jar!/")+4);//去掉后缀
			}
//			System.out.println(path);

			File file = new File(new File(path).getParentFile() + File.separator + type);//当前jar下新增目录
			if (!file.exists()) {
   
				JarFile jarFile 
#region using System; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Threading; using SocketLibrary; #endregion namespace HkwsSDK { /// /// 在海康威视的SDK包上,再进行封装,供简单直接的调用. /// 目前可以控制硬盘录像机和解码器,需要两者密码一样. /// public class HKWS : IDisposable { #region (0)变量定义 /// /// 发现的文件信息结构 /// private readonly NetSDK.NET_DVR_FIND_DATA[] FindData = new NetSDK.NET_DVR_FIND_DATA[1000]; /// /// 远程录像状态 /// public int _StatusSaveMp4; /// /// 功能:设定播放延迟和流畅。 /// 调节播放的延时和流畅程度,如果buffNum值越大,播放的流畅性越好, /// 相应的延时比较大,buffNum值越小,播放的延时很小, /// 但是当网络不太顺畅的时候,会有丢帧现象,感觉播放不会很流畅。 /// 一般设置的帧缓冲大于等于6帧时,音频预览才会正常, /// 如果不需要音频预览,只需要视频实时性则这个值可以设置的更小。 /// public int buffNum = 10; public int bytesReturned; public int channel = 1; public int channelCount = 5; // 共8个通道 public int channelStart = 1; /// /// 客户端信息结构 /// public NetSDK.NET_DVR_CLIENTINFO ClientInfo; /// /// 解码器通道信息 /// public NetSDK.NET_DVR_MATRIX_DEC_CHAN_INFO dci; /// /// 解码器设备配置信息结构 /// public NetSDK.NET_DVR_DEVICECFG DecoderDeviceCfg; /// /// 解码器设备信息结构体结构实体化 /// public NetSDK.NET_DVR_DEVICEINFO DecoderDeviceInfo; /// /// 解码器信息结构体实例化 /// public Server_Info DecoderInfo; /// /// 解码器登录用户id /// public int decoderUserID; /// /// 硬盘录像机设备配置信息结构 /// public NetSDK.NET_DVR_DEVICECFG DvrDeviceCfg; /// /// 硬盘录像机设备信息结构体结构
### 基于 QT 的海康威视 VM 平台二次开发 #### 背景概述 在现代桌面应用程序开发领域,开发者通常可以选择两种主要的技术路线:原生开发工具(如 Microsoft .NET Framework 或 WPF)以及跨平台框架(如 Qt 和 Electron)。对于需要高性能图形处理的应用场景,Qt 是一种非常流行的解决方案[^1]。 当涉及到海康威视的 VM 平台时,其官方 SDK 提供了丰富的接口支持多种编程语言环境下的集成扩展功能。通过结合 Qt 框架,可以实现更灵活、高效的 GUI 应用程序设计,并充分利用硬件加速特性来提升图像处理性能。 #### 开发准备事项 为了成功完成基于 Qt 对海康威视 VM 平台的二次开发工作,请确认已完成以下准备工作: - 安装最新版本的 **Qt Creator** 及对应编译器; - 下载并配置好适用于目标操作系统的海康威视 Vision Machine (VM) SDK; - 配置项目工程文件以链接必要的动态库 (.dll/.so),确保能够调用核心 API 函数; #### 示例代码展示 下面提供一段简单的示例代码用于演示如何初始化设备连接并之交互: ```cpp #include <QCoreApplication> #include "hikvision_vm_sdk.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 初始化SDK环境 int initResult = MV_SDK_Init(); if(initResult != MV_STATUS_SUCCESS){ qDebug() << "Failed to initialize HIKVISION VM SDK!"; return -1; } // 创建设备实例句柄 void* deviceHandle = nullptr; QString strDeviceName = "Your_Device_Name"; int connectResult = MV_OpenDevice(strDeviceName.toUtf8().data(), &deviceHandle); if(connectResult != MV_STATUS_SUCCESS || !deviceHandle){ qDebug() << "Error occurred while opening the specified device."; MV_SDK_UnInit(); // 清理资源 return -2; } // 启动抓图线程或其他业务逻辑... // 关闭设备及释放相关资源 MV_CloseDevice(deviceHandle); MV_SDK_UnInit(); return a.exec(); } ``` 上述代码片段展示了基本的操作流程,包括但不限于 SDK 初始设置、打开指定名称的摄像头设备等关键环节。 #### 注意要点 实际应用过程中可能还会遇到诸如错误码解析、多线程同步等问题,则需参照具体文档进一步深入研究解决办法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值