1、下载SDK (海康开放平台)

根据不同系统及操作位数下载对应的sdk,并解压好,放到一固定位置项目中需要用到

2、idea创建springboot项目

项目结构如上图,hkdll(windos的sdk)

3、将sdk中的 两个 jna.jarexamples.jar打入本地仓库方便maven引用

 <!--海康威视--><dependency><groupId>net.java.jna</groupId><artifactId>jna</artifactId><version>1.0.0</version></dependency><dependency><groupId>net.java.examples</groupId><artifactId>examples</artifactId><version>1.0.0</version></dependency>
mvn install:install-file -DgroupId=net.java.jna -DartifactId=jna -Dversion=1.0.0 -Dpackaging=jar -Dfile=C:/Users/bwx686365/Desktop/DeskTable/lib/jna.jar

4、将sdk中demo的HCNetSDK.java拷贝到项目中

截图是我为了兼容Linux和Windows修改后的样子

修改类面的路径 windos和Linux加载的不一样

HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(PropertyUtil.getPath() + "HCNetSDK.dll", HCNetSDK.class);

5、初始化资源

/**资源初始化
* @return
*/
public int initDevice() {if (!hCNetSDK.NET_DVR_Init()) {//初始化失败return 1;}return 0;
}

6、注册设备

/*** 设备注册* @param ip* @param name* @param password* @param lUserID* @return*/
public int deviceRegister(int lUserID,String ip ,String name, String password,String port){//注册之前先注销已注册的用户if (lUserID > -1) {//先注销hCNetSDK.NET_DVR_Logout(lUserID);lUserID = -1;}//ip地址m_sDeviceIP = 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());//设备用户名m_sUsername = name;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_sPassword = password;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 = (short) Integer.parseInt(port);//是否异步登录:0- 否,1- 是m_strLoginInfo.bUseAsynLogin = false;m_strLoginInfo.write();lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);if (lUserID == -1) {log.info("注册失败,错误号====={}" , hCNetSDK.NET_DVR_GetLastError());return -1;} else {log.info("注册成功");return lUserID;}
}

7、 建立布防上传通道

    /*** 建立布防上传通道*/public int setupAlarmChan(int lUserID,int lAlarmHandle) {if (lUserID == -1) {log.info("请先注册");return lUserID;}if (lAlarmHandle < 0) {//尚未布防,需要布防if (fMSFCallBack_V31 == null) {fMSFCallBack_V31 = new FMSGCallBack_V31();Pointer pUser = null;if (!hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(fMSFCallBack_V31, pUser)) {log.info("设置回调函数失败!", hCNetSDK.NET_DVR_GetLastError());}}HCNetSDK.NET_DVR_SETUPALARM_PARAM m_strAlarmInfo = new HCNetSDK.NET_DVR_SETUPALARM_PARAM();m_strAlarmInfo.dwSize = m_strAlarmInfo.size();//智能交通布防优先级:0- 一等级(高),1- 二等级(中),2- 三等级(低)m_strAlarmInfo.byLevel = 1;//智能交通报警信息上传类型:0- 老报警信息(NET_DVR_PLATE_RESULT), 1- 新报警信息(NET_ITS_PLATE_RESULT)m_strAlarmInfo.byAlarmInfoType = 1;//布防类型(仅针对门禁主机、人证设备):0-客户端布防(会断网续传),1-实时布防(只上传实时数据)m_strAlarmInfo.byDeployType = 1;m_strAlarmInfo.write();lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo);if (lAlarmHandle == -1) {log.info("布防失败,错误码=========={}", hCNetSDK.NET_DVR_GetLastError());//注销 释放sdk资源logout(lUserID);return lAlarmHandle;} else {log.info("布防成功");return lAlarmHandle;}}return lAlarmHandle;}

8、接收设备上传递的报警信息

    /***  接收设备上传的报警信息* @param lCommand 上传消息类型* @param pAlarmer 报警设备信息* @param pAlarmInfo 报警信息* @param dwBufLen 报警信息缓存大小* @param pUser 用户数据* @return*/public void alarmDataHandle(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {String sAlarmType = new String();String[] newRow = new String[3];//报警时间Date today = new Date();DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");String[] sIP = new String[2];
​sAlarmType = new String("lCommand=0x") + Integer.toHexString(lCommand);//lCommand是传的报警类型switch (lCommand) {//客流统计case HCNetSDK.COMM_ALARM_PDC:HCNetSDK.NET_DVR_PDC_ALRAM_INFO strPDCResult = new HCNetSDK.NET_DVR_PDC_ALRAM_INFO();strPDCResult.write();Pointer pPDCInfo = strPDCResult.getPointer();pPDCInfo.write(0, pAlarmInfo.getByteArray(0, strPDCResult.size()), 0, strPDCResult.size());strPDCResult.read();if (strPDCResult.byMode == 0) {strPDCResult.uStatModeParam.setType(HCNetSDK.NET_DVR_STATFRAME.class);sAlarmType = sAlarmType + ":客流量统计,进入人数:" + strPDCResult.dwEnterNum + ",离开人数:" + strPDCResult.dwLeaveNum +", byMode:" + strPDCResult.byMode + ", dwRelativeTime:" + strPDCResult.uStatModeParam.struStatFrame.dwRelativeTime +", dwAbsTime:" + strPDCResult.uStatModeParam.struStatFrame.dwAbsTime;}if (strPDCResult.byMode == 1) {strPDCResult.uStatModeParam.setType(HCNetSDK.NET_DVR_STATTIME.class);String strtmStart = "" + String.format("%04d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwYear) +String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwMonth) +String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwDay) +String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwHour) +String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwMinute) +String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwSecond);String strtmEnd = "" + String.format("%04d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwYear) +String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwMonth) +String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwDay) +String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwHour) +String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwMinute) +String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwSecond);sAlarmType = sAlarmType + ":客流量统计,进入人数:" + strPDCResult.dwEnterNum + ",离开人数:" + strPDCResult.dwLeaveNum +", byMode:" + strPDCResult.byMode + ", tmStart:" + strtmStart + ",tmEnd :" + strtmEnd;}
​newRow[0] = dateFormat.format(today);//报警类型newRow[1] = sAlarmType;//报警设备IP地址sIP = new String(strPDCResult.struDevInfo.struDevIP.sIpV4).split("\0", 2);newRow[2] = sIP[0];log.info("客流信息数量======{}", Arrays.toString(newRow));break;case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT://实时人脸抓拍上传HCNetSDK.NET_VCA_FACESNAP_RESULT strFaceSnapInfo = new HCNetSDK.NET_VCA_FACESNAP_RESULT();strFaceSnapInfo.write();Pointer pFaceSnapInfo = strFaceSnapInfo.getPointer();pFaceSnapInfo.write(0, pAlarmInfo.getByteArray(0, strFaceSnapInfo.size()), 0, strFaceSnapInfo.size());strFaceSnapInfo.read();sAlarmType = sAlarmType + ":人脸抓拍上传[人脸评分:" + strFaceSnapInfo.dwFaceScore + ",年龄:" + strFaceSnapInfo.struFeature.byAge + ",性别:" + strFaceSnapInfo.struFeature.bySex + "]";newRow[0] = dateFormat.format(today);//报警类型newRow[1] = sAlarmType;//报警设备IP地址sIP = new String(strFaceSnapInfo.struDevInfo.struDevIP.sIpV4).split("\0", 2);newRow[2] = sIP[0];log.info("人脸抓拍========{}",Arrays.toString(newRow));//设置日期格式SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");// new Date()为获取当前系统时间String time = df.format(new Date());//人脸图片写文件File file = new File(System.getProperty("user.dir") + "\\pic\\");if (!file.exists()){file.mkdir();}try {FileOutputStream big = new FileOutputStream(System.getProperty("user.dir") + "\\pic\\" + time + "background.jpg");if (strFaceSnapInfo.dwFacePicLen > 0) {if (strFaceSnapInfo.dwFacePicLen > 0) {try {big.write(strFaceSnapInfo.pBuffer2.getByteArray(0, strFaceSnapInfo.dwBackgroundPicLen), 0, strFaceSnapInfo.dwBackgroundPicLen);big.close();}  catch (IOException e) {e.printStackTrace();}}}} catch (FileNotFoundException e) {e.printStackTrace();}break;default:newRow[0] = dateFormat.format(today);//报警类型newRow[1] = sAlarmType;//报警设备IP地址sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);newRow[2] = sIP[0];log.info("其他报警信息=========={}",Arrays.toString(newRow));break;}}

9、报警回调函数

public class FMSGCallBack_V31 implements HCNetSDK.FMSGCallBack_V31 {//报警信息回调函数//lCommand 上传消息类型  pAlarmer 报警设备信息  pAlarmInfo  报警信息   dwBufLen 报警信息缓存大小   pUser  用户数据@Overridepublic boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {alarmDataHandle(lCommand, pAlarmer, pAlarmInfo, dwBufLen, pUser);return true;}}

10、撤防

 /*** 报警撤防*/public int closeAlarmChan(int lAlarmHandle) {if (lAlarmHandle > -1) {if (hCNetSDK.NET_DVR_CloseAlarmChan_V30(lAlarmHandle)) {log.info("撤防成功");lAlarmHandle = -1;return lAlarmHandle;}return lAlarmHandle;}return lAlarmHandle;}

11、注销

 /*** 注销* @param lUserID*/public void logout(int lUserID){//注销hCNetSDK.NET_DVR_Logout(lUserID);//释放SDK资源hCNetSDK.NET_DVR_Cleanup();}
​

测试代码

    public static void main(String[] args) {HCNetAlarm hcNetAlarm = new HCNetAlarm();int lAlarmHandle = -1;int row = hcNetAlarm.initDevice();if (row == 1){log.info("初始化失败");}//设置连接超时时间与重连功能hCNetSDK.NET_DVR_SetConnectTime(2000,1);hCNetSDK.NET_DVR_SetReconnect(10000,true);//注册hcNetAlarm.deviceRegister(lUserID,"设备ip","设备登录名","设备登录密码","端口号");
​//设置报警回调函数//建立报警上传通道(启用布防)//布防参数hcNetAlarm.setupAlarmChan();try {//等待设备上传报警信息log.info("等待设备上传报警信息====================");Thread.sleep(100*60*60);} catch (InterruptedException e) {e.printStackTrace();}//撤销布防上传通道hcNetAlarm.closeAlarmChan();//注销 释放sdk资源hcNetAlarm.logout();}

至此Windows 的sdk整合完成,关于Linux的和Windows大同小异,下一篇写上兼容windos和Linux的

海康威视SDK告警上传功能整合到springboot(一)相关推荐

  1. java ssm如何上传图片_ssm整合-图片上传功能(转)

    本文介绍 ssm (Spring+SpringMVC+Mybatis)实现上传功能. 以一个添加用户的案例介绍(主要是将上传文件). 一.需求介绍 我们要实现添加用户的时候上传图片(其实任何文件都可以 ...

  2. SSM开发书评网29:后台二:wangEditor图片上传;(主要内容是【wangEditor图片上传的文档要求】,【Spring MVC整合FileUpload组件,以实现文件上传功能】)

    说明: (1)本篇博客内容说明:[在后台系统,我们点击新增按钮后,会弹出新增图书对话框]→[该对话框中,包含一个wangEditor富文本编辑器]→[wangEditor富文本编辑器中,可以包含图片] ...

  3. 海康威视SDK控制台程序consoleDemo获取视频通道参数

    陈拓 2021/08/27-2020/08/27 1. 概述 在<海康威视SDK控制台程序consoleDemo> https://zhuanlan.zhihu.com/p/4039038 ...

  4. 海康威视错误代码0xf_调用海康威视sdk获取车牌号

    环境: win10(10.0.16299.0)+ vs2017 sdk版本:CH-HCNetSDK_Win32_V5.3.2.15_build20171122https://download.csdn ...

  5. 海康威视SDK控制台程序consoleDemo将实时码流保存为视频文件mp4

    陈拓 2021/08/28-2020/08/29 1. 概述 在<海康威视SDK控制台程序consoleDemo> https://zhuanlan.zhihu.com/p/4039038 ...

  6. 海康威视SDK通过NVR获取视频设备的状态

    海康威视SDK通过NVR获取视频设备的状态 前言 项目现场是通过NVR对多路摄像头设备进行集中管理,包括实时画面的预览和视频信号的存储.回放. 现在要实现这样一个功能:定期查询摄像头的状态,以确保摄像 ...

  7. 海康威视SDK控制台程序consoleDemo

    陈拓 2021/08/10-2020/08/10 1. 下载海康威视SDK 见<海康威视SDK实例QtDemo显示NVR视频窗口(Linux+Qt)> https://zhuanlan.z ...

  8. 海康威视Sdk java推流

    使用海康威视sdk进行推流,实现实时预览,回放等功能. 环境准备 开发工具:eclipse Jdk版本:jdk1.8 开发语言:java,界面使用swing开发 摄像头:DS-2CD1221D-I3 ...

  9. 二、JAVA调用海康威视SDK实现摄像头预览完整版

    接上一章:一.JAVA调用海康威视SDK实现摄像头预览 添加摄像头信息输入框 添加视频控制按钮 添加截图功能 代码: PreView.java package com.kx.hcws;import j ...

最新文章

  1. java别踩白块_java别踩白块(基础功能)
  2. 使用logrotate做nginx日志分割
  3. ARM构架之cache初探
  4. 【转】WSS3.0开发--你还在为写CAML痛苦吗?
  5. HDU 3062 Party(2-sat题模板+tarjan )
  6. 2018蓝桥杯省赛---java---B---8(日志统计)
  7. 15必须阅读Java 8教程
  8. 关于二叉树的程序 c语言,请教关于建立二叉树程序(c语言的)
  9. IO流-ReadLine方法的原理 自定义BufferedReader
  10. 初级程序员考试知识点总结
  11. java 转化箭头函数_this 指向详细解析(箭头函数)
  12. TT 的旅行日记 Week7作业B题
  13. css3-pie,CSS3pie是什么?
  14. 常用的的身份证校验方法
  15. 模版方法模式--旅游签证
  16. 4412 fimc to hdmi
  17. 学术大咖教你一个轻松在论文中画出漂亮插图的方法
  18. linux usb声卡 无声音,记一次解决在Ubuntu 18.04下声卡没有声音的经历
  19. nodejs express搭建服务器(爬虫知乎精华帖,个人学习用)四 存储提到的内容的次数
  20. 【CSS】你真的了解font-weight吗?

热门文章

  1. npm i 下载依赖一直报错:git dep preparation failed等
  2. 中国如何使用chatGPT
  3. SEO工作前景如何?
  4. 怎么检查新买的mac是不是原封正品
  5. 读书分享 《如何阅读一本书》|检视阅读
  6. Java后台生成多个Excel并用Zip打包后(可以将excel文件放置到不同的目录)下载
  7. createrepo:创建本地源
  8. 头条是一款遵循材料设计(Material Design)的第三方今日头条客户端, 聚合了新闻/段子/图片/视频/头条号内容, 没有广告, 仅仅只有存粹的阅读, 不断完善中, 采用 MVP + RxJa
  9. 云计算在美国的五年是如何发展的?
  10. MySQL入门教程(详细,多图例,多示例)