1. 增加聚焦值和获取接口。
2. 增加视频编码获取接口。
3. 流媒体通过编码自动切换是否转码。
| | |
| | | import com.ruoyi.alarm.tube.service.IArdAlarmTubeService; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.device.camera.domain.CameraCmd; |
| | | import com.ruoyi.device.hiksdk.service.IHikClientService; |
| | | import com.ruoyi.device.camera.service.ICameraSdkService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | |
| | | @Resource |
| | | IArdAlarmRadarPumpService ardAlarmRadarPumpService; |
| | | @Resource |
| | | IHikClientService hikClientService; |
| | | ICameraSdkService cameraSdkService; |
| | | @Resource |
| | | IArdAlarmTubeService ardAlarmTubeService; |
| | | |
| | |
| | | cmd.setRecordBucketName("record"); |
| | | cmd.setRecordObjectName("alarm_" + guideTask.getAlarmId()); |
| | | log.debug("开始引导"); |
| | | boolean guideRes = hikClientService.guideTargetPosition(cmd); |
| | | boolean guideRes = cameraSdkService.guideTargetPosition(cmd); |
| | | if (guideRes) { |
| | | log.debug("引导成功"); |
| | | hikClientService.controlLock(cmd);//上锁 |
| | | hikClientService.recordStart(cmd);//开始录像 |
| | | cameraSdkService.controlLock(cmd);//上锁 |
| | | cameraSdkService.recordStart(cmd);//开始录像 |
| | | try { |
| | | Thread.sleep(30000); |
| | | } catch (InterruptedException e) { |
| | | log.info("当前任务ID" + guideTask.getAlarmId() + "线程被终止"); |
| | | } |
| | | String url = hikClientService.recordStopToMinio(cmd);//停止录像返回url |
| | | String url = cameraSdkService.recordStopToMinio(cmd);//停止录像返回url |
| | | if (StringUtils.isNotEmpty(url)) { |
| | | switch (guideTask.getAlarmType()) { |
| | | case "sys_tube_leak": |
| | |
| | | import com.ruoyi.device.camera.domain.ArdCameras; |
| | | import com.ruoyi.device.camera.domain.CameraCmd; |
| | | import com.ruoyi.device.camera.service.IArdCamerasService; |
| | | import com.ruoyi.device.camera.service.ICameraSdkService; |
| | | import com.ruoyi.device.camera.service.impl.CameraSdkServiceImpl; |
| | | import com.ruoyi.device.dhsdk.service.IDhClientService; |
| | | import com.ruoyi.device.hiksdk.service.IHikClientService; |
| | | import com.ruoyi.device.hiksdk.service.impl.HikClientServiceImpl; |
| | |
| | | private IHikClientService hikSdk; |
| | | @Resource |
| | | private IDhClientService dhSdk; |
| | | @Resource |
| | | private ICameraSdkService cameraSdkService; |
| | | @Resource |
| | | private IArdCamerasService ardCamerasService; |
| | | @Resource |
| | |
| | | public AjaxResult add(@RequestBody ArdCameras camera) { |
| | | int i = ardCamerasService.insertArdCameras(camera); |
| | | if (i > 0) { |
| | | if (camera.getFactory().equals("1")) { |
| | | //注销 |
| | | hikSdk.logout(camera.getId()); |
| | | //异步登录 |
| | | hikSdk.asyncLogin(camera); |
| | | } |
| | | else if(camera.getFactory().equals("2")) |
| | | { |
| | | dhSdk.logout(camera.getId()); |
| | | dhSdk.login(camera); |
| | | } |
| | | cameraSdkService.logout(camera.getId()); |
| | | cameraSdkService.login(camera); |
| | | } |
| | | return toAjax(i); |
| | | } |
| | |
| | | public AjaxResult edit(@RequestBody ArdCameras camera) { |
| | | int i = ardCamerasService.updateArdCameras(camera); |
| | | if (i > 0) { |
| | | camera= ardCamerasService.selectArdCamerasById(camera.getId()); |
| | | if(camera.getFactory().equals("1")) { |
| | | hikSdk.logout(camera.getId()); |
| | | hikSdk.asyncLogin(camera); |
| | | } |
| | | else if(camera.getFactory().equals("2")) { |
| | | dhSdk.logout(camera.getId()); |
| | | dhSdk.login(camera); |
| | | } |
| | | cameraSdkService.logout(camera.getId()); |
| | | cameraSdkService.login(camera); |
| | | } |
| | | return toAjax(i); |
| | | } |
| | |
| | | @DeleteMapping("/{ids}") |
| | | public AjaxResult remove(@PathVariable String[] ids) { |
| | | for (String id : ids) { |
| | | hikSdk.logout(id); |
| | | dhSdk.logout(id); |
| | | cameraSdkService.logout(id); |
| | | } |
| | | return toAjax(ardCamerasService.deleteArdCamerasByIds(ids)); |
| | | } |
| | |
| | | public @ResponseBody |
| | | AjaxResult getFocusPos(@RequestBody CameraCmd cmd) { |
| | | cmd.setOperator(SecurityUtils.getUserId()); |
| | | Map<String, Object> Map = cameraSdkService.getFocusPos(cmd); |
| | | return AjaxResult.success("获取聚焦值", Map); |
| | | int focus = cameraSdkService.getFocusPos(cmd); |
| | | return AjaxResult.success("获取聚焦值", focus); |
| | | } |
| | | |
| | | @ApiOperation("设置聚焦值") |
| | |
| | | return AjaxResult.success(cameraSdkService.getGisInfo(cmd)); |
| | | } |
| | | |
| | | @ApiOperation("录像") |
| | | @PostMapping("/record") |
| | | @Log(title = "手动录像开始", businessType = BusinessType.CONTROL) |
| | | @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"}) |
| | | public @ResponseBody |
| | | AjaxResult record(@RequestBody CameraCmd cmd) { |
| | | cmd.setOperator(SecurityUtils.getUserId()); |
| | | String url = cameraSdkService.record(cmd); |
| | | return AjaxResult.success(url); |
| | | } |
| | | |
| | | @ApiOperation("手动录像开始") |
| | | @PostMapping("/recordStart") |
| | | @Log(title = "手动录像开始", businessType = BusinessType.CONTROL) |
| | |
| | | boolean b = cameraSdkService.recordStart(cmd); |
| | | return toAjax(b); |
| | | } |
| | | |
| | | @ApiOperation("手动录像停止") |
| | | @PostMapping("/recordStop") |
| | | @Log(title = "手动录像停止", businessType = BusinessType.CONTROL) |
| | |
| | | |
| | | import com.ruoyi.device.camera.domain.ArdCameras; |
| | | import com.ruoyi.device.camera.domain.CameraCmd; |
| | | import com.ruoyi.device.channel.domain.ArdChannel; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | public interface ICameraSdkService { |
| | | //sdk初始化 |
| | | void initSDK(); |
| | | |
| | | //同步登录 |
| | | void syncLogin(ArdCameras cameras); |
| | | |
| | | //异步登录 |
| | | void asyncLogin(ArdCameras cameras); |
| | | //登录 |
| | | Boolean login(ArdCameras ardCamera); |
| | | |
| | | //注销 |
| | | boolean logout(String cameraId); |
| | |
| | | boolean setFocusPos(CameraCmd cmd); |
| | | |
| | | //获取聚焦值 |
| | | Map<String, Object> getFocusPos(CameraCmd cmd); |
| | | int getFocusPos(CameraCmd cmd); |
| | | |
| | | //设置预置位 |
| | | boolean setPreset(CameraCmd cmd); |
| | |
| | | boolean gotoPreset(CameraCmd cmd); |
| | | |
| | | //获取码流压缩参数 |
| | | Map<String, String> getVideoCompressionCfg(CameraCmd cmd); |
| | | Map<String, Object> getVideoCompressionCfg(CameraCmd cmd); |
| | | |
| | | //透雾 |
| | | boolean controlDefogcfg(CameraCmd cmd); |
| | | |
| | | //红外? |
| | | //红外 |
| | | boolean controlInfrarecfg(CameraCmd cmd); |
| | | |
| | | //聚焦模式 |
| | |
| | | //云台加热 |
| | | boolean controlPTHeateRpwron(CameraCmd cmd); |
| | | |
| | | //镜头除冰 |
| | | //镜头加热除冰 |
| | | boolean controlCameraDeicing(CameraCmd cmd); |
| | | |
| | | //配置锁定 |
| | |
| | | //设置零方位角 |
| | | boolean setZeroPtz(CameraCmd cmd); |
| | | |
| | | |
| | | //引导目标位置 |
| | | boolean guideTargetPosition(CameraCmd cmd); |
| | | |
| | | //录像 |
| | | String record(CameraCmd cmd); |
| | | |
| | | //手动开始录像 |
| | | boolean recordStart(CameraCmd cmd); |
| | |
| | | String recordStopToMinio(CameraCmd cmd); |
| | | |
| | | //停止录像-不上传minio |
| | | void recordStopNotToMinio(CameraCmd cmd); |
| | | |
| | | //获取相机通道信息 |
| | | public List<ArdChannel> getCameraChannelList(ArdCameras camera); |
| | | boolean recordStopNotToMinio(CameraCmd cmd); |
| | | |
| | | //获取GIS信息数据 |
| | | public Map<String, Object> getGisInfo(CameraCmd cmd); |
| | | Map<String, Object> getGisInfo(CameraCmd cmd); |
| | | } |
| | |
| | | import com.ruoyi.device.channel.domain.ArdChannel; |
| | | import com.ruoyi.device.channel.mapper.ArdChannelMapper; |
| | | import com.ruoyi.device.hiksdk.service.IHikClientService; |
| | | import com.ruoyi.media.domain.Vtdu; |
| | | import com.ruoyi.media.service.IVtduService; |
| | | import com.ruoyi.scheduling.domian.SchedulingParam; |
| | | import com.ruoyi.utils.gis.GisUtil; |
| | |
| | | package com.ruoyi.device.camera.service.impl; |
| | | |
| | | import com.ruoyi.common.annotation.SdkOperate; |
| | | import com.ruoyi.common.constant.CacheConstants; |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.common.utils.file.FileUtils; |
| | | import com.ruoyi.device.camera.domain.ArdCameras; |
| | | import com.ruoyi.device.camera.domain.CameraCmd; |
| | | import com.ruoyi.device.camera.service.IArdCamerasService; |
| | | import com.ruoyi.device.camera.service.ICameraSdkService; |
| | | import com.ruoyi.device.channel.domain.ArdChannel; |
| | | import com.ruoyi.device.dhsdk.lib.NetSDKLib; |
| | | import com.ruoyi.device.dhsdk.module.RealPlayModule; |
| | | import com.ruoyi.device.dhsdk.service.IDhClientService; |
| | | import com.ruoyi.device.hiksdk.common.GlobalVariable; |
| | | import com.ruoyi.device.hiksdk.service.IHikClientService; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint; |
| | | import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk; |
| | | import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.NET_DVR_CHECK_USER_STATUS; |
| | | |
| | | |
| | |
| | | @Slf4j(topic = "SDK") |
| | | public class CameraSdkServiceImpl implements ICameraSdkService { |
| | | @Resource |
| | | private IArdCamerasService ardCamerasService; |
| | | @Resource |
| | | IHikClientService hikClientService; |
| | | @Resource |
| | | IDhClientService dhClientService; |
| | | @Resource |
| | | RedisCache redisCache; |
| | | |
| | | //初始化SDK |
| | | @Override |
| | | public void initSDK() { |
| | | //初始化加载sdk库文件 |
| | |
| | | dhClientService.loginAll();//登录全部大华相机 |
| | | } |
| | | } |
| | | //登录 |
| | | @Override |
| | | public void syncLogin(ArdCameras cameras) { |
| | | |
| | | public Boolean login(ArdCameras ardCamera) { |
| | | boolean result = false; |
| | | try { |
| | | if (ardCamera != null) { |
| | | String factory = ardCamera.getFactory(); |
| | | if (factory.equals("1")) { |
| | | hikClientService.syncLogin(ardCamera); |
| | | result=true; |
| | | } else if (factory.equals("2")) { |
| | | result = dhClientService.login(ardCamera); |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("登录异常:" + ex.getMessage()); |
| | | return false; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public void asyncLogin(ArdCameras cameras) { |
| | | |
| | | } |
| | | |
| | | //注销 |
| | | @Override |
| | | public boolean logout(String cameraId) { |
| | | return false; |
| | | boolean result = false; |
| | | try { |
| | | ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); |
| | | if (ardCamera != null) { |
| | | String factory = ardCamera.getFactory(); |
| | | if (factory.equals("1")) { |
| | | result = hikClientService.logout(cameraId); |
| | | } else if (factory.equals("2")) { |
| | | result = dhClientService.logout(cameraId); |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("注销异常:" + ex.getMessage()); |
| | | return false; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | //在线检测 |
| | | @Override |
| | | public boolean isOnLine(CameraCmd cmd) { |
| | |
| | | } |
| | | } |
| | | //云台控制 |
| | | @SdkOperate |
| | | @Override |
| | | public boolean pTZControl(CameraCmd cmd) { |
| | | try { |
| | |
| | | if (factory.equals("1")) { |
| | | result = hikClientService.setFocusPos(cmd); |
| | | } else if (factory.equals("2")) { |
| | | |
| | | result = dhClientService.setFocusPos(cmd); |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | |
| | | } |
| | | //获取聚焦值 |
| | | @Override |
| | | public Map<String, Object> getFocusPos(CameraCmd cmd) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | public int getFocusPos(CameraCmd cmd) { |
| | | int result=0; |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); |
| | | if (ardCamera != null) { |
| | | String factory = ardCamera.getFactory(); |
| | | if (factory.equals("1")) { |
| | | map = hikClientService.getFocusPos(cmd); |
| | | result = hikClientService.getFocusPos(cmd); |
| | | } else if (factory.equals("2")) { |
| | | |
| | | result = dhClientService.getFocusPos(cmd); |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("获取聚焦值异常:" + ex.getMessage()); |
| | | } |
| | | return map; |
| | | return result; |
| | | } |
| | | //设置预置位 |
| | | @Override |
| | |
| | | } |
| | | //获取码流压缩参数 |
| | | @Override |
| | | public Map<String, String> getVideoCompressionCfg(CameraCmd cmd) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); |
| | |
| | | if (factory.equals("1")) { |
| | | map = hikClientService.getVideoCompressionCfg(cmd); |
| | | } else if (factory.equals("2")) { |
| | | |
| | | map = dhClientService.getVideoCompressionCfg(cmd); |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | |
| | | if (factory.equals("1")) { |
| | | result = hikClientService.controlDefogcfg(cmd); |
| | | } else if (factory.equals("2")) { |
| | | |
| | | //不支持 |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | |
| | | if (factory.equals("1")) { |
| | | result = hikClientService.controlInfrarecfg(cmd); |
| | | } else if (factory.equals("2")) { |
| | | |
| | | result = dhClientService.controlInfrarecfg(cmd); |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | |
| | | if (factory.equals("1")) { |
| | | result = hikClientService.controlPTHeateRpwron(cmd); |
| | | } else if (factory.equals("2")) { |
| | | |
| | | //不支持 |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | |
| | | if (factory.equals("1")) { |
| | | result = hikClientService.controlCameraDeicing(cmd); |
| | | } else if (factory.equals("2")) { |
| | | |
| | | //不支持 |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | |
| | | } |
| | | return result; |
| | | } |
| | | //操控锁定 |
| | | @Override |
| | | public boolean controlLock(CameraCmd cmd) { |
| | | boolean result = false; |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); |
| | | if (ardCamera != null) { |
| | | String factory = ardCamera.getFactory(); |
| | | if (factory.equals("1")) { |
| | | result = hikClientService.controlLock(cmd); |
| | | } else if (factory.equals("2")) { |
| | | |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("操控锁定异常:" + ex.getMessage()); |
| | | } |
| | | return result; |
| | | } |
| | | //设置解锁 |
| | | @Override |
| | | public boolean controlUnLock(CameraCmd cmd) { |
| | | boolean result = false; |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); |
| | | if (ardCamera != null) { |
| | | String factory = ardCamera.getFactory(); |
| | | if (factory.equals("1")) { |
| | | result = hikClientService.controlUnLock(cmd); |
| | | } else if (factory.equals("2")) { |
| | | |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("设置解锁异常:" + ex.getMessage()); |
| | | } |
| | | return result; |
| | | } |
| | | //获取云台锁定信息 |
| | | @Override |
| | | public int getPTZLockInfo(CameraCmd cmd) { |
| | |
| | | return null; |
| | | } |
| | | //抓图 |
| | | @SdkOperate |
| | | @Override |
| | | public String picCutCate(CameraCmd cmd) { |
| | | String url = ""; |
| | | String url = ""; |
| | | try { |
| | | //获取摄像头ID |
| | | String cameraId = cmd.getCameraId(); |
| | | //从redis中获取摄像头信息 |
| | | ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); |
| | | if (ardCamera != null) { |
| | | //获取摄像头工厂 |
| | | String factory = ardCamera.getFactory(); |
| | | if (factory.equals("1")) { |
| | | //调用hikClientService的picCutCate方法 |
| | | url = hikClientService.picCutCate(cmd); |
| | | } else if (factory.equals("2")) { |
| | | //调用dhClientService的picCutCate方法 |
| | | url = dhClientService.picCutCate(cmd); |
| | | } |
| | | } |
| | |
| | | return map; |
| | | } |
| | | //设置ptz |
| | | @SdkOperate |
| | | @Override |
| | | public boolean setPtz(CameraCmd cmd) { |
| | | boolean result = false; |
| | |
| | | return result; |
| | | } |
| | | //设置零方位角 |
| | | @SdkOperate |
| | | @Override |
| | | public boolean setZeroPtz(CameraCmd cmd) { |
| | | boolean result = false; |
| | |
| | | return result; |
| | | } |
| | | //引导指向目标 |
| | | @SdkOperate |
| | | @Override |
| | | public boolean guideTargetPosition(CameraCmd cmd) { |
| | | boolean result = false; |
| | |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * @描述 操控锁定 |
| | | * @参数 [userId, channelNum] |
| | | * @返回值 boolean |
| | | * @创建人 刘苏义 |
| | | * @创建时间 2023/1/17 16:36 |
| | | * @修改人和其它信息 0-解锁 1-锁定 |
| | | */ |
| | | @Override |
| | | @SdkOperate |
| | | public boolean controlLock(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId();//申请锁的相机 |
| | | ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId); |
| | | Date now = new Date(); |
| | | now.setTime(now.getTime() + cmd.getExpired() * 1000); |
| | | ardCameras.setOperatorExpired(now);//设置当前过期时间 |
| | | ardCamerasService.updateArdCameras(ardCameras); |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * @描述 操控解锁 |
| | | * @参数 [userId, channelNum] |
| | | * @返回值 boolean |
| | | * @创建人 刘苏义 |
| | | * @创建时间 2023/6/30 15:36 |
| | | * @修改人和其它信息 |
| | | */ |
| | | @Override |
| | | public boolean controlUnLock(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId();//申请解锁的相机 |
| | | String operator = cmd.getOperator();//申请者 |
| | | ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId); |
| | | if (ardCameras.getOperatorId().equals(operator)) { |
| | | //如果解锁相机的当前用户是申请者,则清空该相机的过期时间 |
| | | ardCameras.setOperatorExpired(null); |
| | | int i = ardCamerasService.updateArdCameras(ardCameras); |
| | | if (i > 0) { |
| | | log.debug(cameraId + "--解锁成功"); |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | |
| | | //录像 |
| | | @SdkOperate |
| | | @Override |
| | | public String record(CameraCmd cmd) { |
| | | String url = ""; |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); |
| | | if (ardCamera != null) { |
| | | String factory = ardCamera.getFactory(); |
| | | if (factory.equals("1")) { |
| | | url = hikClientService.record(cmd); |
| | | } else if (factory.equals("2")) { |
| | | url = dhClientService.record(cmd); |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("录像异常:" + ex.getMessage()); |
| | | } |
| | | return url; |
| | | } |
| | | |
| | | //开始录像 |
| | | @Override |
| | | public boolean recordStart(CameraCmd cmd) { |
| | |
| | | } |
| | | //停止录像并不存入minio |
| | | @Override |
| | | public void recordStopNotToMinio(CameraCmd cmd) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public List<ArdChannel> getCameraChannelList(ArdCameras camera) { |
| | | return null; |
| | | public boolean recordStopNotToMinio(CameraCmd cmd) { |
| | | boolean result = false; |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); |
| | | if (ardCamera != null) { |
| | | String factory = ardCamera.getFactory(); |
| | | if (factory.equals("1")) { |
| | | result = hikClientService.recordStopNotToMinio(cmd); |
| | | } else if (factory.equals("2")) { |
| | | result = dhClientService.recordStopNotToMinio(cmd); |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("停止录像异常:" + ex.getMessage()); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | //获取相机架设参数 |
| | |
| | | import com.ruoyi.common.utils.SecurityUtils;
|
| | | import com.ruoyi.device.camera.domain.CameraCmd;
|
| | | import com.ruoyi.device.dhsdk.service.IDhClientService;
|
| | | import com.ruoyi.device.hiksdk.service.IHikClientService;
|
| | | import io.swagger.annotations.Api;
|
| | | import io.swagger.annotations.ApiOperation;
|
| | | import org.springframework.stereotype.Controller;
|
| | |
| | | import org.springframework.web.bind.annotation.RequestBody;
|
| | | import org.springframework.web.bind.annotation.RequestMapping;
|
| | | import org.springframework.web.bind.annotation.ResponseBody;
|
| | |
|
| | | import javax.annotation.PostConstruct;
|
| | | import javax.annotation.Resource;
|
| | | import java.util.Map;
|
| | |
|
| | |
| | | * @Author: 刘苏义
|
| | | * @Date: 2023年10月14日10:34:58
|
| | | **/
|
| | | @Api(tags = "大华SDK接口")
|
| | |
|
| | | @Controller
|
| | | @RequestMapping("/dh")
|
| | | @Anonymous
|
| | |
| | | /** |
| | | Manual 自动 |
| | | */ |
| | | EM_FOCUS_LIMIT_MODE_MANUAL(0," Manual 自动"), |
| | | EM_FOCUS_LIMIT_MODE_MANUAL(0," Manual 自动"), |
| | | /** |
| | | Auto 手动 |
| | | */ |
| | |
| | | |
| | | import com.ruoyi.device.dhsdk.lib.NetSDKLib; |
| | | |
| | | /** |
| | | * @author 291189 |
| | | * @description 聚焦设置基本信息单元 |
| | | * @date 2022/11/01 11:16:54 |
| | | */ |
| | | /** |
| | | * @author 291189 |
| | | * @description 聚焦设置基本信息单元 |
| | | * @date 2022/11/01 11:16:54 |
| | | */ |
| | | public class CFG_VIDEO_IN_FOCUS_UNIT extends NetSDKLib.SdkStructure { |
| | | /** |
| | | 聚焦模式, 0-关闭, 1-辅助聚焦, 2-自动聚焦, 3-半自动聚焦, 4-手动聚焦 |
| | | */ |
| | | public int nMode; |
| | | /** |
| | | 聚焦灵敏度, 0-高, 1-默认, 2-低 |
| | | */ |
| | | public int nSensitivity; |
| | | /** |
| | | 红外光聚焦修正, 0-不修正, 1-修正, 2-自动修正 |
| | | */ |
| | | public int nIRCorrection; |
| | | /** |
| | | 聚焦极限 {@link com.ruoyi.device.dhsdk.lib.enumeration.EM_FOCUS_LIMIT_SELECT_MODE} |
| | | */ |
| | | public int emFocusMode; |
| | | /** |
| | | 聚焦极限值, 单位毫米 |
| | | */ |
| | | public int nFocusLimit; |
| | | /** |
| | | * 聚焦模式, 0-关闭, 1-辅助聚焦, 2-自动聚焦, 3-半自动聚焦, 4-手动聚焦 |
| | | */ |
| | | public int nMode; |
| | | /** |
| | | * 聚焦灵敏度, 0-高, 1-默认, 2-低 |
| | | */ |
| | | public int nSensitivity; |
| | | /** |
| | | * 红外光聚焦修正, 0-不修正, 1-修正, 2-自动修正 |
| | | */ |
| | | public int nIRCorrection; |
| | | /** |
| | | * 聚焦极限 {@link com.ruoyi.device.dhsdk.lib.enumeration.EM_FOCUS_LIMIT_SELECT_MODE} |
| | | */ |
| | | public int emFocusMode; |
| | | /** |
| | | * 聚焦极限值, 单位毫米 |
| | | */ |
| | | public int nFocusLimit; |
| | | |
| | | public CFG_VIDEO_IN_FOCUS_UNIT(){ |
| | | } |
| | | public CFG_VIDEO_IN_FOCUS_UNIT() { |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.device.dhsdk.module;
|
| | |
|
| | | import com.ruoyi.device.dhsdk.lib.NetSDKLib;
|
| | | import com.ruoyi.device.dhsdk.lib.ToolKits;
|
| | | import com.sun.jna.Structure;
|
| | | import com.sun.jna.ptr.IntByReference;
|
| | |
|
| | | import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint;
|
| | |
|
| | | /**
|
| | |
| | | public class ConfigModule {
|
| | | public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
|
| | | public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE;
|
| | |
|
| | | /**
|
| | | * 查询设备状态
|
| | | */
|
| | |
| | | stuInfo.read();
|
| | | return true;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 获取单个配置
|
| | | *
|
| | | * @param hLoginHandle 登陆句柄
|
| | | * @param nChn 通道号,-1 表示全通道
|
| | | * @param strCmd 配置名称
|
| | | * @param cmdObject 配置对应的结构体对象
|
| | | * @return 成功返回 true
|
| | | */
|
| | | public static boolean GetNewDevConfig(NetSDKLib.LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) {
|
| | | boolean result = false;
|
| | | IntByReference error = new IntByReference(0);
|
| | | int nBufferLen = 2 * 1024 * 1024;
|
| | | byte[] strBuffer = new byte[nBufferLen];
|
| | |
|
| | | if (netsdk.CLIENT_GetNewDevConfig(hLoginHandle, strCmd, nChn, strBuffer, nBufferLen, error, 3000)) {
|
| | | cmdObject.write();
|
| | | if (configsdk.CLIENT_ParseData(strCmd, strBuffer, cmdObject.getPointer(), cmdObject.size(), null)) {
|
| | | cmdObject.read();
|
| | | result = true;
|
| | | } else {
|
| | | System.err.println("Parse " + strCmd + " Config Failed!" + ToolKits.getErrorCodePrint());
|
| | | result = false;
|
| | | }
|
| | | } else {
|
| | | System.err.printf("Get %s Config Failed!Last Error = %s\n", strCmd, getErrorCodePrint());
|
| | | result = false;
|
| | | }
|
| | |
|
| | | return result;
|
| | | }
|
| | |
|
| | | public static boolean GetDevConfig(NetSDKLib.LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) {
|
| | | boolean result = true;
|
| | | IntByReference error = new IntByReference(0);
|
| | | int nBufferLen = 2 * 1024 * 1024;
|
| | | byte[] strBuffer = new byte[nBufferLen];
|
| | | cmdObject.write();
|
| | | boolean bRet = netsdk.CLIENT_QueryNewSystemInfo(hLoginHandle, strCmd, nChn, strBuffer, cmdObject.size(), error,3000);
|
| | | if (bRet) {
|
| | | cmdObject.read();
|
| | | } else {
|
| | | System.err.printf("Get %s Config Failed!Last Error = %s\n", strCmd, getErrorCodePrint());
|
| | | result = false;
|
| | | }
|
| | | return result;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 设置单个配置
|
| | | *
|
| | | * @param hLoginHandle 登陆句柄
|
| | | * @param nChn 通道号,-1 表示全通道
|
| | | * @param strCmd 配置名称
|
| | | * @param cmdObject 配置对应的结构体对象
|
| | | * @param nChn 通道号,-1 表示全通道
|
| | | * @param strCmd 配置名称
|
| | | * @param cmdObject 配置对应的结构体对象
|
| | | * @return 成功返回 true
|
| | | */
|
| | | public static boolean SetDevConfig(NetSDKLib.LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) {
|
| | | boolean result = false;
|
| | | int nBufferLen = 2*1024*1024;
|
| | | int nBufferLen = 2 * 1024 * 1024;
|
| | | byte szBuffer[] = new byte[nBufferLen];
|
| | | for(int i=0; i<nBufferLen; i++)szBuffer[i]=0;
|
| | | for (int i = 0; i < nBufferLen; i++) szBuffer[i] = 0;
|
| | | IntByReference error = new IntByReference(0);
|
| | | IntByReference restart = new IntByReference(0);
|
| | | cmdObject.write();
|
| | | if (configsdk.CLIENT_PacketData(strCmd, cmdObject.getPointer(), cmdObject.size(), szBuffer, nBufferLen)) {
|
| | | cmdObject.read();
|
| | | if( configsdk.CLIENT_SetNewDevConfig(hLoginHandle, strCmd , nChn , szBuffer, nBufferLen, error, restart, 3000)) {
|
| | | if (netsdk.CLIENT_SetNewDevConfig(hLoginHandle, strCmd, nChn, szBuffer, nBufferLen, error, restart, 3000)) {
|
| | | result = true;
|
| | | } else {
|
| | | System.err.printf("Set %s Config Failed! Last Error = %s\n" , strCmd , getErrorCodePrint());
|
| | | System.err.printf("Set %s Config Failed! Last Error = %s\n", strCmd, getErrorCodePrint());
|
| | | result = false;
|
| | | }
|
| | | } else {
|
| | |
| | | |
| | | import com.ruoyi.device.dhsdk.lib.NetSDKLib; |
| | | |
| | | import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk; |
| | | |
| | | /** |
| | | * 云台控制接口实现 |
| | | * 主要有 :八个方向控制、变倍、变焦、光圈功能 |
| | | */ |
| | | public class PtzControlModule { |
| | | public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE; |
| | | /** |
| | | * 按dwPTZCommand类型控制 |
| | | */ |
| | | public static boolean ptzControl(NetSDKLib.LLong m_hLoginHandle,int nChannelID, int dwPTZCommand,int lParam1, int lParam2,int lParam3, int dwStop) { |
| | | return netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, dwPTZCommand, lParam1, lParam2, lParam3, dwStop); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 向上 |
| | | */ |
| | | public static boolean ptzControlUpStart(NetSDKLib.LLong lLoginID, int nChannelID, int lParam1, int lParam2) { |
| | | return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, |
| | | public static boolean ptzControlUpStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam1, int lParam2) { |
| | | return netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, |
| | | NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL, |
| | | lParam1, lParam2, 0, 0); |
| | | } |
| | |
| | | /** |
| | | * 向左上 |
| | | */ |
| | | |
| | | public static boolean ptzControlLeftUpStart(int nChannelID, int lParam1, int lParam2) { |
| | | return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, |
| | | NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP, |
| | |
| | | * 开始预览 |
| | | * \endif |
| | | */ |
| | | public static NetSDKLib.LLong startRealPlay(NetSDKLib.LLong m_hLoginHandle, int channel, int stream) { |
| | | NetSDKLib.LLong m_hPlayHandle = netsdk.CLIENT_RealPlayEx(m_hLoginHandle, channel, null, stream); |
| | | if (m_hPlayHandle.longValue() == 0) { |
| | | System.err.println("开始实时预览失败,错误码" + ToolKits.getErrorCodePrint()); |
| | | } else { |
| | | System.out.println("Success to start realplay"); |
| | | // netsdk.CLIENT_SetRealDataCallBackEx(m_hPlayHandle, CbfRealDataCallBackEx.getInstance(),null, 0x0000001f); |
| | | } |
| | | return m_hPlayHandle; |
| | | } |
| | | |
| | | public static NetSDKLib.LLong startRealPlay1(NetSDKLib.LLong m_hLoginHandle, int channel, String path) { |
| | | public static NetSDKLib.LLong startRealPlay(NetSDKLib.LLong m_hLoginHandle, int channel, String path) { |
| | | NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE net_in_realplay_by_data_type = new NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE(); |
| | | net_in_realplay_by_data_type.nChannelID = channel; |
| | | net_in_realplay_by_data_type.hWnd = null; |
| | | net_in_realplay_by_data_type.rType = 0; |
| | | net_in_realplay_by_data_type.emDataType = NetSDKLib.EM_REAL_DATA_TYPE.EM_REAL_DATA_TYPE_MP4; |
| | | net_in_realplay_by_data_type.szSaveFileName = path; |
| | | //net_in_realplay_by_data_type.cbRealData = CbfRealDataCallBackEx.getInstance(); |
| | | NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE net_out_realplay_by_data_type = new NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE(); |
| | | NetSDKLib.LLong m_hPlayHandle = netsdk.CLIENT_RealPlayByDataType(m_hLoginHandle, net_in_realplay_by_data_type, net_out_realplay_by_data_type, 5000); |
| | | if (m_hPlayHandle.longValue() == 0) { |
| | |
| | | |
| | | /** |
| | | * \if ENGLISH_LANG |
| | | * Start RealPlay |
| | | * Stop RealPlay |
| | | * \else |
| | | * 停止预览 |
| | | * \endif |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.device.dhsdk.service;
|
| | |
|
| | | import com.ruoyi.common.core.domain.AjaxResult;
|
| | | import com.ruoyi.device.camera.domain.ArdCameras;
|
| | | import com.ruoyi.device.camera.domain.CameraCmd;
|
| | | import com.ruoyi.device.channel.domain.ArdChannel;
|
| | |
|
| | | import java.util.List;
|
| | | import java.util.Map;
|
| | |
|
| | | /**
|
| | |
| | | String record(CameraCmd cmd);
|
| | | boolean recordStart(CameraCmd cmd);
|
| | | String recordStopToMinio(CameraCmd cmd);
|
| | |
|
| | | boolean recordStopNotToMinio(CameraCmd cmd);
|
| | | //引导目标位置
|
| | | boolean guideTargetPosition(CameraCmd cmd);
|
| | |
|
| | |
| | | boolean setPreset(CameraCmd cmd);
|
| | | //聚焦模式
|
| | | boolean controlFocusMode(CameraCmd cmd);
|
| | | //透雾
|
| | | boolean controlDefogcfg(CameraCmd cmd);
|
| | | //红外
|
| | | boolean controlInfrarecfg(CameraCmd cmd);
|
| | | //获取聚焦值
|
| | | int getFocusPos(CameraCmd cmd);
|
| | | //设置聚焦值
|
| | | boolean setFocusPos(CameraCmd cmd);
|
| | | //获取码流压缩参数
|
| | | Map<String, Object> getVideoCompressionCfg(CameraCmd cmd);
|
| | | }
|
| | |
| | | import com.ruoyi.device.dhsdk.common.Res;
|
| | | import com.ruoyi.device.dhsdk.lib.NetSDKLib;
|
| | | import com.ruoyi.device.dhsdk.lib.NetSDKLib.LLong;
|
| | | import com.ruoyi.device.dhsdk.lib.enumeration.EM_FOCUS_LIMIT_SELECT_MODE;
|
| | | import com.ruoyi.device.dhsdk.lib.enumeration.EM_NEW_CONFIG;
|
| | | import com.ruoyi.device.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS;
|
| | | import com.ruoyi.device.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS_UNIT;
|
| | | import com.ruoyi.device.dhsdk.module.CapturePictureModule;
|
| | | import com.ruoyi.device.dhsdk.module.ConfigModule;
|
| | | import com.ruoyi.device.dhsdk.module.LoginModule;
|
| | | import com.ruoyi.device.dhsdk.module.RealPlayModule;
|
| | | import com.ruoyi.device.dhsdk.lib.structure.NET_ENCODE_VIDEO_INFO;
|
| | | import com.ruoyi.device.dhsdk.module.*;
|
| | | import com.ruoyi.device.dhsdk.service.IDhClientService;
|
| | | import com.ruoyi.device.hiksdk.common.GlobalVariable;
|
| | | import com.ruoyi.device.hiksdk.sdk.HCNetSDK;
|
| | | import com.ruoyi.media.domain.Vtdu;
|
| | | import com.ruoyi.media.service.IVtduService;
|
| | | import com.ruoyi.media.service.impl.VtduServiceImpl;
|
| | | import com.ruoyi.utils.gis.GisUtil;
|
| | | import com.ruoyi.utils.minio.MinioUtil;
|
| | | import com.ruoyi.utils.tools.ArdTool;
|
| | | import com.sun.jna.Pointer;
|
| | | import lombok.extern.slf4j.Slf4j;
|
| | | import org.springframework.beans.factory.annotation.Value;
|
| | |
| | | import org.springframework.stereotype.Service;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | | import java.io.ByteArrayInputStream;
|
| | | import java.io.FileInputStream;
|
| | | import java.io.IOException;
|
| | | import java.io.InputStream;
|
| | | import java.io.*;
|
| | | import java.text.DecimalFormat;
|
| | | import java.util.*;
|
| | |
|
| | | import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_DEVSTATE_ONLINE;
|
| | | import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_DEVSTATE_PTZ_LOCATION;
|
| | | import static com.ruoyi.device.dhsdk.lib.NetSDKLib.*;
|
| | | import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_MOVE_CONTROL;
|
| | | import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_SET_CONTROL;
|
| | | import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint;
|
| | | import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk;
|
| | | import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.NET_DVR_SET_PTZPOS;
|
| | |
|
| | |
|
| | | /**
|
| | |
| | | private IArdCamerasService ardCamerasService;
|
| | | @Resource
|
| | | private IArdChannelService ardChannelService;
|
| | | @Resource
|
| | | private IVtduService vtduService;
|
| | | @Value("${minio.endpoint}")
|
| | | private String minioEndPoint;
|
| | |
|
| | | private Vector<String> chnlist = new Vector<String>();
|
| | | // 设备断线通知回调
|
| | | private static DisConnect disConnect = new DisConnect();
|
| | | // 网络连接恢复
|
| | |
| | | GlobalVariable.loginMap.put(camera.getId(), loginId);
|
| | | //获取最新通道
|
| | | for (int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
|
| | | chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
|
| | | ArdChannel channel = new ArdChannel();
|
| | | AV_CFG_ChannelName av_cfg_channelName = new AV_CFG_ChannelName();
|
| | | boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName);
|
| | | if (b) {
|
| | | String chanName = null;
|
| | | try {
|
| | | chanName = new String(av_cfg_channelName.szName, "GBK").trim();
|
| | | } catch (UnsupportedEncodingException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | channel.setName(chanName);
|
| | | } else {
|
| | | channel.setName("通道" + i);
|
| | | }
|
| | | channel.setDeviceId(camera.getId());
|
| | | channel.setName("通道" + i);
|
| | | channel.setId(IdUtils.simpleUUID());
|
| | | channel.setChanNo(i);
|
| | | ardChannelService.insertArdChannel(channel);
|
| | |
|
| | | //配置到流媒体
|
| | | String name = camera.getId() + "_" + channel.getChanNo();
|
| | | String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/cam/realmonitor?channel=" + channel.getChanNo() + "&subtype=0";
|
| | | Vtdu vtdu = vtduService.selectVtduByName(name);
|
| | | if (vtdu != null) {
|
| | | vtduService.deleteVtduByName(name);
|
| | | }
|
| | | //添加到流媒体
|
| | | vtdu = new Vtdu();
|
| | | vtdu.setRtspSource(rtspSource);
|
| | | vtdu.setName(camera.getId() + "_" + channel.getChanNo());
|
| | | vtdu.setIsCode("0");//默认不转码
|
| | | vtdu.setMode("1");//默认CPU软解码
|
| | | vtdu.setCameraId(camera.getId());
|
| | | vtduService.insertVtdu(vtdu);
|
| | | }
|
| | | } else {
|
| | | //log.debug(camera.getIp() + ":" + camera.getPort() + "登录失败");
|
| | |
| | | switch (code) {
|
| | | /*方向*/
|
| | | case 1:
|
| | | dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP;
|
| | | dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP;
|
| | | break;
|
| | | case 2:
|
| | | dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL;
|
| | | dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_UP_CONTROL;
|
| | | break;
|
| | | case 3:
|
| | | dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP;
|
| | | dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP;
|
| | | break;
|
| | | case 4:
|
| | | dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL;
|
| | | dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL;
|
| | | break;
|
| | | case 5:
|
| | | dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_LOOP_CONTROL;
|
| | | dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_POINT_LOOP_CONTROL;
|
| | | break;
|
| | | case 6:
|
| | | dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL;
|
| | | dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL;
|
| | | break;
|
| | | case 7:
|
| | | dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN;
|
| | | dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN;
|
| | | break;
|
| | | case 8:
|
| | | dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL;
|
| | | dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL;
|
| | | break;
|
| | | case 9:
|
| | | dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN;
|
| | | dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN;
|
| | | break;
|
| | | /*焦距*/
|
| | | case 10:
|
| | | dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL;
|
| | | dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL;
|
| | | break;
|
| | | case 11:
|
| | | dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL;
|
| | | dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL;
|
| | | break;
|
| | | /*焦点*/
|
| | | case 12:
|
| | | dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL;
|
| | | dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL;
|
| | | break;
|
| | | case 13:
|
| | | dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL;
|
| | | dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL;
|
| | | break;
|
| | | /*光圈*/
|
| | | case 14:
|
| | | dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL;
|
| | | dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL;
|
| | | break;
|
| | | case 15:
|
| | | dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL;
|
| | | dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL;
|
| | | break;
|
| | | case 16:
|
| | | dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LAMP_CONTROL;
|
| | | dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_LAMP_CONTROL;
|
| | | break;
|
| | | }
|
| | | boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop);
|
| | | boolean bool = PtzControlModule.ptzControl(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop);
|
| | | if (!bool) {
|
| | | log.error("控制失败,请稍后重试" + getErrorCodePrint());
|
| | | }
|
| | |
| | | if (enable) {
|
| | | LLong lRealHandle = new LLong(0);
|
| | | if (!GlobalVariable.previewMap.containsKey(cameraId)) {
|
| | | lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo, 0);
|
| | | lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo - 1, path);
|
| | | if (lRealHandle.longValue() <= 0) {
|
| | | log.error("取流失败" + getErrorCodePrint());
|
| | | return "";
|
| | |
| | | log.debug("取流成功");
|
| | | GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue());
|
| | | }
|
| | | if (!netsdk.CLIENT_SaveRealData(lRealHandle, path)) {
|
| | | log.error("保存视频文件到临时文件夹失败 错误码为: " + getErrorCodePrint());
|
| | | return "";
|
| | | }
|
| | | log.debug("录像开始");
|
| | | } else {
|
| | | if (GlobalVariable.previewMap.containsKey(cameraId)) {
|
| | | LLong lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
|
| | | boolean b = netsdk.CLIENT_StopSaveRealData(lRealHandle);
|
| | | RealPlayModule.stopRealPlay(lRealHandle);
|
| | | GlobalVariable.previewMap.remove(cameraId);
|
| | | }
|
| | | log.debug("录像停止");
|
| | |
| | | LLong lRealHandle;
|
| | | if (GlobalVariable.previewMap.containsKey(cameraId)) {
|
| | | lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
|
| | | netsdk.CLIENT_StopRealPlayEx(lRealHandle);
|
| | | RealPlayModule.stopRealPlay(lRealHandle);
|
| | | GlobalVariable.previewMap.remove(cameraId);
|
| | | log.debug("停止当前录像");
|
| | | }
|
| | | lRealHandle = RealPlayModule.startRealPlay1(loginId, chanNo - 1, path);
|
| | | lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo - 1, path);
|
| | | if (lRealHandle.longValue() <= 0) {
|
| | | log.error("取流失败" + getErrorCodePrint());
|
| | | }
|
| | |
| | | LLong lRealHandle;
|
| | | if (GlobalVariable.previewMap.containsKey(cameraId)) {
|
| | | lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
|
| | | netsdk.CLIENT_StopRealPlayEx(lRealHandle);
|
| | | RealPlayModule.stopRealPlay(lRealHandle);
|
| | | GlobalVariable.previewMap.remove(cameraId);
|
| | | log.debug("停止当前录像");
|
| | | }
|
| | |
| | | log.error("录像异常" + ex.getMessage());
|
| | | return "";
|
| | | }
|
| | | }
|
| | |
|
| | | @Override
|
| | | public boolean recordStopNotToMinio(CameraCmd cmd) {
|
| | | boolean result = false;
|
| | | try {
|
| | | String cameraId = cmd.getCameraId();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | LLong lRealHandle;
|
| | | if (GlobalVariable.previewMap.containsKey(cameraId)) {
|
| | | lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
|
| | | RealPlayModule.stopRealPlay(lRealHandle);
|
| | | GlobalVariable.previewMap.remove(cameraId);
|
| | | log.debug("停止当前录像");
|
| | | }
|
| | |
|
| | | result = true;
|
| | | } catch (Exception ex) {
|
| | | log.error("录像异常" + ex.getMessage());
|
| | | }
|
| | | return result;
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
|
| | | try {
|
| | | CFG_VIDEO_IN_FOCUS cfg_video_in_focus = new CFG_VIDEO_IN_FOCUS();
|
| | | CFG_VIDEO_IN_FOCUS_UNIT[] stVideoInFocusUnit = new CFG_VIDEO_IN_FOCUS_UNIT[32];
|
| | | if (enable) {
|
| | | stVideoInFocusUnit[0].nMode = 4;//手动聚焦
|
| | | } else {
|
| | | stVideoInFocusUnit[0].nMode = 2;//手动聚焦
|
| | | cfg_video_in_focus.nVideoInFocusRealNum = 3;//配置使用个数
|
| | | for (int i = 0; i < 3; i++) {
|
| | | cfg_video_in_focus.stVideoInFocusUnit[i].nSensitivity = 1;//聚焦灵敏度, 0-高, 1-默认, 2-低
|
| | |
|
| | | cfg_video_in_focus.stVideoInFocusUnit[i].nIRCorrection = 2;//红外光聚焦修正, 0-不修正, 1-修正, 2-自动修正
|
| | | cfg_video_in_focus.stVideoInFocusUnit[i].nFocusLimit = 10000;//聚焦极限值, 单位毫米
|
| | | if (enable) {//聚焦模式, 0-关闭, 1-辅助聚焦, 2-自动聚焦, 3-半自动聚焦, 4-手动聚焦
|
| | | cfg_video_in_focus.stVideoInFocusUnit[i].nMode = 4;//手动聚焦
|
| | | cfg_video_in_focus.stVideoInFocusUnit[i].emFocusMode = 1;//聚焦极限Manual
|
| | | } else {
|
| | | cfg_video_in_focus.stVideoInFocusUnit[i].nMode = 2;//自动聚焦
|
| | | cfg_video_in_focus.stVideoInFocusUnit[i].emFocusMode = 0;//聚焦极限Auto
|
| | | }
|
| | | }
|
| | | cfg_video_in_focus.nChannelIndex = chanNo - 1;
|
| | | cfg_video_in_focus.stVideoInFocusUnit = stVideoInFocusUnit;
|
| | | boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, NetSDKLib.CFG_CMD_VIDEOIN_FOCUS, cfg_video_in_focus);
|
| | | if (!bool) {
|
| | | log.error("控制失败,请稍后重试" + getErrorCodePrint());
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | //透雾
|
| | | @Override
|
| | | public boolean controlDefogcfg(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer chanNo = cmd.getChanNo();
|
| | | boolean enable = cmd.isEnable();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
|
| | | try {
|
| | | EM_NEW_CONFIG config = EM_NEW_CONFIG.CFG_CMD_VIDEOINDEFOG;
|
| | | //CFG_VIDEOINDEFOG_LIST cfg_videoindefog_list=new CFG_VIDEOINDEFOG_LIST();
|
| | | boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, config.getValue(), null);
|
| | | if (!bool) {
|
| | | log.error("控制失败,请稍后重试" + getErrorCodePrint());
|
| | | }
|
| | | return bool;
|
| | | } catch (Exception ex) {
|
| | | log.error("切换透雾异常:" + ex.getMessage());
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | //红外
|
| | | @Override
|
| | | public boolean controlInfrarecfg(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer chanNo = cmd.getChanNo();
|
| | | boolean enable = cmd.isEnable();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
|
| | | try {
|
| | | CFG_LIGHTING_INFO cfg_lighting_info = new CFG_LIGHTING_INFO();
|
| | | cfg_lighting_info.nLightingDetailNum = 1;
|
| | | if (enable) {
|
| | | cfg_lighting_info.stuLightingDetail[0].emMode = EM_CFG_LIGHTING_MODE.EM_CFG_LIGHTING_MODE_MANUAL;
|
| | | } else {
|
| | | cfg_lighting_info.stuLightingDetail[0].emMode = EM_CFG_LIGHTING_MODE.EM_CFG_LIGHTING_MODE_OFF;
|
| | | }
|
| | | boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, CFG_CMD_LIGHTING, cfg_lighting_info);
|
| | | if (!bool) {
|
| | | log.error("控制失败,请稍后重试" + getErrorCodePrint());
|
| | | }
|
| | | return bool;
|
| | | } catch (Exception ex) {
|
| | | log.error("切换红外异常:" + ex.getMessage());
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | //获取聚焦值
|
| | | @Override
|
| | | public int getFocusPos(CameraCmd cmd) {
|
| | | int result = 0;
|
| | | try {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer chanNo = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return result;
|
| | | }
|
| | | LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_PTZ_LOCATION_INFO net_ptz_location_info = new NET_PTZ_LOCATION_INFO();
|
| | | net_ptz_location_info.nChannelID = chanNo - 1;
|
| | | boolean bool = ConfigModule.queryDevState(loginId, NET_DEVSTATE_PTZ_LOCATION, net_ptz_location_info);
|
| | | if (!bool) {
|
| | | log.error("控制失败,请稍后重试" + getErrorCodePrint());
|
| | | }
|
| | | result = net_ptz_location_info.nFocusMapValue;
|
| | | } catch (Exception ex) {
|
| | | log.error("获取聚焦值异常:" + ex.getMessage());
|
| | | }
|
| | | return result;
|
| | | }
|
| | |
|
| | | //设置聚焦值
|
| | | @Override
|
| | | public boolean setFocusPos(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer chanNo = cmd.getChanNo();
|
| | | boolean enable = cmd.isEnable();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
|
| | | try {
|
| | | CFG_LIGHTING_INFO cfg_lighting_info = new CFG_LIGHTING_INFO();
|
| | | cfg_lighting_info.nLightingDetailNum = 1;
|
| | | if (enable) {
|
| | | cfg_lighting_info.stuLightingDetail[0].emMode = EM_CFG_LIGHTING_MODE.EM_CFG_LIGHTING_MODE_MANUAL;
|
| | | } else {
|
| | | cfg_lighting_info.stuLightingDetail[0].emMode = EM_CFG_LIGHTING_MODE.EM_CFG_LIGHTING_MODE_OFF;
|
| | | }
|
| | | boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, CFG_CMD_LIGHTING, cfg_lighting_info);
|
| | | if (!bool) {
|
| | | log.error("控制失败,请稍后重试" + getErrorCodePrint());
|
| | | }
|
| | | return bool;
|
| | | } catch (Exception ex) {
|
| | | log.error("设置聚焦值异常:" + ex.getMessage());
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | //获取码流压缩参数
|
| | | @Override
|
| | | public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) {
|
| | | Map<String, Object> map = new HashMap<>();
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer chanNo = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return null;
|
| | | }
|
| | | LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
|
| | | CFG_ENCODE_INFO cfg_encode_info = new CFG_ENCODE_INFO();
|
| | | cfg_encode_info.nChannelID = chanNo - 1;
|
| | | boolean b = ConfigModule.GetNewDevConfig(loginId, chanNo - 1, CFG_CMD_ENCODE, cfg_encode_info);
|
| | | if (b) {
|
| | | int emCompression = cfg_encode_info.stuMainStream[0].stuVideoFormat.emCompression;//视频格式
|
| | | String videoEncType = "";
|
| | | switch (emCompression) {
|
| | | case 0:
|
| | | videoEncType = "MPEG4";
|
| | | break;
|
| | | case 1:
|
| | | videoEncType = "MS-MPEG4";
|
| | | break;
|
| | | case 2:
|
| | | videoEncType = "MPEG2";
|
| | | break;
|
| | | case 3:
|
| | | videoEncType = "MPEG1";
|
| | | break;
|
| | | case 4:
|
| | | videoEncType = "H.263";
|
| | | break;
|
| | | case 5:
|
| | | videoEncType = "MJPG";
|
| | | break;
|
| | | case 6:
|
| | | videoEncType = "FCC-MPEG4";
|
| | | break;
|
| | | case 7:
|
| | | videoEncType = "标准h264";
|
| | | break;
|
| | | case 8:
|
| | | videoEncType = "标准h265";
|
| | | break;
|
| | | case 9:
|
| | | videoEncType = "SVAC";
|
| | | break;
|
| | | default:
|
| | | videoEncType = "未知";
|
| | | break;
|
| | | }
|
| | | int nBitRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nBitRate;
|
| | | int nWidth = cfg_encode_info.stuMainStream[0].stuVideoFormat.nWidth;
|
| | | int nHeight = cfg_encode_info.stuMainStream[0].stuVideoFormat.nHeight;
|
| | | String resolution = nWidth + "*" + nHeight;
|
| | | float nFrameRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nFrameRate;
|
| | | map.put("resolution", resolution);//分辨率
|
| | | map.put("videoBitrate", String.valueOf(nBitRate));//比特率
|
| | | map.put("videoEncType", videoEncType);//编码
|
| | | map.put("nFrameRate", String.valueOf(nFrameRate));//帧率
|
| | | }
|
| | | return map;
|
| | | }
|
| | |
|
| | | // 设备断线回调: 当设备出现断线时,SDK会调用该函数
|
| | | private static class DisConnect implements NetSDKLib.fDisConnect {
|
| | | public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
| | |
| | | * @Date: 2023年01月17日 12:04 |
| | | * @Version: 1.0 |
| | | **/ |
| | | @Api(tags = "海康SDK接口") |
| | | @Controller |
| | | @RequestMapping("/hik") |
| | | @Anonymous |
| | |
| | | private String preview() { |
| | | return "preview"; |
| | | } |
| | | |
| | | @RequestMapping("/index") |
| | | private String index() { |
| | | return "test"; |
| | |
| | | public @ResponseBody |
| | | AjaxResult getFocusPos(@RequestBody CameraCmd cmd) { |
| | | cmd.setOperator(SecurityUtils.getUserId()); |
| | | Map<String, Object> Map = sdk.getFocusPos(cmd); |
| | | return AjaxResult.success("获取聚焦值", Map); |
| | | int focus = sdk.getFocusPos(cmd); |
| | | return AjaxResult.success("获取聚焦值", focus); |
| | | } |
| | | |
| | | @ApiOperation("设置聚焦值") |
| | |
| | | return toAjax(sdk.setZeroPtz(cmd)); |
| | | } |
| | | |
| | | @ApiOperation("设置锁定") |
| | | @PostMapping("/setPTZLock") |
| | | @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.expired"}) |
| | | @Log(title = "设置锁定", businessType = BusinessType.CONTROL) |
| | | public @ResponseBody |
| | | AjaxResult setPTZLock(@RequestBody CameraCmd cmd) { |
| | | cmd.setOperator(SecurityUtils.getUserId()); |
| | | return AjaxResult.success(sdk.controlLock(cmd)); |
| | | } |
| | | |
| | | @ApiOperation("设置解锁") |
| | | @PostMapping("/setPTZUnLock") |
| | | @ApiOperationSupport(includeParameters = {"cmd.cameraId"}) |
| | | @Log(title = "设置解锁", businessType = BusinessType.CONTROL) |
| | | public @ResponseBody |
| | | AjaxResult setPTZUnLock(@RequestBody CameraCmd cmd) { |
| | | cmd.setOperator(SecurityUtils.getUserId()); |
| | | return AjaxResult.success(sdk.controlUnLock(cmd)); |
| | | } |
| | | |
| | | @ApiOperation("获取云台锁定信息") |
| | | @PostMapping("/getPTZLockInfo") |
| | |
| | | public static class NET_DVR_COMPRESSIONCFG_V30 extends HIKSDKStructure { |
| | | public int dwSize; |
| | | public NET_DVR_COMPRESSION_INFO_V30 struNormHighRecordPara; //录像 对应8000的普通 |
| | | public NET_DVR_COMPRESSION_INFO_V30 struRes; //保留 String[28]; |
| | | public NET_DVR_COMPRESSION_INFO_V30 struRes; //保留 String[28]; |
| | | public NET_DVR_COMPRESSION_INFO_V30 struEventRecordPara; //事件触发压缩参数 |
| | | public NET_DVR_COMPRESSION_INFO_V30 struNetPara; //网传(子码流) |
| | | |
| | |
| | | String name = camera.getId() + "_" + channel.getChanNo(); |
| | | String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream"; |
| | | Vtdu vtdu = vtduService.selectVtduByName(name); |
| | | if (vtdu == null) { |
| | | //添加到流媒体 |
| | | vtdu = new Vtdu(); |
| | | vtdu.setRtspSource(rtspSource); |
| | | vtdu.setName(camera.getId() + "_" + channel.getChanNo()); |
| | | vtdu.setIsCode("0");//默认不转码 |
| | | vtdu.setMode("1");//默认CPU软解码 |
| | | vtdu.setCameraId(camera.getId()); |
| | | vtduService.insertVtdu(vtdu); |
| | | } else { |
| | | if (!rtspSource.equals(vtdu.getRtspSource())) { |
| | | //更新rtsp地址 |
| | | vtdu.setRtspSource(rtspSource); |
| | | vtduService.updateVtdu(vtdu); |
| | | } |
| | | if (vtdu != null) { |
| | | vtduService.deleteVtduByName(name); |
| | | } |
| | | //添加到流媒体 |
| | | vtdu = new Vtdu(); |
| | | vtdu.setRtspSource(rtspSource); |
| | | vtdu.setName(camera.getId() + "_" + channel.getChanNo()); |
| | | vtdu.setIsCode("0");//默认不转码 |
| | | vtdu.setMode("1");//默认CPU软解码 |
| | | vtdu.setCameraId(camera.getId()); |
| | | vtduService.insertVtdu(vtdu); |
| | | } |
| | | } |
| | | //创建引导队列 |
| | |
| | | boolean setFocusPos(CameraCmd cmd); |
| | | |
| | | //获取聚焦值 |
| | | Map<String, Object> getFocusPos(CameraCmd cmd); |
| | | int getFocusPos(CameraCmd cmd); |
| | | |
| | | //设置预置位 |
| | | boolean setPreset(CameraCmd cmd); |
| | |
| | | boolean gotoPreset(CameraCmd cmd); |
| | | |
| | | //获取码流压缩参数 |
| | | Map<String, String> getVideoCompressionCfg(CameraCmd cmd); |
| | | Map<String, Object> getVideoCompressionCfg(CameraCmd cmd); |
| | | |
| | | //透雾 |
| | | boolean controlDefogcfg(CameraCmd cmd); |
| | | |
| | | //红外? |
| | | //红外 |
| | | boolean controlInfrarecfg(CameraCmd cmd); |
| | | |
| | | //聚焦模式 |
| | |
| | | |
| | | //镜头除冰 |
| | | boolean controlCameraDeicing(CameraCmd cmd); |
| | | |
| | | //配置锁定 |
| | | boolean controlLock(CameraCmd cmd); |
| | | |
| | | //配置解锁 |
| | | boolean controlUnLock(CameraCmd cmd); |
| | | |
| | | //获取云台锁定信息 |
| | | int getPTZLockInfo(CameraCmd cmd); |
| | |
| | | String recordStopToMinio(CameraCmd cmd); |
| | | |
| | | //停止录像-不上传minio |
| | | void recordStopNotToMinio(CameraCmd cmd); |
| | | boolean recordStopNotToMinio(CameraCmd cmd); |
| | | |
| | | //获取相机通道信息 |
| | | public List<ArdChannel> getCameraChannelList(ArdCameras camera); |
| | |
| | | import com.ruoyi.common.annotation.SdkOperate;
|
| | | import com.ruoyi.common.utils.file.FileUtils;
|
| | | import com.ruoyi.common.utils.file.MimeTypeUtils;
|
| | | import com.ruoyi.common.utils.spring.SpringUtils;
|
| | | import com.ruoyi.common.utils.uuid.IdUtils;
|
| | | import com.ruoyi.device.camera.domain.CameraCmd;
|
| | | import com.ruoyi.device.camera.service.IArdCamerasService;
|
| | |
| | | import com.sun.jna.Pointer;
|
| | | import com.sun.jna.ptr.IntByReference;
|
| | | import lombok.extern.slf4j.Slf4j;
|
| | | import org.springframework.beans.factory.annotation.Value;
|
| | | import org.springframework.stereotype.Service;
|
| | |
|
| | | import java.util.Base64;
|
| | | import javax.annotation.Resource;
|
| | | import java.io.*;
|
| | |
| | | String name = camera.getId() + "_" + channel.getChanNo();
|
| | | String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
|
| | | Vtdu vtdu = vtduService.selectVtduByName(name);
|
| | | if (vtdu == null) {
|
| | | //添加到流媒体
|
| | | vtdu = new Vtdu();
|
| | | vtdu.setRtspSource(rtspSource);
|
| | | vtdu.setName(camera.getId() + "_" + channel.getChanNo());
|
| | | vtdu.setIsCode("0");//默认不转码
|
| | | vtdu.setMode("1");//默认CPU软解码
|
| | | vtdu.setCameraId(camera.getId());
|
| | | vtduService.insertVtdu(vtdu);
|
| | | } else {
|
| | | if (!rtspSource.equals(vtdu.getRtspSource())) {
|
| | | //更新rtsp地址
|
| | | vtdu.setRtspSource(rtspSource);
|
| | | vtduService.updateVtdu(vtdu);
|
| | | }
|
| | | if (vtdu != null) {
|
| | | vtduService.deleteVtduByName(name);
|
| | | }
|
| | | //添加到流媒体
|
| | | vtdu = new Vtdu();
|
| | | vtdu.setRtspSource(rtspSource);
|
| | | vtdu.setName(camera.getId() + "_" + channel.getChanNo());
|
| | | vtdu.setIsCode("0");//默认不转码
|
| | | vtdu.setMode("1");//默认CPU软解码
|
| | | vtdu.setCameraId(camera.getId());
|
| | | vtduService.insertVtdu(vtdu);
|
| | | }
|
| | | }
|
| | | //创建引导队列
|
| | |
| | | for (ArdCameras camera : ardCameras) {
|
| | | Thread.sleep(500);
|
| | | //异步登录
|
| | | asyncLogin(camera);
|
| | | syncLogin(camera);
|
| | | }
|
| | | } catch (Exception ex) {
|
| | | log.error("初始化登录相机异常:" + ex.getMessage());
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | boolean b = hCNetSDK.NET_DVR_Logout(userId);
|
| | | if (b) {
|
| | | GlobalVariable.loginMap.remove(cameraId);
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | return hCNetSDK.NET_DVR_RemoteControl(userId, NET_DVR_CHECK_USER_STATUS, null, 0);
|
| | | } catch (Exception ex) {
|
| | | log.error("检测在线异常:" + ex.getMessage());
|
| | |
| | | * @修改人和其它信息
|
| | | */
|
| | | @Override
|
| | | @SdkOperate
|
| | | public boolean pTZControlWithSpeed(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | boolean enable = cmd.isEnable();
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | int dwStop;
|
| | | if (enable) {
|
| | | dwStop = 0;//开启
|
| | |
| | | * @param cmd 相机命令
|
| | | */
|
| | | @Override
|
| | | @SdkOperate
|
| | | public boolean setFocusPos(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | |
| | | return false;
|
| | | }
|
| | | // 获取参数
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG();
|
| | | HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO();
|
| | | struGisInfo.struPtzPosEx.dwFocus = dwFocusPos;
|
| | |
| | | * @param cmd 相机命令
|
| | | */
|
| | | @Override
|
| | | public Map<String, Object> getFocusPos(CameraCmd cmd) {
|
| | | public int getFocusPos(CameraCmd cmd) {
|
| | | int result = 0;
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return new HashMap<>();
|
| | | return result;
|
| | | }
|
| | | // 获取参数
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG();
|
| | | HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO();
|
| | | struStdCfg.read();
|
| | |
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("获取GIS信息数据失败,请稍后重试" + code);
|
| | | return new HashMap<>();
|
| | | return result;
|
| | | } else {
|
| | | struGisInfo.read();
|
| | | Map<String, Object> map = new HashMap<>();
|
| | | map.put("dwFocus", struGisInfo.struPtzPosEx.dwFocus);
|
| | | return map;
|
| | | result = struGisInfo.struPtzPosEx.dwFocus;
|
| | | }
|
| | | return result;
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | * @param cmd 相机命令
|
| | | */
|
| | | @Override
|
| | | @SdkOperate
|
| | | public boolean setPreset(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, SET_PRESET, PresetIndex);
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | |
| | | * @param cmd 相机命令
|
| | | */
|
| | | @Override
|
| | | @SdkOperate
|
| | | public boolean gotoPreset(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, GOTO_PRESET, PresetIndex);
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | |
| | | * @修改人和其它信息
|
| | | */
|
| | | @Override
|
| | | public Map<String, String> getVideoCompressionCfg(CameraCmd cmd) {
|
| | | public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer chanNo = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return null;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | |
|
| | | Map<String, String> map = new HashMap<>();
|
| | | Map<String, Object> map = new HashMap<>();
|
| | | NET_DVR_COMPRESSIONCFG_V30 compressioncfg = new NET_DVR_COMPRESSIONCFG_V30();
|
| | | compressioncfg.write();
|
| | | Pointer pioint = compressioncfg.getPointer();
|
| | |
| | | videoBitrate = "保留";
|
| | | break;
|
| | | case 1:
|
| | | videoBitrate = "16K(保留)";
|
| | | videoBitrate = "16(保留)";
|
| | | break;
|
| | | case 2:
|
| | | videoBitrate = "32K";
|
| | | videoBitrate = "32";
|
| | | break;
|
| | | case 3:
|
| | | videoBitrate = "48k";
|
| | | videoBitrate = "48";
|
| | | break;
|
| | | case 4:
|
| | | videoBitrate = "64k";
|
| | | videoBitrate = "64";
|
| | | break;
|
| | | case 5:
|
| | | videoBitrate = "80k";
|
| | | videoBitrate = "80";
|
| | | break;
|
| | | case 6:
|
| | | videoBitrate = "96k";
|
| | | videoBitrate = "96";
|
| | | break;
|
| | | case 7:
|
| | | videoBitrate = "128k";
|
| | | videoBitrate = "128";
|
| | | break;
|
| | | case 8:
|
| | | videoBitrate = "160k";
|
| | | videoBitrate = "160";
|
| | | break;
|
| | | case 9:
|
| | | videoBitrate = "192k";
|
| | | videoBitrate = "192";
|
| | | break;
|
| | | case 10:
|
| | | videoBitrate = "224k";
|
| | | videoBitrate = "224";
|
| | | break;
|
| | | case 11:
|
| | | videoBitrate = "256K";
|
| | | videoBitrate = "256";
|
| | | break;
|
| | | case 12:
|
| | | videoBitrate = "320K";
|
| | | videoBitrate = "320";
|
| | | break;
|
| | | case 13:
|
| | | videoBitrate = "384K";
|
| | | videoBitrate = "384";
|
| | | break;
|
| | | case 14:
|
| | | videoBitrate = "448K";
|
| | | videoBitrate = "448";
|
| | | break;
|
| | | case 15:
|
| | | videoBitrate = "512K";
|
| | | videoBitrate = "512";
|
| | | break;
|
| | | case 16:
|
| | | videoBitrate = "640K";
|
| | | videoBitrate = "640";
|
| | | break;
|
| | | case 17:
|
| | | videoBitrate = "768K";
|
| | | videoBitrate = "768";
|
| | | break;
|
| | | case 18:
|
| | | videoBitrate = "896K";
|
| | | videoBitrate = "896";
|
| | | break;
|
| | | case 19:
|
| | | videoBitrate = "1024K";
|
| | | videoBitrate = "1024";
|
| | | break;
|
| | | case 20:
|
| | | videoBitrate = "1280K";
|
| | | videoBitrate = "1280";
|
| | | break;
|
| | | case 21:
|
| | | videoBitrate = "1536K";
|
| | | videoBitrate = "1536";
|
| | | break;
|
| | | case 22:
|
| | | videoBitrate = "1792K";
|
| | | videoBitrate = "1792";
|
| | | break;
|
| | | case 23:
|
| | | videoBitrate = "2048K";
|
| | | break;
|
| | | case 24:
|
| | | videoBitrate = "3072K";
|
| | | videoBitrate = "3072";
|
| | | break;
|
| | | case 25:
|
| | | videoBitrate = "4096K";
|
| | | videoBitrate = "4096";
|
| | | break;
|
| | | case 26:
|
| | | videoBitrate = "8192K";
|
| | | videoBitrate = "8192";
|
| | | break;
|
| | | case 27:
|
| | | videoBitrate = "16384K";
|
| | | videoBitrate = "16384";
|
| | | break;
|
| | | default:
|
| | | videoBitrate = "其他";
|
| | |
| | | String resolution = "";
|
| | | switch (compressioncfg.struNormHighRecordPara.byResolution) {
|
| | | case 0:
|
| | | resolution = "DCIF(528*384/528*320)";
|
| | | resolution = "528*384/528*320";
|
| | | break;
|
| | | case 1:
|
| | | resolution = "CIF(352*288/352*240)";
|
| | | resolution = "352*288/352*240";
|
| | | break;
|
| | | case 2:
|
| | | resolution = "QCIF(176*144/176*120)";
|
| | | resolution = "176*144/176*120";
|
| | | break;
|
| | | case 3:
|
| | | resolution = "4CIF(704*576/704*480)";
|
| | | resolution = "704*576/704*480";
|
| | | break;
|
| | | case 4:
|
| | | resolution = "2CIF(704*288/704*240)";
|
| | | resolution = "704*288/704*240";
|
| | | break;
|
| | | case 6:
|
| | | resolution = "QVGA(320*240)";
|
| | | resolution = "320*240";
|
| | | break;
|
| | | case 7:
|
| | | resolution = "QQVGA(160*120)";
|
| | | resolution = "160*120";
|
| | | break;
|
| | | case 16:
|
| | | resolution = "VGA(640*480)";
|
| | | resolution = "640*480";
|
| | | break;
|
| | | case 17:
|
| | | resolution = "UXGA(1600*1200)";
|
| | | resolution = "1600*1200";
|
| | | break;
|
| | | case 18:
|
| | | resolution = "SVGA(800*600)";
|
| | | resolution = "800*600";
|
| | | break;
|
| | | case 19:
|
| | | resolution = "HD720P(1280*720)";
|
| | | resolution = "1280*720";
|
| | | break;
|
| | | case 20:
|
| | | resolution = "XVGA(1280*960)";
|
| | | resolution = "1280*960";
|
| | | break;
|
| | | case 21:
|
| | | resolution = "HD900P(1600*900)";
|
| | | resolution = "1600*900";
|
| | | break;
|
| | | case 22:
|
| | | resolution = "1360*1024";
|
| | |
| | | resolution = "1920*1920";
|
| | | break;
|
| | | case 27:
|
| | | resolution = "1920*1080p";
|
| | | resolution = "1920*1080";
|
| | | break;
|
| | | case 28:
|
| | | resolution = "2560*1920";
|
| | |
| | | resolution = "不在当前分辨率索引,请联系管理员添加";
|
| | | break;
|
| | | }
|
| | | map.put("resolution", resolution);
|
| | | map.put("videoBitrate", videoBitrate);
|
| | | map.put("videoEncType", videoEncType);
|
| | | map.put("streamType", streamType);
|
| | | //帧率
|
| | | String nFrameRate = "";
|
| | | switch (compressioncfg.struNormHighRecordPara.dwVideoFrameRate) {
|
| | | case 0:
|
| | | nFrameRate = "0";
|
| | | break;
|
| | | case 1:
|
| | | nFrameRate = "1/16";
|
| | | break;
|
| | | case 2:
|
| | | nFrameRate = "1/8";
|
| | | break;
|
| | | case 3:
|
| | | nFrameRate = "1/4";
|
| | | break;
|
| | | case 4:
|
| | | nFrameRate = "1/2";
|
| | | break;
|
| | | case 5:
|
| | | nFrameRate = "1";
|
| | | break;
|
| | | case 6:
|
| | | nFrameRate = "2";
|
| | | break;
|
| | | case 7:
|
| | | nFrameRate = "4";
|
| | | break;
|
| | | case 8:
|
| | | nFrameRate = "6";
|
| | | break;
|
| | | case 9:
|
| | | nFrameRate = "8";
|
| | | break;
|
| | | case 10:
|
| | | nFrameRate = "10";
|
| | | break;
|
| | | case 11:
|
| | | nFrameRate = "12";
|
| | | break;
|
| | | case 12:
|
| | | nFrameRate = "16";
|
| | | break;
|
| | | case 13:
|
| | | nFrameRate = "20";
|
| | | break;
|
| | | case 14:
|
| | | nFrameRate = "15";
|
| | | break;
|
| | | case 15:
|
| | | nFrameRate = "18";
|
| | | break;
|
| | | case 16:
|
| | | nFrameRate = "22";
|
| | | break;
|
| | | case 17:
|
| | | nFrameRate = "25";
|
| | | break;
|
| | | case 18:
|
| | | nFrameRate = "30";
|
| | | break;
|
| | | case 19:
|
| | | nFrameRate = "35";
|
| | | break;
|
| | | case 20:
|
| | | nFrameRate = "40";
|
| | | break;
|
| | | default:
|
| | | nFrameRate = "未知";
|
| | | break;
|
| | | }
|
| | | map.put("resolution", resolution);//分辨率
|
| | | map.put("videoBitrate", videoBitrate);//比特率
|
| | | map.put("videoEncType", videoEncType);//编码
|
| | | map.put("nFrameRate", nFrameRate);//帧率
|
| | |
|
| | | } else {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return new HashMap<>();
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | |
|
| | | NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
|
| | | Pointer pioint = m_ptzPosCurrent.getPointer();
|
| | |
| | | * @修改人和其它信息 注意俯仰角度负值需要加上360得到的正值进行设置
|
| | | */
|
| | | @Override
|
| | | @SdkOperate
|
| | | public boolean setPtz(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
|
| | | m_ptzPosCurrent.wAction = 1;
|
| | | try {
|
| | | String p = String.valueOf((int)(ptz.get("p") * 10));
|
| | | String t = String.valueOf((int)(ptz.get("t") * 10));
|
| | | String z = String.valueOf((int)(ptz.get("z") * 10));
|
| | | String p = String.valueOf((int) (ptz.get("p") * 10));
|
| | | String t = String.valueOf((int) (ptz.get("t") * 10));
|
| | | String z = String.valueOf((int) (ptz.get("z") * 10));
|
| | | m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16));
|
| | | m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16));
|
| | | m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16));
|
| | |
| | | }
|
| | |
|
| | | @Override
|
| | | @SdkOperate
|
| | | public boolean guideTargetPosition(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
|
| | | m_ptzPosCurrent.wAction = 1;
|
| | | try {
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @描述 操控锁定
|
| | | * @参数 [userId, channelNum]
|
| | | * @返回值 boolean
|
| | | * @创建人 刘苏义
|
| | | * @创建时间 2023/1/17 16:36
|
| | | * @修改人和其它信息 0-解锁 1-锁定
|
| | | */
|
| | | @Override
|
| | | @SdkOperate
|
| | | public boolean controlLock(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();//申请锁的相机
|
| | | ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
|
| | | Date now = new Date();
|
| | | now.setTime(now.getTime() + cmd.getExpired() * 1000);
|
| | | ardCameras.setOperatorExpired(now);//设置当前过期时间
|
| | | ardCamerasService.updateArdCameras(ardCameras);
|
| | | return true;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @描述 操控解锁
|
| | | * @参数 [userId, channelNum]
|
| | | * @返回值 boolean
|
| | | * @创建人 刘苏义
|
| | | * @创建时间 2023/6/30 15:36
|
| | | * @修改人和其它信息
|
| | | */
|
| | | @Override
|
| | | public boolean controlUnLock(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();//申请解锁的相机
|
| | | String operator = cmd.getOperator();//申请者
|
| | | ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
|
| | | if (ardCameras.getOperatorId().equals(operator)) {
|
| | | //如果解锁相机的当前用户是申请者,则清空该相机的过期时间
|
| | | ardCameras.setOperatorExpired(null);
|
| | | int i = ardCamerasService.updateArdCameras(ardCameras);
|
| | | if (i > 0) {
|
| | | log.debug(cameraId + "--解锁成功");
|
| | | }
|
| | | }
|
| | | return true;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @描述 获取ptz锁定信息
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return -1;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_PTZ_LOCKCFG netDvrPtzLockcfg = new NET_DVR_PTZ_LOCKCFG();
|
| | | Pointer point = netDvrPtzLockcfg.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_INITIALPOSITIONCTRL initialpositionctrl = new NET_DVR_INITIALPOSITIONCTRL();
|
| | |
|
| | | initialpositionctrl.dwSize = initialpositionctrl.size();
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return new HashMap<>();
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_PTZSCOPE m_ptzPosCurrent = new NET_DVR_PTZSCOPE();
|
| | | Pointer point = m_ptzPosCurrent.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new NET_DVR_CAMERAPARAMCFG_EX();
|
| | | Pointer point = struCameraParam.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_CAMERAPARAMCFG_EX struDayNigh = new NET_DVR_CAMERAPARAMCFG_EX();
|
| | | Pointer point = struDayNigh.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG();
|
| | | Pointer point = struFocusMode.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return "";
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG();
|
| | | Pointer point = struFocusMode.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | int dwStop;
|
| | | if (enable) {
|
| | | dwStop = 0;//开启
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_DEVSERVER_CFG struDeicing = new NET_DVR_DEVSERVER_CFG();
|
| | | Pointer point = struDeicing.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return "";
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30();
|
| | | if (!hCNetSDK.NET_DVR_GetDVRWorkState_V30(userId, devwork)) {
|
| | | // 返回Boolean值,判断是否获取设备能力
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return "";
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | //图片信息
|
| | | NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA();
|
| | | //设置图片分辨率
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return "";
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | //强制I帧结构体对象
|
| | | HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //新建结构体对象
|
| | | netDvrIFrame.read();
|
| | |
| | | log.debug("录像停止");
|
| | | //存入minio
|
| | | String BucketName = "record";
|
| | | String ObjectName =IdUtils.simpleUUID() + ".mp4";
|
| | | String ObjectName = IdUtils.simpleUUID() + ".mp4";
|
| | | FileInputStream stream = new FileInputStream(path);
|
| | | boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4");
|
| | | if (b) {
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | //强制I帧结构体对象
|
| | | HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //新建结构体对象
|
| | | netDvrIFrame.read();
|
| | |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return "";
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | //region 强制I帧
|
| | | HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //新建结构体对象
|
| | | netDvrIFrame.read();
|
| | |
| | | }
|
| | |
|
| | | @Override
|
| | | public void recordStopNotToMinio(CameraCmd cmd) {
|
| | | public boolean recordStopNotToMinio(CameraCmd cmd) {
|
| | | boolean result = false;
|
| | | try {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return;
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | //强制I帧结构体对象
|
| | | HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //新建结构体对象
|
| | | netDvrIFrame.read();
|
| | |
| | | GlobalVariable.previewMap.remove(cameraId);
|
| | | }
|
| | | log.debug("录像停止");
|
| | | result = true;
|
| | | } catch (Exception ex) {
|
| | | log.error("录像停止异常" + ex.getMessage());
|
| | | result = false;
|
| | | }
|
| | | return result;
|
| | | }
|
| | |
|
| | | //获取IP通道
|
| | |
| | | return new HashMap<>();
|
| | | }
|
| | | // 获取参数
|
| | | Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG();
|
| | | HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO();
|
| | | struStdCfg.read();
|
| | |
| | | vtdu.setRtspUrl(map.get("rtspUrl")); |
| | | vtdu.setRtmpUrl(map.get("rtmpUrl")); |
| | | vtdu.setWebrtcUrl(map.get("webrtcUrl")); |
| | | vtduService.updateVtdu(vtdu); |
| | | //vtduService.updateVtdu(vtdu); |
| | | vtduService.deleteVtduByName(vtdu.getName()); |
| | | vtduService.insertVtdu(vtdu); |
| | | return AjaxResult.success(map); |
| | | } |
| | | |
| | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.device.camera.domain.CameraCmd; |
| | | import com.ruoyi.device.camera.service.ICameraSdkService; |
| | | import com.ruoyi.media.service.IMediaService; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | { |
| | | @Autowired |
| | | private IVtduService vtduService; |
| | | |
| | | @Resource |
| | | private ICameraSdkService cameraSdkService; |
| | | /** |
| | | * 查询流媒体管理列表 |
| | | */ |
| | |
| | | @GetMapping(value = "/{name}") |
| | | public AjaxResult getInfo(@PathVariable("name") String name) |
| | | { |
| | | //region 自动转码 |
| | | String[] nameArray = name.split("_"); |
| | | String cameraId=nameArray[0]; |
| | | Integer chanNo=Integer.valueOf(nameArray[1]); |
| | | CameraCmd cmd=new CameraCmd(); |
| | | cmd.setCameraId(cameraId); |
| | | cmd.setChanNo(chanNo); |
| | | Map<String, Object> videoCompressionCfg = cameraSdkService.getVideoCompressionCfg(cmd); |
| | | String videoEncType = (String)videoCompressionCfg.get("videoEncType"); |
| | | Vtdu vtdu = vtduService.selectVtduByName(name); |
| | | if(!videoEncType.equals("标准h264")) |
| | | { |
| | | vtdu.setIsCode("1"); |
| | | } |
| | | else |
| | | { |
| | | vtdu.setIsCode("0"); |
| | | } |
| | | vtduService.deleteVtduByName(name); |
| | | vtduService.insertVtdu(vtdu); |
| | | //endregion |
| | | return success(vtduService.selectVtduByName(name)); |
| | | } |
| | | |
| | |
| | | |
| | | List<String> getNameList(); |
| | | |
| | | boolean checkNameExist(String name); |
| | | |
| | | RtspSession getRtspSessionById(String sessionId); |
| | | |
| | | WebrtcSession getWebrtcSessionById(String sessionId); |
| | |
| | | mediaInfo.setMaxReaders(100); |
| | | mediaInfo.setSourceprotocol("tcp"); |
| | | |
| | | List<String> nameList=new ArrayList<>(); |
| | | List<String> nameList = new ArrayList<>(); |
| | | String paths = mediaClient.paths(); |
| | | JsonsRoot jsonsRoot = JSONObject.parseObject(paths, JsonsRoot.class); |
| | | List<Items> items = jsonsRoot.getItems(); |
| | | for (Items item : items) { |
| | | nameList.add(item.getName()); |
| | | } |
| | | if(!nameList.contains(name)) { |
| | | if (!nameList.contains(name)) { |
| | | mediaClient.addPath(name, mediaInfo); |
| | | } |
| | | Map<String, String> map = new HashMap<>(); |
| | |
| | | mediaInfo.setMaxReaders(100); |
| | | mediaInfo.setSourceprotocol("tcp"); |
| | | |
| | | mediaClient.editPath(name, mediaInfo); |
| | | if (checkNameExist(name)) { |
| | | mediaClient.editPath(name, mediaInfo); |
| | | } |
| | | |
| | | // Map<String,String> map=new HashMap<>(); |
| | | map.put("rtspUrl", rtspUrl); |
| | | map.put("rtmpUrl", rtmpUrl); |
| | | map.put("webrtcUrl", webrtcUrl); |
| | |
| | | @Override |
| | | public void removePath(String[] names) { |
| | | for (String name : names) { |
| | | mediaClient.removePath(name); |
| | | if(checkNameExist(name)) { |
| | | mediaClient.removePath(name);} |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void removePath(String name) { |
| | | mediaClient.removePath(name); |
| | | if(checkNameExist(name)) { |
| | | mediaClient.removePath(name); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取流媒体name列表 |
| | | * 获取流媒体name列表 |
| | | * 刘苏义 |
| | | * 2023/10/13 14:19:07 |
| | | */ |
| | | @Override |
| | | public List<String> getNameList() { |
| | | List<String> nameList=new ArrayList<>(); |
| | | String paths = mediaClient.paths(); |
| | | JsonsRoot jsonsRoot = JSONObject.parseObject(paths, JsonsRoot.class); |
| | | List<Items> items = jsonsRoot.getItems(); |
| | | for (Items item : items) { |
| | | nameList.add(item.getName()); |
| | | List<String> nameList = new ArrayList<>(); |
| | | try { |
| | | String paths = mediaClient.paths(); |
| | | JsonsRoot jsonsRoot = JSONObject.parseObject(paths, JsonsRoot.class); |
| | | List<Items> items = jsonsRoot.getItems(); |
| | | for (Items item : items) { |
| | | nameList.add(item.getName()); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | log.error(ex.getMessage()); |
| | | } |
| | | return nameList; |
| | | } |
| | | |
| | | /** |
| | | * 检查名称是否存在 |
| | | * 刘苏义 |
| | | * 2023/10/19 15:18:45 |
| | | */ |
| | | @Override |
| | | public boolean checkNameExist(String name) { |
| | | boolean result = false; |
| | | List<String> nameList = getNameList(); |
| | | if (nameList.contains(name)) { |
| | | result = true; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 配置流媒体参数 |
| | | */ |
| | |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.uuid.IdUtils; |
| | | import com.ruoyi.device.camera.domain.CameraCmd; |
| | | import com.ruoyi.device.camera.service.ICameraSdkService; |
| | | import com.ruoyi.media.service.IMediaService; |
| | | import com.ruoyi.utils.forest.MediaClient; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | */ |
| | | @Override |
| | | public Vtdu selectVtduByName(String name) { |
| | | |
| | | return vtduMapper.selectVtduByName(name); |
| | | } |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public int deleteVtduByName(String name) { |
| | | mediaService.removePath(name); |
| | | return vtduMapper.deleteVtduByName(name); |
| | | } |
| | | |
| | |
| | | package com.ruoyi.utils.tools; |
| | | |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.lang.reflect.Field; |
| | | import java.text.DecimalFormat; |
| | | import java.time.LocalTime; |
| | |
| | | int digitGroups = (int) (Math.log10(size) / Math.log10(1024)); |
| | | return new DecimalFormat("#,###.##").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups]; |
| | | } |
| | | |
| | | /** |
| | | * byte数组转字符串 |
| | | * 刘苏义 |
| | | * 2023/10/18 8:42:59 |
| | | * @param byteArray |
| | | */ |
| | | public static String byteArrayToString(byte[] byteArray) { |
| | | StringBuilder stringBuilder = new StringBuilder(); |
| | | for (byte b : byteArray) { |
| | | stringBuilder.append(String.valueOf(b)); |
| | | } |
| | | return stringBuilder.toString(); |
| | | } |
| | | } |
| | |
| | | window.onload = function () { |
| | | console.log(RTCRtpReceiver.getCapabilities('video').codecs) |
| | | $.ajax({ |
| | | url: "../hik/list", |
| | | url: "../cameraSdk/list", |
| | | type: "get", |
| | | success: function (data) { |
| | | console.log(data); |
| | |
| | | for (var i = 0; i < arr.length; i++) { |
| | | console.log(arr[i].id); |
| | | var camera = { |
| | | type: arr[i].gdtype, |
| | | name: arr[i].name, |
| | | factory: arr[i].factory, |
| | | ipaddr: arr[i].ip, |
| | | username: arr[i].username, |
| | | password: arr[i].password, |
| | |
| | | } |
| | | //云台上下左右 |
| | | $("#up").mousedown(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 2; |
| | | var enable = true; |
| | | commondMethod(url, code, enable); |
| | | |
| | | }) |
| | | $("#up").mouseup(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 2; |
| | | var enable = false; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#down").mousedown(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 8; |
| | | var enable = true; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#down").mouseup(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 8; |
| | | var enable = false; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#left").mousedown(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 4; |
| | | var enable = true; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#left").mouseup(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 4; |
| | | var enable = false; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#right").mousedown(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 6; |
| | | var enable = true; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#right").mouseup(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 6; |
| | | var enable = false; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | //变倍 |
| | | $("#controlZoomIn").mousedown(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 10; |
| | | var enable = true; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#controlZoomIn").mouseup(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 10; |
| | | var enable = false; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#controlZoomOut").mousedown(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 11; |
| | | var enable = true; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#controlZoomOut").mouseup(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 11; |
| | | var enable = false; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | //变焦 |
| | | $("#controlFocusNear").mousedown(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 12; |
| | | var enable = true; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#controlFocusNear").mouseup(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 12; |
| | | var enable = false; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#controlFocusFar").mousedown(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 13; |
| | | var enable = true; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#controlFocusFar").mouseup(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 13; |
| | | var enable = false; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | //光圈 |
| | | $("#controlIrisOpen").mousedown(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 14; |
| | | var enable = true; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#controlIrisOpen").mouseup(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 14; |
| | | var enable = false; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#controlIrisClose").mousedown(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 15; |
| | | var enable = true; |
| | | commondMethod(url, code, enable); |
| | | }) |
| | | $("#controlIrisClose").mouseup(function () { |
| | | var url = "../hik/PTZControlWithSpeed"; |
| | | var url = "../cameraSdk/PTZControlWithSpeed"; |
| | | var code = 15; |
| | | var enable = false; |
| | | commondMethod(url, code, enable); |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/setPreset", |
| | | url: "../cameraSdk/setPreset", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(opt), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/gotoPreset", |
| | | url: "../cameraSdk/gotoPreset", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(opt), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/getPTZ", |
| | | url: "../cameraSdk/getPTZ", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(opt), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/setPTZ", |
| | | url: "../cameraSdk/setPTZ", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(myEntity), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/setTargetPosition", |
| | | url: "../cameraSdk/setTargetPosition", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(myEntity), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/setZeroPTZ", |
| | | url: "../cameraSdk/setZeroPTZ", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(opt), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/PTZControlWithSpeed", |
| | | url: "../cameraSdk/PTZControlWithSpeed", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(opt), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/defogcfg", |
| | | url: "../cameraSdk/defogcfg", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(optOpen), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/defogcfg", |
| | | url: "../cameraSdk/defogcfg", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(optClose), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/infrarecfg", |
| | | url: "../cameraSdk/infrarecfg", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(optOpen), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/infrarecfg", |
| | | url: "../cameraSdk/infrarecfg", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(optClose), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/focusMode", |
| | | url: "../cameraSdk/focusMode", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(optOpen), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/focusMode", |
| | | url: "../cameraSdk/focusMode", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(optClose), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/getFocusPos", |
| | | url: "../cameraSdk/getFocusPos", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(opt), |
| | | success: function (datas) { |
| | | console.log(datas); |
| | | $("#focus").val(datas.data.dwFocus); |
| | | $("#focus").val(datas.data); |
| | | } |
| | | }) |
| | | }) |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/heateRpwron", |
| | | url: "../cameraSdk/heateRpwron", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(optOpen), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/heateRpwron", |
| | | url: "../cameraSdk/heateRpwron", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(optClose), |
| | |
| | | 'Accept': 'application/json', |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | url: "../hik/cameraDeicing", |
| | | url: "../cameraSdk/cameraDeicing", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(optOpen), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/cameraDeicing", |
| | | url: "../cameraSdk/cameraDeicing", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(optClose), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/captureJPEGPicture", |
| | | url: "../cameraSdk/captureJPEGPicture", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(opt), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/picCutCate", |
| | | url: "../cameraSdk/picCutCate", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(opt), |
| | | success: function (data) { |
| | | console.log(data.data); |
| | | $('#imgContainer').attr('src', data.data); |
| | | setTimeout(() => { |
| | | $('#imgContainer').attr('src', data.data); |
| | | }, 1000 ) |
| | | |
| | | } |
| | | }) |
| | | }) |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/record", |
| | | url: "../cameraSdk/record", |
| | | type: "post", |
| | | dataType: "json", |
| | | data: JSON.stringify(optOpen), |
| | |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': token |
| | | }, |
| | | url: "../hik/record", |
| | | url: "../cameraSdk/record", |
| | | dataType: "json", |
| | | data: JSON.stringify(optClose), |
| | | type: "post", |
| | |
| | | /*云台公共方法*/ |
| | | function commondMethod(url, code, enable) { |
| | | cameraId = $('#select option:selected').val(); |
| | | opt = {"cameraId": cameraId, "chanNo": 1, "speed": 8, "enable": enable, "code": code}; |
| | | opt = {"cameraId": cameraId, "chanNo": 1, "speed": 4, "enable": enable, "code": code}; |
| | | $.ajax({ |
| | | headers: { |
| | | 'Accept': 'application/json', |
| | |
| | | var cameraId = $('#select option:selected').val(); |
| | | let camera = cameraMap.get(cameraId); |
| | | console.log(camera); |
| | | if (camera.type == "ys") { |
| | | if (camera.factory == "3") { |
| | | realViewYs("127.0.0.1", ID, camera.username, camera.password, camera.ipaddr, camera.port); |
| | | } else if (camera.type == "dh") { |
| | | } else if (camera.factory == "2") { |
| | | realViewDh("127.0.0.1", ID, camera.username, camera.password, camera.ipaddr, camera.port); |
| | | } else { |
| | | realViewHik("127.0.0.1", ID, camera.username, camera.password, camera.ipaddr, camera.port); |
| | |
| | | import com.ruoyi.device.camera.domain.CameraCmd; |
| | | import com.ruoyi.device.camera.service.IArdCamerasService; |
| | | import com.ruoyi.device.channel.domain.ArdChannel; |
| | | import com.ruoyi.device.dhsdk.service.IDhClientService; |
| | | import com.ruoyi.device.hiksdk.service.IHikClientService; |
| | | import com.ruoyi.media.domain.Items; |
| | | import com.ruoyi.media.domain.JsonsRoot; |
| | |
| | | @Resource |
| | | IArdCamerasService iArdCamerasService; |
| | | @Resource |
| | | IHikClientService iHikClientService; |
| | | IHikClientService hikClientService; |
| | | @Resource |
| | | IDhClientService dhClientService; |
| | | @Resource |
| | | IVtduService vtduService; |
| | | @Resource |
| | |
| | | */ |
| | | public void cameraState() { |
| | | try { |
| | | ArdCameras ardCamera = new ArdCameras(); |
| | | ardCamera.setFactory("1"); |
| | | ArdCameras ardCamera = new ArdCameras(); |
| | | //调用查询方法 |
| | | List<ArdCameras> ardCameras = iArdCamerasService.selectArdCamerasListNoDataScope(ardCamera); |
| | | for (ArdCameras camera : ardCameras) { |
| | | CameraCmd cmd = new CameraCmd(); |
| | | cmd.setCameraId(camera.getId()); |
| | | boolean onLineNew = iHikClientService.isOnLine(cmd);//相机实时状态 |
| | | boolean onLineOld = "1".equals(camera.getState());//相机历史状态 |
| | | //当状态发生变化时,更新实时状态 |
| | | boolean onLineNew = false; |
| | | // 判断是1还是2 |
| | | if (camera.getFactory().equals("1")) { |
| | | onLineNew = hikClientService.isOnLine(cmd); |
| | | } else if (camera.getFactory().equals("2")) { |
| | | onLineNew = dhClientService.isOnLine(cmd); |
| | | } |
| | | boolean onLineOld = "1".equals(camera.getState()); |
| | | if (onLineNew != onLineOld) { |
| | | if (onLineNew) { |
| | | camera.setState("1"); |
| | |
| | | } |
| | | iArdCamerasService.updateArdCameras(camera); |
| | | } |
| | | |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("同步相机在线状态异常:" + ex.getMessage()); |
| | |
| | | * 2023/10/13 14:13:53 |
| | | */ |
| | | public void vtdu() { |
| | | List<String> nameList = mediaService.getNameList(); |
| | | |
| | | List<Vtdu> vtdus = vtduService.selectVtduList(new Vtdu()); |
| | | for (Vtdu vtdu : vtdus) { |
| | | if (!nameList.contains(vtdu.getName())) { |
| | | boolean nameExist = mediaService.checkNameExist(vtdu.getName()); |
| | | if (!nameExist) { |
| | | mediaService.addPath(vtdu.getName(), vtdu.getRtspSource(), vtdu.getMode(), vtdu.getIsCode()); |
| | | } |
| | | } |