700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java海康威视设备注册 获取摄像头 录像机状态 获取指定摄像头PTZ值

java海康威视设备注册 获取摄像头 录像机状态 获取指定摄像头PTZ值

时间:2018-12-31 09:48:34

相关推荐

java海康威视设备注册 获取摄像头 录像机状态 获取指定摄像头PTZ值

海康威视摄像头开发第一次做确实有点恶心,我把我用到的写一下,方便以后学习

首先把所有摄像头安装到录像机上我是通过交换机,与服务器同一网络下看是否ping、telnet通

1.官网下载SDK开发包,我是Linux系统服务器开发

/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.我当时一直报错

[-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 (!_DVR_Init()) {log.info("SDK初始化失败");return flag;}NET_DVR_DEVICEINFO_V30 devinfo = new _DVR_DEVICEINFO_V30();// 设备信息// 登录信息int port = cameraInfo.getPortDev();NativeLong id = _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 _DVR_WORKSTATE_V30();boolean net_DVR_GetDVRWorkState_V30 = _DVR_GetDVRWorkState_V30(id, devwork);log.info("DVR工作状态:{}", net_DVR_GetDVRWorkState_V30);if (!_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();// 获取相关参数配置_DVR_GetDVRConfig(id, _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资源_DVR_Logout(id);_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 (!_DVR_Init()) {log.info("SDK初始化失败");return;}NET_DVR_DEVICEINFO_V30 devinfo = new _DVR_DEVICEINFO_V30();// 设备信息// 登录信息NativeLong id = _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 _DVR_WORKSTATE_V30();boolean net_DVR_GetDVRWorkState_V30 = _DVR_GetDVRWorkState_V30(id, devwork);int net_DVR_GetLastError1 = _DVR_GetLastError();if (!_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,必须_DVR_GetDVRConfig(cameraInfo.getUserId(), _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));// 注销用户_DVR_Logout(cameraInfo.getUserId());// 释放SDK资源_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;}

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