1,海康威视门禁设备对接海康SDK,集成封装相关代码,适配海康门禁人脸门禁一体机,目前版本为海康智能身份识别终端DS-K1T系列,其他系列根据官网描述也能适配,实际情况还需独自对接设备测试
2,目前完成相关功能集成,作为一个独立maven项目实现,可以打为jar包引入项目即可使用(该代码是根据业务需求所拟,故可根据实际需求更改jar代码…)
3,其中实现了:人员人脸,卡号,指纹(下发,删除,修改),门禁事件告警(设备),门禁异常告警,远程开关门,控制设备采集人脸,指纹。以及一些重要配置
4,代码有点low,但是功能基本实现,实际对接可互相交流一下。以下展示部分实现代码。
5,SDK加载
private static boolean createSdkInstance(String windowsPath, String linuxPath) {
if (hCNetSDK == null) {
synchronized (HCNetSDK.class) {
String strDllPath = "";
try {
if (OsSelect.isWindows()) {
strDllPath = windowsPath + "\\HCNetSDK.dll";
} else if (OsSelect.isLinux()) {
strDllPath = linuxPath + "/libhcnetsdk.so";
}
hCNetSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class);
} catch (Exception ex) {
System.out.println("loadLibrary: " + strDllPath + " Error: " + ex.getMessage());
ex.printStackTrace();
return false;
}
}
}
return true;
}
6,还需要进行初始化,才能进行设备登录
public static BackResult initInformation(String windowsPath, String linuxPath) {
BackResult backResult = new BackResult();
if (hCNetSDK == null) {
if (!createSdkInstance(windowsPath, linuxPath)) {
backResult.setStatusCode(11);
backResult.setStatusCodeMsg("Load SDK fail");
return backResult;
}
}
if (OsSelect.isLinux()) {
HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256);
HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256);
String strPath1 = linuxPath + "/libcrypto.so.1.1";
String strPath2 = linuxPath + "/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 = linuxPath;
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());
}
boolean b = hCNetSDK.NET_DVR_Init();
if (b) {
backResult.setStatusCode(0);
backResult.setStatusCodeMsg("初始化成功");
} else {
backResult.setStatusCode(hCNetSDK.NET_DVR_GetLastError());
backResult.setStatusCodeMsg("初始化失败" + CommonUtil.getLastErrorMsg(hCNetSDK.NET_DVR_GetLastError()));
}
return backResult;
}
7,设备登录
public static BackResult login(String ipadress, String user, String psw, short port) {
HCNetSDK.NET_DVR_USER_LOGIN_INFO strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
String sDeviceIp = ipadress;
strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
System.arraycopy(sDeviceIp.getBytes(), 0, strLoginInfo.sDeviceAddress, 0, sDeviceIp.length());
String sUsername = user;
strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
System.arraycopy(sUsername.getBytes(), 0, strLoginInfo.sUserName, 0, sUsername.length());
String sPassword = psw;
strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
System.arraycopy(sPassword.getBytes(), 0, strLoginInfo.sPassword, 0, sPassword.length());
strLoginInfo.wPort = port;
strLoginInfo.bUseAsynLogin = false;
strLoginInfo.write();
HCNetSDK.NET_DVR_DEVICEINFO_V40 strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
BackResult backResult = new BackResult();
int userId = hCNetSDK.NET_DVR_Login_V40(strLoginInfo, strDeviceInfo);
if ((userId == -1) || (userId == 0xFFFFFFFF)) {
backResult.setlUserId(userId);
backResult.setStatusCode(hCNetSDK.NET_DVR_GetLastError());
backResult.setStatusCodeMsg("登录失败:" + CommonUtil.getLastErrorMsg(hCNetSDK.NET_DVR_GetLastError()));
return backResult;
} else {
strDeviceInfo.read();
iCharEncodeType = strDeviceInfo.byCharEncodeType;
backResult.setStatusCode(0);
backResult.setlUserId(userId);
backResult.setlAlarmHandle(-1);
backResult.setStatusCodeMsg("登录成功");
return backResult;
}
}
8,友好的交流能够让人省事,省时,省钱。