海康威视摄像头开发第一次做确实有点恶心,我把我用到的写一下,方便以后学习
首先把所有摄像头安装到录像机上我是通过交换机,与服务器同一网络下看是否ping、telnet通
1.官网下载SDK开发包,我是Linux系统服务器开发

https://www.hikvision.com/cn/download_more_403.html#prettyPhoto

2.64位系统,将lib动态库所有文件上传/usr/lib64下,重名文件跳过不要覆盖,否则可能服务器重启失败
3.将日志文件HCNetSDK_Log_Switch.xml放到和自己当前项目的jar项目平级目录下,当前目录下会生成日志文件夹SDKLOG
4.LinuxJavaDemo项目的HCNetSDK.java文件导入自己的项目中,同时把examples.jar和jna.jar也copy到自己的项目中,这样就可以调用海康威视的api了
5.我当时一直报错
[2019-10-10 10:47:02.047][DBG] load full path[.//HCNetSDKCom/libHCIndustry.so] failed, system error: 115
HCNetSDKCom文件夹下的所有库文件找不到,我把所有库文件包同第2步放到当前项目jar包项目平级文件夹,成功
6.获取指定摄像头的设备状态,CameraInfo对象包括摄像头ip,端口(我的默认8000),账号,密码,方法返回true状态正常,false状态异常

public boolean getDVRConfig(String subType, CameraInfo cameraInfo) {log.info("ip地址:{}", cameraInfo.getIp());boolean flag = false;HCNetSDK sdk = HCNetSDK.INSTANCE;// 判断摄像头是否开启if (!sdk.NET_DVR_Init()) {log.info("SDK初始化失败");return flag;}NET_DVR_DEVICEINFO_V30 devinfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();// 设备信息// 登录信息int port = cameraInfo.getPortDev();NativeLong id = sdk.NET_DVR_Login_V30(cameraInfo.getIp(), (short) port, cameraInfo.getUser(),cameraInfo.getPassword(), devinfo);if (id.intValue() < 0L) {log.info("设备注册失败");return flag;}if (EnDeviceSubType.RECORDER.id().equals(subType)) {log.info("录像机能登录即在线");return true;}// DVR工作状态NET_DVR_WORKSTATE_V30 devwork = new HCNetSDK.NET_DVR_WORKSTATE_V30();boolean net_DVR_GetDVRWorkState_V30 = sdk.NET_DVR_GetDVRWorkState_V30(id, devwork);log.info("DVR工作状态:{}", net_DVR_GetDVRWorkState_V30);if (!sdk.NET_DVR_GetDVRWorkState_V30(id, devwork)) {// 返回Boolean值,判断是否获取设备能力log.info("返回设备状态失败");}IntByReference ibrBytesReturned = new IntByReference(0);// 获取IP接入配置参数NET_DVR_IPPARACFG ipcfg = new NET_DVR_IPPARACFG();// IP接入配置结构ipcfg.write();Pointer lpIpParaConfig = ipcfg.getPointer();// 获取相关参数配置sdk.NET_DVR_GetDVRConfig(id, HCNetSDK.NET_DVR_GET_IPPARACFG, new NativeLong(0), lpIpParaConfig, ipcfg.size(),ibrBytesReturned);ipcfg.read();log.info("设备状态:{}", devwork.dwDeviceStatic);// 显示模拟通道for (int i = 0; i < devinfo.byChanNum; i++) {log.info("模拟通道号名称:{}", i);// 0:不录像,1:录像log.info("是否录像:{}", devwork.struChanStatic[i].byRecordStatic);// 0正常,1信号丢失log.info("信号状态:{}", devwork.struChanStatic[i].bySignalStatic);// 0正常,1异常log.info("硬件状态:{}", devwork.struChanStatic[i].byHardwareStatic);if (devwork.struChanStatic[i].bySignalStatic == 0 && devwork.struChanStatic[i].byHardwareStatic == 0) {flag = true;}}// 注销用户// 释放SDK资源sdk.NET_DVR_Logout(id);sdk.NET_DVR_Cleanup();return flag;}

7.获取指定摄像头PTZ值,PTZ值转度数,10进制转十六进制字符串,按十进制解析字符串除以10即为度数,P为水平参数转度数(0-360),T为垂直参数转度数(-90-5)T值为了与前端一致度数n在(0,90]时,n=-1*n,n>90时,n=360-n;

public static void getDVRConfig(CameraInfo cameraInfo) {HCNetSDK sdk = HCNetSDK.INSTANCE;// 判断摄像头是否开启if (!sdk.NET_DVR_Init()) {log.info("SDK初始化失败");return;}NET_DVR_DEVICEINFO_V30 devinfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();// 设备信息// 登录信息NativeLong id = sdk.NET_DVR_Login_V30(cameraInfo.getCameraIp(), (short) cameraInfo.getCameraPort(),cameraInfo.getUserName(), cameraInfo.getUserPwd(), devinfo);cameraInfo.setUserId(id);// 返回一个用户编号,同时将设备信息写入devinfolog.info("UserId==:{}", cameraInfo.getUserId().intValue());log.info("ip地址:{}",cameraInfo.getCameraIp());if (cameraInfo.getUserId().intValue() < 0L) {log.info("设备注册失败");return;}// DVR工作状态NET_DVR_WORKSTATE_V30 devwork = new HCNetSDK.NET_DVR_WORKSTATE_V30();boolean net_DVR_GetDVRWorkState_V30 = sdk.NET_DVR_GetDVRWorkState_V30(id, devwork);int net_DVR_GetLastError1 = sdk.NET_DVR_GetLastError();if (!sdk.NET_DVR_GetDVRWorkState_V30(cameraInfo.getUserId(), devwork)) {// 返回Boolean值,判断是否获取设备能力log.info("返回设备状态失败");}IntByReference ibrBytesReturned = new IntByReference();//读取PTZNET_DVR_PTZPOS ipcfg = new NET_DVR_PTZPOS();ipcfg.write();Pointer lpIpParaConfig = ipcfg.getPointer();// 获取相关参数配置//这里一开始我的当前项目目录没放lib库文件,一直返回false,必须truesdk.NET_DVR_GetDVRConfig(cameraInfo.getUserId(), HCNetSDK.NET_DVR_GET_PTZPOS, new NativeLong(0),lpIpParaConfig, ipcfg.size(), ibrBytesReturned);ipcfg.read();log.info("水平参数wPanPos:{}",ipcfg.wPanPos);log.info("水平度数:{}",ptzToDegree(ipcfg.wPanPos));BigDecimal wTiltPosDegree = ptzToDegree(ipcfg.wTiltPos);double value = ptzToDegree(ipcfg.wTiltPos).doubleValue();log.info("垂直参数wTiltPos:{}",ipcfg.wTiltPos);log.info("垂直度数:{}",value>90?new BigDecimal(360).subtract(wTiltPosDegree):-wTiltPosDegree.doubleValue());log.info("变倍参数wZoomPos:{}",ipcfg.wZoomPos);log.info("变倍度数:{}",ptzToDegree(ipcfg.wZoomPos));// 注销用户sdk.NET_DVR_Logout(cameraInfo.getUserId());// 释放SDK资源sdk.NET_DVR_Cleanup();}private static BigDecimal ptzToDegree(short ptz) {String hexString = Integer.toHexString(ptz);int parseInt = Integer.parseInt(hexString);BigDecimal aa = new BigDecimal(parseInt/10.0).setScale(1,BigDecimal.ROUND_HALF_UP);return aa;}

java海康威视设备注册、获取摄像头、录像机在线状态,获取指定摄像头PTZ值相关推荐

  1. JavaScript通过下标获取对象(字典)指定键和值

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>< ...

  2. Linux 系统IP摄像头,linux内核模块获取设备IP地址

    linux内核模块获取设备IP地址 发布时间:2008-08-04 21:07:54来源:红联作者:Shader 出自:http://blue8king.blog.163.com/blog/stati ...

  3. Vue中预览HIKVSION海康威视的NVR(网络硬盘录像机)中多个通道(摄像机)的视频

    场景 SpringBoot+Vue+HIKVSION实现摄像头多选并多窗口预览(插件版): SpringBoot+Vue+HIKVSION实现摄像头多选并多窗口预览(插件版)_霸道流氓气质的博客-CS ...

  4. android 设备注册,Android平台上PMEM的使用及Platform设备注册(二)

    三.注册PMEM设备 这里我们除了描述PMEM设备,还将注册一个拥有memory空间和IRQ资源的示例设备example_device. 对于example_device,定义如下结构体: stati ...

  5. 海康录像机能用别的摄像头吗_海康录像机怎么添加网络摄像头,你会了吗?

    原标题:海康录像机怎么添加网络摄像头,你会了吗? 1.录像机和摄像头通电连接好设备. 2.在显示器画面右击鼠标点击主菜单. 3.输入海康录像机密码登录设备. 4.进入主菜单选择系统设置. 5.在系统设 ...

  6. java usb摄像头_Android中多USB摄像头解决方案——UVCCamera源码分析(一)

    前言 前段时间捣鼓多USB摄像头的方案,一阵手忙脚乱算是勉强跑起来了.整个流程主要还是依赖于网上大神们封装好的库.之前想仔细分析一下整套底层实现,然而一直拖到现在--也没有完全看完,于是想着干脆分阶段 ...

  7. Intel Realsense D435 如何通过摄像头序列号获取指定摄像头的帧集对?

    需要先创建上下文管理器对象,通过该对象去获取已连接摄像头设备的序列号. 当然也可以直接指定摄像头的序列号,通过config.enable_device(ds5_serial)即可启动它. 如果不指定, ...

  8. java通过Access_JDBC30读取access数据库时无法获取最新插入的记录

    1.编写了一个循环程序,每几秒钟读取一次,数据库中最新一行数据 连接access数据库的方法和查询的信息.之后开一个定时去掉用. package javacommon.util;import java ...

  9. 新字符设备驱动实验(自动分配设备号、自动创建应用层设备节点、新字符设备注册到内核的结构体)

    目录 自动分配和释放设备号 示例代码 新的字符设备注册到内核方法 字符设备结构体(前面的设备号也放进来) cdev_init结构体初始化函数 cdev_add 添加到linux内核 cdev_del内 ...

最新文章

  1. python绘制动态图表怎么存下来_用python如何实现导入excel数据后自动生成图表?python如何实现交互式动态图表?...
  2. ResorceGovernor--基础和Demo
  3. 免gre美国计算机硕士,美国硕士免GRE/GMAT的学校-计算机篇
  4. ERROR: Can't get master address from ZooKeeper; znode data == null
  5. 损失函数(Loss function) 和 代价函数(Cost function)
  6. 图说:为什么Java中的字符串被定义为不可变的
  7. 【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划)
  8. modbus_百度经验
  9. Android 数据Parcel序列化过程源码分析
  10. 实验二 (2)优先数调度
  11. 【BZOJ3942】Censoring [KMP]
  12. linux系统怎么拨号上网,如何用 Linux 拨号上网
  13. python脚本编写
  14. 批量图片压缩、生成PDF文件及PDF文件压缩
  15. mysql 查看 脏页_MySQL:刷脏页
  16. Javascript解决音频audio在IOS系统下无法播放问题
  17. Ceph Calamari软件包介绍
  18. 华为网络精英挑战赛ICT部分
  19. XML是什么?有什么用?
  20. html文本框背景text怎么变透明,css怎么设置背景图片透明文字不透明?

热门文章

  1. word2010 2007中去掉页眉上的横线
  2. APP获取气象局所有城市气象预警信息接口
  3. linux下使用c语言模拟tail [-n] 命令
  4. 英文SEO采集伪原创软件Kontent Machine注册使用实战教程!
  5. Java向pdf模板中写入数据并在模板之后添加新的表格内容
  6. 安卓 基于AppCompatImageView的画板视图,任意画线
  7. python 基金净值_Python 关于处理基金净值数据的问题
  8. Unity狙击枪的视野放大和缩小
  9. 【weex】h5weex-example
  10. matlab气管分割,一种基于区域生长法与水平集相融合的肺部CT图像的分割