海康设备集成springboot
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
公司要做一个智慧社区项目,之前是通过海康平台的接口简单好用,只不过现在收费啦,所有要换成SDK的方式来获取数据,现在来总结一下经验
提示:以下是本篇文章正文内容,下面案例可供参考
一、海康SDK包
根据下载的SKD包中的DEMO示例连接设备
创建一个springboot项目将库文件放入根目录lib文件下(lib自己创建)maven 加载一下
连接设备
1.HCNetSDK.dll这个文件根据自己的来
代码如下(示例):
/**
* 根据不同操作系统选择不同的库文件和库路径
* @return
*/
private static boolean createSDKInstance()
{
if(hCNetSDK == null)
{
synchronized (HCNetSDK.class)
{
String strDllPath = "";
try
{
//System.setProperty("jna.debug_load", "true");modules
if(osSelect.isWindows())
//win系统加载库路径
strDllPath = System.getProperty("user.dir") + "\\modules\\trafficrecord\\lib\\HCNetSDK.dll";
else if(osSelect.isLinux())
//Linux系统加载库路径
//获取到的path是file:/home/trafficrecord-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/lib/linux/libhcnetsdk.so格式的
//strDllPath = AcsMain.class.getClassLoader().getResource("/lib/linux/libhcnetsdk.so").getPath().substring(5);
strDllPath = "/usr/lib64/libhcnetsdk.so";
System.out.println("===============================================");
System.out.println("strDllPath==="+strDllPath);
hCNetSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class);
}catch (Exception ex) {
System.out.println("loadLibrary: " + strDllPath + " Error: " + ex.getMessage());
return false;
}
}
}
return true;
}
海康设备下载网络设备搜索工具能找到设备后将参数写到AcsMain的main方法中
main方法连接设备我这里将ip,端口,账号,密码设为参数啦
public static void init(String ip,String userName,String password,String port) {
if(hCNetSDK == null)
{
if(!createSDKInstance())
{
log.info(ip+" 初始化SDK失败");
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 = "/usr/lib64/libcrypto.so.1.1";
String strPath2 = "/usr/lib64/libssl.so.1.1";
//String strPath1 = AcsMain.class.getClassLoader().getResource("/lib/linux/libcrypto.so.1.1").getPath().substring(5);
//String strPath2 = AcsMain.class.getClassLoader().getResource("/lib/linux/libssl.so.1.1").getPath().substring(5);
System.out.println("===============================================");
System.out.println("strPath1==="+strPath1);
System.out.println("strPath2==="+strPath2);
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 = "/usr/lib64/";
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();
//开启SDK日志打印
boolean i= hCNetSDK.NET_DVR_SetLogToFile(3, "./sdklog", false);
login_V40(ip,userName,password,Short.parseShort(StringUtils.isEmpty(port) ? "8000" : port)); //登陆设备
}
成功之后可以最设备上的人员进行增删改查,以及事件的查询,我是根据定时任务去拉取的
二、车牌识别
车牌识别案例
设备遍历多线程去监听车辆
三、单元门禁DEMO中Alarm进行监听
总结:多看官方文档