700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Java对接海康威视明眸门禁设备

Java对接海康威视明眸门禁设备

时间:2019-03-29 01:36:00

相关推荐

Java对接海康威视明眸门禁设备

目录

1.两套SDK(windows开发版和linux发布版)

2.导入jar包

3.导入SDK

4.导入API

5.调用API(这里以登录为例)

6.发布到linux

1.两套SDK(windows开发版和linux发布版)

海康开放平台海康威视合作生态致力打造一个能力开放体系、两个生态圈,Hikvision AI Cloud开放平台是能力开放体系的核心内容。它是海康威视基于多年在视频及物联网核心技术积累之上,融合AI、大数据、云计算等技术,为合作伙伴提供的一个二次开发及创新的平台。/#home

2.导入jar包

<dependency><groupId>com.sun.jna</groupId><artifactId>test</artifactId><version>1.0</version><scope>system</scope><systemPath>${basedir}/src/main/resources/jna.jar</systemPath></dependency><dependency><groupId>com.sun.jna.examples</groupId><artifactId>test</artifactId><version>1.0</version><scope>system</scope><systemPath>${basedir}/src/main/resources/examples.jar</systemPath></dependency><dependency><groupId>com.sun.jna.json</groupId><artifactId>test</artifactId><version>1.0</version><scope>system</scope><systemPath>${basedir}/src/main/resources/json.jar</systemPath></dependency>

3.导入SDK

项目根目录下新建lib文件夹,并设置成资源目录

4.导入API

5.调用API(这里以登录为例)

打开AcsMain文件

6.发布到linux

大家有没有想过,windows版的SDK为什么要复制到项目根目录的lib文件夹下?

所以发布到linux的时候,我们需要将linux版本的SDK复制到linux的lib目录下(如果是docker发布,记得做好共享映射哦)

比如:-v /linux地址:/docker地址

docker run -itd --name centos-test -p 8080:8080 -v /lib:/lib -v /home/python/profile:/etc/profile -v /home/python/bashrc:/etc/bashrc centos:latest

7.为了更方便的使用:改造API(基于SpringBoot)

海康威视的API示例,只支持单个设备,实际应用中往往至少有一进一出两个设备。这里我们进行稍稍的改造以适应实际情况:

①新建一个实体类用来存储设备的基本信息:

package com.ciih.facebarrier.model;/*** 存储设备的基本信息*/public class Barrier {/*** IP地址*/public String ip;/*** 端口*/public short port;/*** 账号*/public String username;/*** 密码*/public String password;/*** 用户句柄:登录后的操作句柄*/public int lUserID = -1;/*** 布防句柄:布防后的操作句柄*/public int lAlarmHandle = -1;/*** 监听句柄:监听后的操作句柄*/public int lListenHandle = -1;}

②改造AcsMain类:

启动项目的时候对SDK进行初始化

③修复AcsMain类的登录登出方法

登录:

/*** 设备登录** @param ipadress IP地址* @param user用户名* @param psw密码* @param port端口,默认8000*/public static int Login(String ipadress, String user, String psw, short port) {int lUserID = -1;//注册_DVR_USER_LOGIN_INFO m_strLoginInfo = new _DVR_USER_LOGIN_INFO();//设备登录信息String m_sDeviceIP = ipadress;//设备ip地址m_strLoginInfo.sDeviceAddress = new byte[_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[_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[_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();_DVR_DEVICEINFO_V40 m_strDeviceInfo = new _DVR_DEVICEINFO_V40();//设备信息lUserID = _DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);if (lUserID == -1) {System.out.println("登录失败,错误码为" + _DVR_GetLastError());} else {System.out.println("登录成功!");m_strDeviceInfo.read();iCharEncodeType = m_strDeviceInfo.byCharEncodeType;}return lUserID;}

登出:

/*** 登出操作*/public static void Logout(int lUserID,int lAlarmHandle,int lListenHandle) {/**退出之前判断布防监听状态,并做撤防和停止监听操作*/if (lAlarmHandle >= 0) {if (!_DVR_CloseAlarmChan_V30(lAlarmHandle)) {System.out.println("撤防失败,错误码:" + _DVR_GetLastError());} else {System.out.println("撤防成功!!!");}}if (lListenHandle >= 0) {if (!_DVR_StopListen_V30(lListenHandle)) {System.out.println("取消监听失败,错误码:" + _DVR_GetLastError());} else {System.out.println("停止监听成功!!!");}}/**登出和清理,释放SDK资源*/if (lUserID >= 0) {_DVR_Logout(lUserID);}_DVR_Cleanup();}

④修复Alarm类的布防监听方法

package Acs;import NetSDKDemo.FMSGCallBack_V31;import NetSDKDemo.HCNetSDK;import com.sun.jna.Pointer;import static Acs.AcsMain.fMSFCallBack_V31;/*** @create -03-12-13:53* <p>* 报警模块,实现功能:1、设备报警事件实时上传,报警事件包括刷脸、刷卡等认证事件和设备的操作事件* 2、事件主动获取(获取保存在设备上的事件)*/public final class Alarm {/*** 报警布防 (布防和监听选其一)** @param lUserID 用户登录句柄*/public static int SetAlarm(int lUserID,int lAlarmHandle) {//尚未布防,需要布防if (lAlarmHandle < 0) {//报警布防参数设置_DVR_SETUPALARM_PARAM m_strAlarmInfo = new _DVR_SETUPALARM_PARAM();m_strAlarmInfo.dwSize = m_strAlarmInfo.size();m_strAlarmInfo.byLevel = 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 = _DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo);System.out.println("lAlarmHandle: " + lAlarmHandle);if (lAlarmHandle == -1) {System.out.println("布防失败,错误码为" + _DVR_GetLastError());} else {System.out.println("布防成功");}}return lAlarmHandle;}/*** 报警监听** 注意: 设置监听前需要现在本机pc配置端口* 具体步骤:库文件ClientDemo->登录设备->配置->网络参数配置->配置告警管理主机地址、告警管理主机端口(需要与NET_DVR_StartListen_V30接口中对应)*/public static int StartListen() {int lListenHandle = -1;//这里NET_DVR_StartListen_V30接口中的ip和端口需要和配置的ip和端口对应lListenHandle = _DVR_StartListen_V30("10.17.36.13", (short) 7201, fMSFCallBack_V31, null);if (lListenHandle == -1) {System.out.println("监听失败" + _DVR_GetLastError());} else {System.out.println("监听成功");}return lListenHandle;}}

⑤修改FaceManage.SetOneFace,该API提供是下发本地照片,实际情况往往是从外部传入,故改造成输入流。

外部传入的时候有两种情况:

一、接口直接接收照片:

二、接口传入的是URL地址,即网络照片。

<dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.10</version><scope>compile</scope></dependency>

private static InputStream getImageStream(String url) {try {HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();connection.setReadTimeout(5000);connection.setConnectTimeout(5000);connection.setRequestMethod("GET");if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {InputStream inputStream = connection.getInputStream();return inputStream;}} catch (IOException e) {log.info("获取网络图片出现异常,图片路径为:" + url);e.printStackTrace();}return null;}

⑥修改CardManage.SetOneCard,下发卡号的时候,卡号对应的名字应该是外部传入的。

⑦布防回调函数

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。