JAVA 对 海康SDK二次开发

JAVA 对 海康SDK二次开发


前言

由于项目要求需要使用海康闸机 。导入java demo并按知道添加动态库运行,靠报错 无法加载动态库Exception in thread “main” java.lang.UnsatisfiedLinkError: Unable to load library ‘PlayCtrl’: ÕҲ»µ½ָ¶¨当然 sdk也报错Exception in thread “main” java.lang.UnsatisfiedLinkError: Unable to load library 'HCNetSDK: ÕҲ»µ½ָ¶然后按官网的方法各种尝试,还好最后搞定了。差点崩溃的是数据解析


一、初始化

示例:

@Configuration
public class HCNetSDKConfiguration {

	@Value("${turn.Path}")
	String Path;//yml文件中配置引用的lib绝对路径
	/**
	 * @Author: fant
	 * @Description: 创建HCNetSDK类的实例,HCNetSDK类与HCNetSDK.dll文件结构体相对应,加载c++函数库
	 * @Date: 2020/7/29 15:19
	 **/
	@Bean
	public HCNetSDK hcNetSDK() {
		HCNetSDK hcNetSDK = (HCNetSDK) Native.loadLibrary(Path + "HCNetSDK", HCNetSDK.class);
		if (hcNetSDK.NET_DVR_Init()) {// 初始化sdk
			System.out.println("sdk初始化成功");
		} else {
			throw new RuntimeException("sdk初始化失败");
		}
		return hcNetSDK;
	}

}

二、数据解析

1.数据解析

代码如下(示例):

public void invoke(NativeLong lCommand, NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {
		String sAlarmType = null;
		switch (lCommand.intValue()) {
		/**
		 * 这里根据SDK获取
		 */
		case HCNetSDK.COMM_ALARM_ACS:// 闸机红外扫描获取二维码信息,自定义上传消息类型
			String[] sIP = new String[2];
			try {
				// 处理自己的业务
				// 报警消息是字节流,需自己处理 NET_DVR_ACS_ALARM_INFO
				HCNetSDK.NET_DVR_ACS_ALARM_INFO strACSInfo = new HCNetSDK.NET_DVR_ACS_ALARM_INFO();
				strACSInfo.write();
				Pointer pACSInfo = strACSInfo.getPointer();
				pACSInfo.write(0, pAlarmInfo.getByteArray(0, strACSInfo.size()), 0, strACSInfo.size());
				strACSInfo.read();
				sAlarmType = "门禁主机报警信息:卡号:" + new String(strACSInfo.struAcsEventInfo.byCardNo).trim() + ",卡类型:"
						+ strACSInfo.struAcsEventInfo.byCardType + ",报警主类型:" + strACSInfo.dwMajor + ",报警次类型:"
						+ strACSInfo.dwMinor;
				System.out.println(sAlarmType);
				// 报警设备IP地址
				sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);
				String ip = sIP[0].toString();
				System.out.println(ip);
				// 门禁红外扫描二维码信息
				String cardNo = new String(strACSInfo.struAcsEventInfo.byCardNo).trim();
				// 红外扫描器编号,门1:进;门2:出
				controlDoor(turn.getUserId().intValue(),1,1);
			} catch (Exception e) {
				e.printStackTrace();
			}
			break;
		}
		System.out.println("报警信息结束");
		System.out.println("告警类型" + sAlarmType);
		System.out.println("ip:" + new String(pAlarmer.sDeviceIP));
		System.out.println("用户凭证:" + pAlarmer.lUserID);

	}

2.门闸控制

代码如下(示例):

public boolean controlDoor(int lUserID, int lGatewayIndex, int dwStaic){
    	boolean flag = hcNetSDK.NET_DVR_ControlGateway(lUserID,lGatewayIndex,dwStaic);
    	System.out.println("门禁控制:"+flag);
		return flag;
    }

总结

一次总结,小小的记录一下,源码地址.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值