Java项目集成海康威视门禁,NVR

您所在的位置:网站首页 海康门禁重置 Java项目集成海康威视门禁,NVR

Java项目集成海康威视门禁,NVR

2023-12-16 14:36| 来源: 网络整理| 查看: 265

1.准备

门禁设备型号 DS-K1T671M NVR设备型号 DS-7608N-K2

在这里插入图片描述 jar包需要引入到项目里,lib则是库文件

2.需求

在项目中集成海康门禁的刷脸记录,NVR视频回放列表

3.获取门禁刷脸记录代码 import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import java.io.*; import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * 海康门禁 * @author root */ public class Test2 { static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; static int lUserID = -1;//用户句柄 static int m_lSetCardCfgHandle = -1; //下发卡长连接句柄 static int m_lSetFaceCfgHandle = -1; //下发人脸长连接句柄 static int dwState = -1; //下发卡数据状态 static int dwFaceState = -1; //下发人脸数据状态 static int lHandle = -1; //下发人脸数据状态 static int lAlarmHandle = -1; //下发人脸数据状态 static int iCharEncodeType = 0;//设备字符集 public void login() { //注册 HCNetSDK.NET_DVR_USER_LOGIN_INFO mStrLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息 String m_sDeviceIP = "172.16.20.208";//设备ip地址 mStrLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; System.arraycopy(m_sDeviceIP.getBytes(), 0, mStrLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); String m_sUsername = "admin";//设备用户名 mStrLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; System.arraycopy(m_sUsername.getBytes(), 0, mStrLoginInfo.sUserName, 0, m_sUsername.length()); String m_sPassword = "hk12345";//设备密码 mStrLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; System.arraycopy(m_sPassword.getBytes(), 0, mStrLoginInfo.sPassword, 0, m_sPassword.length()); mStrLoginInfo.wPort = 8000; mStrLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是 mStrLoginInfo.write(); HCNetSDK.NET_DVR_DEVICEINFO_V40 mStrDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息 lUserID = hCNetSDK.NET_DVR_Login_V40(mStrLoginInfo, mStrDeviceInfo); if (lUserID == -1) { System.out.println("登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError()); } else { System.out.println("登录成功!"); iCharEncodeType = mStrDeviceInfo.byCharEncodeType; } } public void getOneCard(String strCardNo) { HCNetSDK.NET_DVR_CARD_COND struCardCond = new HCNetSDK.NET_DVR_CARD_COND(); struCardCond.read(); struCardCond.dwSize = struCardCond.size(); struCardCond.dwCardNum = 1; //查询一个卡参数 struCardCond.write(); Pointer ptrStruCond = struCardCond.getPointer(); m_lSetCardCfgHandle = hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_GET_CARD, ptrStruCond, struCardCond.size(), null, null); if (m_lSetCardCfgHandle == -1) { System.out.println("建立查询卡参数长连接失败,错误码为" + hCNetSDK.NET_DVR_GetLastError()); return; } else { System.out.println("建立查询卡参数长连接成功!"); } //查找指定卡号的参数,需要下发查找的卡号条件 HCNetSDK.NET_DVR_CARD_SEND_DATA struCardNo = new HCNetSDK.NET_DVR_CARD_SEND_DATA(); struCardNo.read(); struCardNo.dwSize = struCardNo.size(); for (int i = 0; i < HCNetSDK.ACS_CARD_NO_LEN; i++) { struCardNo.byCardNo[i] = 0; } for (int i = 0; i < strCardNo.length(); i++) { struCardNo.byCardNo[i] = strCardNo.getBytes()[i]; } struCardNo.write(); //用户记录 HCNetSDK.NET_DVR_CARD_RECORD struCardRecord = new HCNetSDK.NET_DVR_CARD_RECORD(); struCardRecord.read(); HCNetSDK.NET_DVR_AUTH_INFO authInfo = new HCNetSDK.NET_DVR_AUTH_INFO(); IntByReference pInt = new IntByReference(0); while (true) { dwState = hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(m_lSetCardCfgHandle, struCardNo.getPointer(), struCardNo.size(), struCardRecord.getPointer(), struCardRecord.size(), pInt); struCardRecord.read(); if (dwState == -1) { System.out.println("NET_DVR_SendWithRecvRemoteConfig查询卡参数调用失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); break; } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEEDWAIT) { System.out.println("配置等待"); try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) { System.out.println("获取卡参数失败, 卡号: " + strCardNo); break; } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) { System.out.println("获取卡参数异常, 卡号: " + strCardNo); break; } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) { try { String strName = ""; if ((iCharEncodeType == 0) || (iCharEncodeType == 1) || (iCharEncodeType == 2)) { strName = new String(struCardRecord.byName, "GBK").trim(); } if (iCharEncodeType == 6) { strName = new String(struCardRecord.byName, StandardCharsets.UTF_8).trim(); } System.out.println("获取卡参数成功, 卡号: " + new String(struCardRecord.byCardNo).trim() + ", 卡类型:" + struCardRecord.byCardType + ", 姓名:" + strName); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) { System.out.println("获取卡参数完成"); break; } } if (!hCNetSDK.NET_DVR_StopRemoteConfig(m_lSetCardCfgHandle)) { System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); } else { System.out.println("NET_DVR_StopRemoteConfig接口成功"); } } public void setCartTemplate(int iPlanTemplateNumber) { int iErr = 0; //设置卡权限计划模板参数 HCNetSDK.NET_DVR_PLAN_TEMPLATE_COND struPlanCond = new HCNetSDK.NET_DVR_PLAN_TEMPLATE_COND(); struPlanCond.dwSize = struPlanCond.size(); struPlanCond.dwPlanTemplateNumber = iPlanTemplateNumber;//计划模板编号,从1开始,最大值从门禁能力集获取 struPlanCond.wLocalControllerID = 0;//就地控制器序号[1,64],0表示门禁主机 struPlanCond.write(); HCNetSDK.NET_DVR_PLAN_TEMPLATE struPlanTemCfg = new HCNetSDK.NET_DVR_PLAN_TEMPLATE(); struPlanTemCfg.dwSize = struPlanTemCfg.size(); struPlanTemCfg.byEnable = 1; //是否使能:0- 否,1- 是 struPlanTemCfg.dwWeekPlanNo = 1;//周计划编号,0表示无效 struPlanTemCfg.dwHolidayGroupNo[0] = 0;//假日组编号,按值表示,采用紧凑型排列,中间遇到0则后续无效 byte[] byTemplateName; try { byTemplateName = "计划模板名称测试".getBytes("GBK"); //计划模板名称 for (int i = 0; i < HCNetSDK.NAME_LEN; i++) { struPlanTemCfg.byTemplateName[i] = 0; } System.arraycopy(byTemplateName, 0, struPlanTemCfg.byTemplateName, 0, byTemplateName.length); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } struPlanTemCfg.write(); IntByReference pInt = new IntByReference(0); Pointer lpStatusList = pInt.getPointer(); if (!hCNetSDK.NET_DVR_SetDeviceConfig(lUserID, HCNetSDK.NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50, 1, struPlanCond.getPointer(), struPlanCond.size(), lpStatusList, struPlanTemCfg.getPointer(), struPlanTemCfg.size())) { iErr = hCNetSDK.NET_DVR_GetLastError(); System.out.println("NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50失败,错误号:" + iErr); return; } System.out.println("NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50成功!"); //获取卡权限周计划参数 HCNetSDK.NET_DVR_WEEK_PLAN_COND struWeekPlanCond = new HCNetSDK.NET_DVR_WEEK_PLAN_COND(); struWeekPlanCond.dwSize = struWeekPlanCond.size(); struWeekPlanCond.dwWeekPlanNumber = 1; struWeekPlanCond.wLocalControllerID = 0; HCNetSDK.NET_DVR_WEEK_PLAN_CFG struWeekPlanCfg = new HCNetSDK.NET_DVR_WEEK_PLAN_CFG(); struWeekPlanCond.write(); struWeekPlanCfg.write(); Pointer lpCond = struWeekPlanCond.getPointer(); Pointer lpInbuferCfg = struWeekPlanCfg.getPointer(); if (!hCNetSDK.NET_DVR_GetDeviceConfig(lUserID, HCNetSDK.NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50, 1, lpCond, struWeekPlanCond.size(), lpStatusList, lpInbuferCfg, struWeekPlanCfg.size())) { iErr = hCNetSDK.NET_DVR_GetLastError(); System.out.println("NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50失败,错误号:" + iErr); return; } struWeekPlanCfg.read(); struWeekPlanCfg.byEnable = 1; //是否使能:0- 否,1- 是 //避免时间段交叉,先初始化 for (int i = 0; i < 7; i++) { for (int j = 0; j < 8; j++) { struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].byEnable = 0; struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.byHour = 0; struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.byMinute = 0; struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.bySecond = 0; struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.byHour = 0; struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.byMinute = 0; struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.bySecond = 0; } } //一周7天,全天24小时 for (int i = 0; i < 7; i++) { struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].byEnable = 1; struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byHour = 0; struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byMinute = 0; struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.bySecond = 0; struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byHour = 24; struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byMinute = 0; struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.bySecond = 0; } //一周7天,每天设置2个时间段 /*for(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3