package com.ruoyi.HIKVISION.function; import com.ruoyi.HIKVISION.NetSDK.FMSGCallBack_V31; import com.ruoyi.HIKVISION.NetSDK.HCNetSDK; import com.ruoyi.HIKVISION.common.osSelect; import com.sun.jna.Native; import com.sun.jna.Pointer; import org.json.JSONException; import java.io.UnsupportedEncodingException; public class AcsMain { public static HCNetSDK hCNetSDK = null; static int lUserID = -1;//用户句柄 public static int lAlarmHandle = -1; public static int lListenHandle = -1; public static FMSGCallBack_V31 fMSFCallBack_V31 = null; static int iCharEncodeType = 0;//设备字符集 private static String[][] connectionInfos = new String[5][5]; private static int[] connectionHandlers = new int[5]; private static int[] connectionUsers = new int[5]; static { // IP,user,password,port,alarmORnot connectionInfos[0] = new String[]{"192.168.1.64", "admin", "a1234567", "8000", "1","1","1","ty"}; // connectionInfos[1] = new String[]{"192.168.1.88", "admin", "a1234567", "8000", "1"}; // connectionInfos[2] = new String[]{"192.168.1.64", "admin", "a1234567", "8000", "1"}; // connectionInfos[3] = new String[]{"14.8.66.99", "admin", "a1234567", "8000", "0"}; // connectionInfos[4] = new String[]{"14.8.66.178", "admin", "a1234567", "8000", "0"}; connectionHandlers[0] = -1; // connectionHandlers[1] = -1; // connectionHandlers[2] = -1; // connectionHandlers[3] = -1; // connectionHandlers[4] = -1; connectionUsers[0] = -1; // connectionUsers[1] = -1; // connectionUsers[2] = -1; // connectionUsers[3] = -1; // connectionUsers[4] = -1; } /** * @param args * @throws UnsupportedEncodingException * @throws InterruptedException * @throws JSONException */ public static void main(String[] args) throws UnsupportedEncodingException, InterruptedException, JSONException { if(hCNetSDK == null) { if(!CreateSDKInstance()) { System.out.println("Load SDK fail"); return; } } //linux系统建议调用以下接口加载组件库 if (osSelect.isLinux()) { HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256); HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256); //这里是库的绝对路径,请根据实际情况修改,注意改路径必须有访问权限 String strPath1 = System.getProperty("user.dir") + "/lib/libcrypto.so.1.1"; String strPath2 = System.getProperty("user.dir") + "/lib/libssl.so.1.1"; System.arraycopy(strPath1.getBytes(), 0, ptrByteArray1.byValue, 0, strPath1.length()); ptrByteArray1.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArray1.getPointer()); System.arraycopy(strPath2.getBytes(), 0, ptrByteArray2.byValue, 0, strPath2.length()); ptrByteArray2.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArray2.getPointer()); String strPathCom = System.getProperty("user.dir") + "/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()); } hCNetSDK.NET_DVR_Init(); boolean i= hCNetSDK.NET_DVR_SetLogToFile(3, "..//sdklog", false); //设置报警回调函数 if (fMSFCallBack_V31 == null) { fMSFCallBack_V31 = new FMSGCallBack_V31(); Pointer pUser = null; if (!AcsMain.hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(fMSFCallBack_V31, pUser)) { System.out.println("设置回调函数失败!"); } else { System.out.println("设置回调函数成功!"); } } HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息 HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息 //报警布防参数设置 HCNetSDK.NET_DVR_SETUPALARM_PARAM m_strAlarmInfo = new HCNetSDK.NET_DVR_SETUPALARM_PARAM(); m_strAlarmInfo.dwSize = m_strAlarmInfo.size(); m_strAlarmInfo.byLevel = 1; //布防等级 m_strAlarmInfo.byDeployType = 0; //布防类型 0:客户端布防 1:实时布防 m_strAlarmInfo.byAlarmInfoType = 1; // 智能交通报警信息上传类型:0- 老报警信息(NET_DVR_PLATE_RESULT),1- 新报警信息(NET_ITS_PLATE_RESULT) m_strAlarmInfo.write(); startCamera(m_strLoginInfo, m_strDeviceInfo, m_strAlarmInfo); // 注册设备回调,布防 // Login("192.168.1.3","admin","abcd1234",(short) 8000); //登陆 // MutilCard.setGroupCfg(lUserID); //多重卡认证功能 // MutilCard.setMultiCardCfg(lUserID); //多重卡刷卡开门功能 /** * 人员管理模块 */ // UserManage.SearchUserInfo(lUserID); //查询所有人员 // UserManage.SetCardTemplate(lUserID,2); //人员计划模板配置 // UserManage.deleteUserInfo(lUserID); //删除人员 // UserManage.AddUserInfo(lUserID,"ceshi1"); //添加人员 /** * 人脸管理模块 */ FaceManage.SearchFaceInfo(lUserID,"tset123"); //查询人脸 // FaceManage.AddFaceByBinary(lUserID,"ceshi1"); //按照二进制方式下发人脸图片 // FaceManage.AddFaceByUrl(lUserID,"test111"); //按URL方式下发人脸图片 // FaceManage.DeleteFaceInfo(lUserID,"test111"); //人脸删除 // FaceManage.CaptureFaceInfo(lUserID); //人脸采集,下发人脸采集命令,从设备中采集人脸图片保存到本地 /** * 卡号管理模块 */ // CardManage.searchCardInfo(lUserID,"ceshi1"); //按照人员工号查询卡号 // CardManage.addCardInfo(lUserID,"12345"); //下发卡号 // CardManage.searchCardInfo(lUserID,"test111"); //按照人员工号查询卡号 // CardManage.searchAllCardInfo(lUserID); //查询所有卡号 // CardManage.deleteCardInfo(lUserID,"111"); //根据工号删除卡号 // CardManage.deleteAllCardInfo(lUserID); //删除全部卡号信息 // CardManage.getAllCardNumber(lUserID); //获取所有卡数量 /** * 指纹管理模块 */ // FingerManage.fingerCapture(lUserID); //采集指纹模块,采集指纹数据为二进制 // FingerManage.fingerCpaureByisapi(lUserID); //采用透传ISAPI协议方式采集指纹,获取的指纹信息为BASE64编码 // eventSearch.SearchAllEvent(lUserID); //事件查询 // FingerManage.SearchFingerInfo(lUserID,"2222"); //查询指纹 // //*指纹数据的BASE64编码 // String fingerdata=""; // FingerManage.setOneFinger(lUserID,"zhangsan",fingerdata); //下发指纹 // FingerManage.deleteFinger(lUserID,"zhangsan"); //按工号和读卡器删除指纹 /** * 报警布防模块 */ // Alarm.SetAlarm(lUserID); //报警布防 // Alarm.StartListen(); //报警监听 /** * 增加sleep时间,保证程序一直运行, */ Thread.sleep(30000); /** * 撤防,端口监听,注销设备,释放SDK */ AcsMain.Logout(); } /** * 注册设备回调,布防 * @param m_strLoginInfo * @param m_strDeviceInfo * @param m_strAlarmInfo * @return 成功/失败 */ private static boolean startCamera(HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo, HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo, HCNetSDK.NET_DVR_SETUPALARM_PARAM m_strAlarmInfo) { String[] connectionInfo; String m_sDeviceIP; String m_sUsername; String m_sPassword; int tryTimes = 0; for (int i = 0; i < connectionInfos.length; i++) { connectionInfo = connectionInfos[i]; if ("1".equals(connectionInfo[4])) { m_sDeviceIP = connectionInfo[0]; m_sUsername = connectionInfo[1];//设备用户名 m_sPassword = connectionInfo[2];//设备密码 m_strLoginInfo.wPort = (short)Integer.parseInt(connectionInfo[3]); //注册 m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是 m_strLoginInfo.write(); lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); while (lUserID == -1) { System.out.println((i + 1) + "号设备连接失败 " + "IP[" + m_sDeviceIP + "]"); lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } if (lUserID != -1) { m_strDeviceInfo.read(); iCharEncodeType = m_strDeviceInfo.byCharEncodeType; System.out.println((i + 1) + "号设备连接成功 " + "IP[" + m_sDeviceIP + "]"+"iCharEncodeType:"+iCharEncodeType); } else { return false; } connectionUsers[i] = lUserID; lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo); while (lAlarmHandle == -1 && tryTimes < 10) { System.out.println((i + 1) + "号设备布防失败 " + "IP[" + m_sDeviceIP + "]"); lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo); tryTimes++; try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } if (lAlarmHandle != -1) { connectionHandlers[i] = lAlarmHandle; System.out.println((i + 1) + "号设备布防成功 " + "IP[" + m_sDeviceIP + "]"); } else { return false; } } } return true; } /** * 设备登录 * @param ipadress IP地址 * @param user 用户名 * @param psw 密码 * @param port 端口,默认8000 */ public static void Login(String ipadress, String user, String psw, short port) { //注册 // HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息 // String m_sDeviceIP = ipadress;//设备ip地址 // m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; // System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); // String m_sUsername = user;//设备用户名 // m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; // System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); // String m_sPassword = psw;//设备密码 // m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; // System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); // m_strLoginInfo.wPort = port; //sdk端口 // m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是 // m_strLoginInfo.write(); // HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息 // lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); // if (lUserID == -1) { // System.out.println("登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError()); // return; // } else { // System.out.println("登录成功!"); // m_strDeviceInfo.read(); // iCharEncodeType = m_strDeviceInfo.byCharEncodeType; // return; // // } } /** * 登出操作 * */ public static void Logout(){ /**退出之前判断布防监听状态,并做撤防和停止监听操作*/ if (lAlarmHandle >= 0){ if (!hCNetSDK.NET_DVR_CloseAlarmChan_V30(lAlarmHandle)){ System.out.println("撤防失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); }else{ System.out.println("撤防成功!!!"); } } if (lListenHandle >= 0){ if (!hCNetSDK.NET_DVR_StopListen_V30(lListenHandle)){ System.out.println("取消监听失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); }else{ System.out.println("停止监听成功!!!"); } } /**登出和清理,释放SDK资源*/ if (lUserID>=0) { hCNetSDK.NET_DVR_Logout(lUserID); } hCNetSDK.NET_DVR_Cleanup(); } /** * 根据不同操作系统选择不同的库文件和库路径 * @return */ private static boolean CreateSDKInstance() { if(hCNetSDK == null) { synchronized (HCNetSDK.class) { String strDllPath = ""; try { //System.setProperty("jna.debug_load", "true"); if(osSelect.isWindows()) //win系统加载库路径 strDllPath = System.getProperty("user.dir") + "\\lib\\HCNetSDK.dll"; else if(osSelect.isLinux()) //Linux系统加载库路径 strDllPath = System.getProperty("user.dir") + "/lib/libhcnetsdk.so"; hCNetSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class); }catch (Exception ex) { System.out.println("loadLibrary: " + strDllPath + " Error: " + ex.getMessage()); return false; } } } return true; } }//AcsMain Class结束