| | |
| | | @Resource |
| | | private QueueHandler queueHandler; |
| | | |
| | | public Object _lock = new Object(); |
| | | public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; |
| | | private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//异常回调 |
| | | |
| | |
| | | @Async("loginExecutor") |
| | | public void asyncLogin(ArdCameras camera) { |
| | | try { |
| | | Thread.sleep(100); |
| | | // 初始化 |
| | | if (!hCNetSDK.NET_DVR_Init()) { |
| | | log.error("SDK初始化失败"); |
| | |
| | | } |
| | | |
| | | log.debug("Login Success 【 " + camera.getIp() + ":" + camera.getPort() + " 】"); |
| | | if (fExceptionCallBack == null) { |
| | | fExceptionCallBack = new ExceptionCallBack();//异常回调 |
| | | //设置异常回调函数(可在回调函数中获取设备上下线状态等) |
| | | if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { |
| | | log.debug("Set fExceptionCallBack function fail"); |
| | | return; |
| | | } else { |
| | | log.debug("Set fExceptionCallBack function successfully!"); |
| | | synchronized (_lock) { |
| | | if (fExceptionCallBack == null) { |
| | | fExceptionCallBack = new ExceptionCallBack();//异常回调 |
| | | //设置异常回调函数(可在回调函数中获取设备上下线状态等) |
| | | if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { |
| | | log.debug("Set fExceptionCallBack function fail"); |
| | | return; |
| | | } else { |
| | | log.debug("Set fExceptionCallBack function successfully!"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (GlobalVariable.loginMap.containsKey(camera.getId())) { |
| | | GlobalVariable.loginMap.remove(camera.getId()); |
| | | } |
| | |
| | | //添加到流媒体 |
| | | addVtdu(camera); |
| | | //创建引导队列 |
| | | createGuideQueue(camera); |
| | | } catch (Exception ex) { |
| | | log.error("注册设备异常", ex); |
| | | } |
| | | } |
| | | |
| | | //创建引导队列 |
| | | private void createGuideQueue(ArdCameras camera) { |
| | | if (camera.getCamAlarmGuideEnable() != null) { |
| | | if (camera.getCamAlarmGuideEnable() == 1) { |
| | | if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { |
| | | Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); |
| | |
| | | queueHandler.process(camera.getId()); |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("注册设备异常", ex); |
| | | } |
| | | } |
| | | |
| | |
| | | * @创建时间 2023/1/17 16:36 |
| | | * @修改人和其它信息 |
| | | */ |
| | | @Override |
| | | public Map<String, Object> getPtz(CameraCmd cmd) { |
| | | public Map<String, Object> getPtz1(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | |
| | | log.error("控制失败,请稍后重试" + code); |
| | | return new HashMap<>(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @描述 获取高精度ptz信息 |
| | | * @参数 [userId, chanNo] |
| | | * @返回值 boolean |
| | | * @创建人 刘苏义 |
| | | * @创建时间 2023/1/17 16:36 |
| | | * @修改人和其它信息 |
| | | */ |
| | | @Override |
| | | public Map<String, Object> getPtz(CameraCmd cmd) { |
| | | Map<String, Object> ptzMap = new HashMap<>(); |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer chanNo = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return new HashMap<>(); |
| | | } |
| | | IntByReference pchannel = new IntByReference(chanNo); |
| | | Pointer pChannelNum = pchannel.getPointer(); |
| | | Integer lUserID = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | HCNetSDK.NET_DVR_STD_CONFIG lpConfigParam6696 = new HCNetSDK.NET_DVR_STD_CONFIG(); |
| | | HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG lpPTZAbsoluteEX_cfg = new HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG(); |
| | | lpConfigParam6696.lpCondBuffer = pChannelNum; |
| | | lpConfigParam6696.dwCondSize = 4; |
| | | lpConfigParam6696.lpInBuffer = null; |
| | | lpConfigParam6696.dwInSize = 0; |
| | | lpConfigParam6696.lpOutBuffer = lpPTZAbsoluteEX_cfg.getPointer(); |
| | | lpConfigParam6696.dwOutSize = lpPTZAbsoluteEX_cfg.size(); |
| | | lpConfigParam6696.write(); |
| | | boolean res = hCNetSDK.NET_DVR_GetSTDConfig(lUserID, HCNetSDK.NET_DVR_GET_PTZABSOLUTEEX, lpConfigParam6696); |
| | | if (!res) { |
| | | log.error("获取高精度PTZ绝对位置配置失败,错误号:" + hCNetSDK.NET_DVR_GetLastError()); |
| | | } else { |
| | | lpPTZAbsoluteEX_cfg.read(); |
| | | //log.debug("P:" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fPan + " T:" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt + " Z:" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom |
| | | // + " 聚焦参数:" + lpPTZAbsoluteEX_cfg.struPTZCtrl.dwFocus + " 聚焦范围:" + lpPTZAbsoluteEX_cfg.dwFocalLen + " 水平转动速度:" + lpPTZAbsoluteEX_cfg.fHorizontalSpeed |
| | | // + " 垂直转动速度:" + lpPTZAbsoluteEX_cfg.fVerticalSpeed + " 镜头变倍配置类型:" + lpPTZAbsoluteEX_cfg.byZoomType); |
| | | float p = lpPTZAbsoluteEX_cfg.struPTZCtrl.fPan; |
| | | float fTilt = lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt; |
| | | float t = fTilt < 0 ? fTilt + 360 : fTilt; |
| | | float z = lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom; |
| | | ptzMap.put("p", p); |
| | | ptzMap.put("t", t); |
| | | ptzMap.put("z", z); |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("获取高精度PTZ绝对位置异常:" + ex.getMessage()); |
| | | } |
| | | return ptzMap; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | return bool; |
| | | |
| | | }catch (Exception ex) |
| | | { |
| | | log.error("设置高精度PTZ参数异常",ex); |
| | | } catch (Exception ex) { |
| | | log.error("设置高精度PTZ参数异常", ex); |
| | | return false; |
| | | } |
| | | } |