package com.fzzy.protocol.sdkhk.lpr;
|
|
import com.fzzy.protocol.sdkhk.HKUtils;
|
import com.fzzy.protocol.sdkhk.common.HCNetSDK;
|
import com.fzzy.protocol.sdkhk.common.LPRCallBask_V31;
|
import com.fzzy.protocol.sdkhk.common.OsSelect;
|
import com.sun.jna.Native;
|
import com.sun.jna.Pointer;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
|
/**
|
* 海康车牌识别监听控制,使用在宁夏石嘴山项目
|
*/
|
public class AlarmLpr {
|
|
Logger log = LoggerFactory.getLogger(AlarmLpr.class);
|
|
static HCNetSDK hCNetSDK = null;
|
static int[] lUserID = new int[]{0, 0, 0, 0, 0};//用户句柄 实现对设备登录
|
static int[] lAlarmHandle = new int[]{-1, -1, -1, -1, -1};//报警布防句柄
|
static int lListenHandle = -1;//报警监听句柄
|
static LPRCallBask_V31 fMSFCallBack_V31 = null;
|
|
|
/**
|
* SDK初始化
|
*
|
* @return
|
*/
|
public String initSdk() {
|
if (hCNetSDK == null) {
|
synchronized (HCNetSDK.class) {
|
String strDllPath = "";
|
try {
|
if (OsSelect.isWindows())
|
strDllPath = HKUtils.SDK_DIR_WIN + "\\HCNetSDK.dll";
|
else if (OsSelect.isLinux())
|
strDllPath = HKUtils.SDK_DIR_LINUX + "/libhcnetsdk.so";
|
hCNetSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class);
|
} catch (Exception ex) {
|
// System.out.println("loadLibrary: " + strDllPath + " Error: " + ex.getMessage());
|
log.error("loadLibrary: " + strDllPath + " Error: " + ex.getMessage());
|
|
return "ERROR:loadLibrary: " + strDllPath + " Error: " + ex.getMessage();
|
}
|
}
|
}
|
|
String logBasePath = HKUtils.getLogBasePath(OsSelect.isLinux());
|
|
//初始化
|
hCNetSDK.NET_DVR_Init();
|
|
//加载日志
|
hCNetSDK.NET_DVR_SetLogToFile(3, logBasePath, false);
|
|
//设置报警回调函数
|
if (fMSFCallBack_V31 == null) {
|
fMSFCallBack_V31 = new LPRCallBask_V31();
|
Pointer pUser = null;
|
if (!hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(fMSFCallBack_V31, pUser)) {
|
log.error("设置回调函数失败!");
|
return "ERROR:设置回调函数失败!";
|
} else {
|
log.debug("设置回调函数失败!");
|
}
|
}
|
|
|
//配置警告监听
|
HCNetSDK.NET_DVR_LOCAL_GENERAL_CFG struNET_DVR_LOCAL_GENERAL_CFG = new HCNetSDK.NET_DVR_LOCAL_GENERAL_CFG();
|
struNET_DVR_LOCAL_GENERAL_CFG.byAlarmJsonPictureSeparate = 1; //设置JSON透传报警数据和图片分离
|
struNET_DVR_LOCAL_GENERAL_CFG.write();
|
Pointer pStrNET_DVR_LOCAL_GENERAL_CFG = struNET_DVR_LOCAL_GENERAL_CFG.getPointer();
|
hCNetSDK.NET_DVR_SetSDKLocalCfg(17, pStrNET_DVR_LOCAL_GENERAL_CFG);
|
|
return HKUtils.RESULT_SUCCESS;
|
}
|
|
|
/**
|
* @param index 登陆顺序 默认0 -4 同时只能登陆5个设备,每个设备登陆的顺序,人为控制
|
* @param ip
|
* @param port
|
* @param userName
|
* @param pwd
|
* @return
|
*/
|
public String login(int index, String ip, int port, String userName, String pwd) {
|
|
//登陆
|
String msg = Login_V(index, ip, (short) port, userName, pwd);
|
|
if (!HKUtils.RESULT_SUCCESS.equals(msg)) {
|
return msg;
|
}
|
//启动事件监听
|
msg = SetAlarm_V(index, ip, port);
|
return msg;
|
}
|
|
/**
|
* 退出
|
*
|
* @param ip
|
* @param port
|
* @return
|
*/
|
public String logout(int index, String ip, int port) {
|
|
int i = index;
|
|
if (lAlarmHandle[i] > -1) {
|
if (!hCNetSDK.NET_DVR_CloseAlarmChan(lAlarmHandle[i])) {
|
log.debug(ip + ":" + port + "撤防成功");
|
}
|
}
|
if (lListenHandle > -1) {
|
if (!hCNetSDK.NET_DVR_StopListen_V30(lListenHandle)) {
|
|
log.debug(ip + ":" + port + "停止监听成功");
|
}
|
}
|
if (hCNetSDK.NET_DVR_Logout(lUserID[i])) {
|
log.debug(ip + ":" + port + "注销成功");
|
}
|
|
hCNetSDK.NET_DVR_Cleanup();
|
|
return HKUtils.RESULT_SUCCESS;
|
}
|
|
|
public String Login_V(int i, String ip, short port, String user, String psw) {
|
//注册
|
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();//设备信息
|
|
String m_sDeviceIP = ip;//设备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;
|
m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是
|
// m_strLoginInfo.byLoginMode=1; //ISAPI登录
|
m_strLoginInfo.write();
|
|
lUserID[i] = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
|
if (lUserID[i] == -1) {
|
log.error("ERROR:登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError());
|
return "ERROR:登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError();
|
|
}
|
|
log.info(ip + ":车牌识别设备登录成功!");
|
return HKUtils.RESULT_SUCCESS;
|
}
|
|
|
public String SetAlarm_V(int index, String ip, int port) {
|
if (lAlarmHandle[index] < 0) { //尚未布防,需要布防
|
//报警布防参数设置
|
HCNetSDK.NET_DVR_SETUPALARM_PARAM m_strAlarmInfo = new HCNetSDK.NET_DVR_SETUPALARM_PARAM();
|
m_strAlarmInfo.dwSize = m_strAlarmInfo.size();
|
m_strAlarmInfo.byLevel = 1; //布防等级 0 一级,1二级
|
m_strAlarmInfo.byAlarmInfoType = 1; // 智能交通报警信息上传类型:0- 老报警信息(NET_DVR_PLATE_RESULT),1- 新报警信息(NET_ITS_PLATE_RESULT)
|
m_strAlarmInfo.byDeployType = 0; //布防类型:0-客户端布防,1-实时布防
|
m_strAlarmInfo.write();
|
lAlarmHandle[index] = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID[index], m_strAlarmInfo);
|
log.debug("lAlarmHandle: " + lAlarmHandle[index]);
|
if (lAlarmHandle[index] == -1) {
|
log.error("ERROR:布防失败,错误码为" + hCNetSDK.NET_DVR_GetLastError());
|
return "ERROR:布防失败,错误码为" + hCNetSDK.NET_DVR_GetLastError();
|
} else {
|
log.debug(ip + ":" + port + " 布防成功");
|
}
|
} else {
|
log.warn(ip + ":" + port + " 设备已经布防,请先撤防!");
|
}
|
|
return HKUtils.RESULT_SUCCESS;
|
}
|
|
}
|