标签:strLoginInfo 兼容问题 windows userId HkSdkLinux so Linux NET DVR
上一篇提出的问题,在前几天解决了。
海康的技术人员给出了指导,在Linux库加载失败的时候,需要在代码中手动指定配置文件。
库文件加载说明】
// 1. lib文件夹里面所有库文件libhcnetsdk.so、libHCCore.so、libssl.so、libcrypto.so以及HCNetSDKCom文件夹都需要加载到工程中。
//
// 2. HCNetSDKCom文件夹如果和libhcnetsdk.so、libhpr.so、libHCCore文件、可执行文件不在同级目录,或者加载失败,可以调用NET_DVR_SetSDKInitCfg(enumType类型赋值为2,lpInBuff对应结构体NET_DVR_LOCAL_SDK_PATH)设置组件库所在路径。
//
// 3. libcrypto.so和libssl.so是开源库,如果库文件加载失败,可以调用NET_DVR_SetSDKInitCfg(enumType类型赋值为3,lpInBuff对应libcrypto.so所在的路径字符串)、NET_DVR_SetSDKInitCfg(enumType类型赋值为4,lpInBuff对应libssl.so所在的路径字符串)指定下这些库文件加载路径。
//设置HCNetSDKCom组件库所在路径
String strPathCom = hkSdkLinuxHome;
HkSdkLinux.NET_DVR_LOCAL_SDK_PATH struComPath = new HkSdkLinux.NET_DVR_LOCAL_SDK_PATH();
System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length());
struComPath.write();
hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer());
//设置libcrypto.so所在路径
HkSdkLinux.BYTE_ARRAY ptrByteArrayCrypto = new HkSdkLinux.BYTE_ARRAY(256);
String strPathCrypto = hkSdkLinuxHome + "libcrypto.so";
System.arraycopy(strPathCrypto.getBytes(), 0, ptrByteArrayCrypto.byValue, 0, strPathCrypto.length());
ptrByteArrayCrypto.write();
hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArrayCrypto.getPointer());
//设置libssl.so所在路径
HkSdkLinux.BYTE_ARRAY ptrByteArraySsl = new HkSdkLinux.BYTE_ARRAY(256);
String strPathSsl = hkSdkLinuxHome + "libssl.so";
System.arraycopy(strPathSsl.getBytes(), 0, ptrByteArraySsl.byValue, 0, strPathSsl.length());
ptrByteArraySsl.write();
hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArraySsl.getPointer());
注册的时候也需要注意,不能用windows的注册方式。
需要copy windows的注册方法、注册类,如 NET_DVR_USER_LOGIN_INFO
、NET_DVR_DEVICEINFO_V40
这两个类。
private void registerLinux(String m_sDeviceIP,String m_sUsername,String m_sPassword) {
HkSdkLinux.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HkSdkLinux.NET_DVR_USER_LOGIN_INFO();//设备登录信息
HkSdkLinux.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HkSdkLinux.NET_DVR_DEVICEINFO_V40();//设备信息
//---------------------------------------
//登录参数,包括设备地址、登录用户、密码等
//注册之前先注销已注册的用户,预览情况下不可注销
int userId = -1;
// int userId = redisService.getInt(EasyConstants.HK_SDK.USER + m_sDeviceIP);
// if (userId > -1) {
// //先注销
// loginOut(userId);
// redisService.remove(EasyConstants.HK_SDK.USER + m_sDeviceIP);
// }
//注册
m_strLoginInfo.sDeviceAddress = new byte[HkSdkLinux.NET_DVR_DEV_ADDRESS_MAX_LEN];
System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
m_strLoginInfo.sUserName = new byte[HkSdkLinux.NET_DVR_LOGIN_USERNAME_MAX_LEN];
System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
m_strLoginInfo.sPassword = new byte[HkSdkLinux.NET_DVR_LOGIN_PASSWD_MAX_LEN];
System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
m_strLoginInfo.wPort = (short)8000;// 设备端口,默认8000
m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是
m_strLoginInfo.write();
userId = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
// userId存入缓存
redisService.put(EasyConstants.HK_SDK.USER + m_sDeviceIP,userId);
if (userId < 0) {
Logger.info("海康SDK注册失败,ip:{},错误号:{}",m_sDeviceIP,hCNetSDK.NET_DVR_GetLastError());
} else {
// JOptionPane.showMessageDialog(null, "注册成功");
Logger.info("海康SDK注册成功,ip:{},userId:{}",m_sDeviceIP,userId);
// 注册成功后,直接布防
setupAlarmChan(m_sDeviceIP);
}
}
标签:strLoginInfo,兼容问题,windows,userId,HkSdkLinux,so,Linux,NET,DVR 来源: https://www.cnblogs.com/yaomaomao/p/13672327.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。