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结束
|