From 1ccdcb4a890687d59b272f5397e8b41ae4ce2254 Mon Sep 17 00:00:00 2001 From: aijinhui <aijinhui> Date: 星期二, 07 十一月 2023 16:23:24 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ard-work/src/main/java/com/ruoyi/device/camera/strategy/SdkStrategy.java | 215 +- ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/controller/HikSdkController.java | 6 ard-work/src/main/java/com/ruoyi/device/camera/strategy/SdkStrategyFactory.java | 43 ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java | 8 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java | 15 ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java | 2 ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java | 224 - /dev/null | 70 ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DhSdkStrategy.java | 2002 ++++++++++--------- ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/controller/DhSdkController.java | 4 ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java | 2 ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java | 1 ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikSdkStrategy.java | 3457 +++++++++++++++++---------------- ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java | 5 14 files changed, 3,068 insertions(+), 2,986 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java index 1cb390f..94abde8 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java +++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java @@ -2,6 +2,8 @@ import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; +import org.springframework.scheduling.annotation.Async; + import java.util.Map; public interface ICameraSdkService { diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/AsyncLogin.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/AsyncLogin.java deleted file mode 100644 index ed743f3..0000000 --- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/AsyncLogin.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.ruoyi.device.camera.service.impl; - -import com.ruoyi.device.camera.domain.ArdCameras; -import com.ruoyi.utils.sdk.dhsdk.service.IDhClientService; -import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; -import org.springframework.scheduling.annotation.Async; -import javax.annotation.Resource; - -/** - * @ClassName 寮傛鐧诲綍 - * @Description: 鐢变簬娴佸獟浣撳绾跨▼鏈夐棶棰橈紝鏆傛椂涓嶄娇鐢ㄥ紓姝� - * @Author 鍒樿嫃涔� - * @Date 2023/10/23 21:39 - * @Version 1.0 - */ - -public class AsyncLogin { - @Resource - IHikClientService hikClientService; - - @Resource - IDhClientService dhClientService; - - @Async("loginExecutor") - public void hikLogin(ArdCameras ardCameras) { - hikClientService.login(ardCameras); - } - - - @Async("loginExecutor") - public void dhLogin(ArdCameras ardCameras) { - dhClientService.login(ardCameras); - } -} \ No newline at end of file diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java index 9fd7a40..bd6a533 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java @@ -7,8 +7,8 @@ import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.IArdCamerasService; import com.ruoyi.device.camera.service.ICameraSdkService; -import com.ruoyi.utils.sdk.dhsdk.service.IDhClientService; -import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; +import com.ruoyi.device.camera.strategy.SdkStrategy; +import com.ruoyi.device.camera.strategy.SdkStrategyFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; @@ -32,27 +32,30 @@ @Resource private IArdCamerasService ardCamerasService; @Resource - IHikClientService hikClientService; + private RedisCache redisCache; @Resource - IDhClientService dhClientService; - @Resource - RedisCache redisCache; + private SdkStrategyFactory sdkStrategyFactory; + /** + * 鍚姩绾跨▼鏂规硶锛岀敤浜庢墽琛屽垵濮嬪寲鐧诲綍鐩告満鐨勯�昏緫 + * + * @param args 鍛戒护琛屽弬鏁� + */ @Override - public void run(ApplicationArguments args) throws Exception { + public void run(ApplicationArguments args) { + try { + // 浠巃rdCamerasService涓幏鍙朅rdCameras鍒楄〃 List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(new ArdCameras()); for (ArdCameras camera : ardCameras) { - if ("1".equals(camera.getFactory())) { - hikClientService.login(camera); - } else if ("2".equals(camera.getFactory())) { - dhClientService.login(camera); - } + login(camera); } } catch (Exception ex) { + // 鍒濆鍖栫櫥褰曠浉鏈哄紓甯革紝璁板綍閿欒鏃ュ織 log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage()); } } + //鐧诲綍 @Override @@ -61,13 +64,10 @@ try { if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - hikClientService.login(ardCamera); - result = true; - } else if (factory.equals("2")) { - dhClientService.login(ardCamera); - result = true; - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + //sdkStrategy.login(ardCamera);//鍚屾鐧诲綍 + sdkStrategy.asyncLogin(ardCamera);//寮傛鐧诲綍 + result=true; } } catch (Exception ex) { log.error("鐧诲綍寮傚父锛�" + ex.getMessage()); @@ -84,11 +84,8 @@ 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); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.logout(cameraId); } } catch (Exception ex) { log.error("娉ㄩ攢寮傚父锛�" + ex.getMessage()); @@ -106,11 +103,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - onLine = hikClientService.isOnLine(cmd); - } else if (factory.equals("2")) { - onLine = dhClientService.isOnLine(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + onLine = sdkStrategy.isOnLine(cmd); } return onLine; } catch (Exception ex) { @@ -129,11 +123,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.pTZControlWithSpeed(cmd); - } else if (factory.equals("2")) { - result = dhClientService.pTZControl(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.pTZControl(cmd); } return result; } catch (Exception ex) { @@ -151,11 +142,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.setFocusPos(cmd); - } else if (factory.equals("2")) { - result = dhClientService.setFocusPos(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.setFocusPos(cmd); } } catch (Exception ex) { log.error("璁剧疆鑱氱劍鍊煎紓甯革細" + ex.getMessage()); @@ -173,11 +161,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.getFocusPos(cmd); - } else if (factory.equals("2")) { - result = dhClientService.getFocusPos(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.getFocusPos(cmd); } } catch (Exception ex) { log.error("鑾峰彇鑱氱劍鍊煎紓甯革細" + ex.getMessage()); @@ -187,6 +172,7 @@ //璁剧疆棰勭疆浣� @Override + @SdkOperate public boolean setPreset(CameraCmd cmd) { boolean result = false; try { @@ -194,11 +180,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.setPreset(cmd); - } else if (factory.equals("2")) { - result = dhClientService.setPreset(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.setPreset(cmd); } } catch (Exception ex) { log.error("璁剧疆棰勭疆浣嶅紓甯革細" + ex.getMessage()); @@ -208,6 +191,7 @@ //璋冪敤棰勭疆浣� @Override + @SdkOperate public boolean gotoPreset(CameraCmd cmd) { boolean result = false; try { @@ -215,11 +199,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.gotoPreset(cmd); - } else if (factory.equals("2")) { - result = dhClientService.gotoPreset(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.gotoPreset(cmd); } } catch (Exception ex) { log.error("璋冪敤棰勭疆浣嶅紓甯革細" + ex.getMessage()); @@ -236,11 +217,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - map = hikClientService.getVideoCompressionCfg(cmd); - } else if (factory.equals("2")) { - map = dhClientService.getVideoCompressionCfg(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + map = sdkStrategy.getVideoCompressionCfg(cmd); } } catch (Exception ex) { log.error("鑾峰彇鐮佹祦鍘嬬缉鍙傛暟寮傚父锛�" + ex.getMessage()); @@ -257,11 +235,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.controlDefogcfg(cmd); - } else if (factory.equals("2")) { - //涓嶆敮鎸� - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.controlDefogcfg(cmd); } } catch (Exception ex) { log.error("鎿嶆帶閫忛浘寮傚父锛�" + ex.getMessage()); @@ -278,11 +253,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.controlInfrarecfg(cmd); - } else if (factory.equals("2")) { - result = dhClientService.controlInfrarecfg(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.controlInfrarecfg(cmd); } } catch (Exception ex) { log.error("鎿嶆帶绾㈠寮傚父锛�" + ex.getMessage()); @@ -299,11 +271,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.controlFocusMode(cmd); - } else if (factory.equals("2")) { - result = dhClientService.controlFocusMode(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.controlFocusMode(cmd); } } catch (Exception ex) { log.error("鎿嶆帶鑱氱劍妯″紡寮傚父锛�" + ex.getMessage()); @@ -320,11 +289,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.getFocusMode(cmd); - } else if (factory.equals("2")) { - result = dhClientService.getFocusMode(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.getFocusMode(cmd); } } catch (Exception ex) { log.error("鑾峰彇鑱氱劍妯″紡寮傚父锛�" + ex.getMessage()); @@ -341,11 +307,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.controlPTHeateRpwron(cmd); - } else if (factory.equals("2")) { - //涓嶆敮鎸� - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.controlPTHeateRpwron(cmd); } } catch (Exception ex) { log.error("鎿嶆帶浜戝彴鍔犵儹寮傚父锛�" + ex.getMessage()); @@ -362,11 +325,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.controlCameraDeicing(cmd); - } else if (factory.equals("2")) { - //涓嶆敮鎸� - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.controlCameraDeicing(cmd); } } catch (Exception ex) { log.error("鎿嶆帶浜戝彴鍔犵儹寮傚父锛�" + ex.getMessage()); @@ -383,11 +343,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.getPTZLockInfo(cmd); - } else if (factory.equals("2")) { - - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.getPTZLockInfo(cmd); } } catch (Exception ex) { log.error("鑾峰彇浜戝彴閿佸畾淇℃伅寮傚父锛�" + ex.getMessage()); @@ -413,13 +370,8 @@ if (ardCamera != null) { //鑾峰彇鎽勫儚澶村伐鍘� String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - //璋冪敤hikClientService鐨刾icCutCate鏂规硶 - url = hikClientService.picCutCate(cmd); - } else if (factory.equals("2")) { - //璋冪敤dhClientService鐨刾icCutCate鏂规硶 - url = dhClientService.picCutCate(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + url = sdkStrategy.picCutCate(cmd); } } catch (Exception ex) { log.error("鎶撳浘寮傚父锛�" + ex.getMessage()); @@ -436,11 +388,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - map = hikClientService.getPtz(cmd); - } else if (factory.equals("2")) { - map = dhClientService.getPtz(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + map = sdkStrategy.getPtz(cmd); } } catch (Exception ex) { log.error("鑾峰彇ptz寮傚父锛�" + ex.getMessage()); @@ -457,11 +406,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - map = hikClientService.getPtzScope(cmd); - } else if (factory.equals("2")) { - - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + map = sdkStrategy.getPtzScope(cmd); } } catch (Exception ex) { log.error("鑾峰彇ptz鑼冨洿寮傚父锛�" + ex.getMessage()); @@ -479,11 +425,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.setPtz(cmd); - } else if (factory.equals("2")) { - result = dhClientService.setPtz(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.setPtz(cmd); } } catch (Exception ex) { log.error("璁剧疆ptz寮傚父锛�" + ex.getMessage()); @@ -501,11 +444,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.setZeroPtz(cmd); - } else if (factory.equals("2")) { - result = dhClientService.setZeroPtz(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.setZeroPtz(cmd); } } catch (Exception ex) { log.error("璁剧疆闆舵柟浣嶈寮傚父锛�" + ex.getMessage()); @@ -523,11 +463,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.guideTargetPosition(cmd); - } else if (factory.equals("2")) { - result = dhClientService.guideTargetPosition(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.guideTargetPosition(cmd); } } catch (Exception ex) { log.error("寮曞鎸囧悜鐩爣寮傚父锛�" + ex.getMessage()); @@ -590,11 +527,8 @@ 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); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + url = sdkStrategy.record(cmd); } } catch (Exception ex) { log.error("褰曞儚寮傚父锛�" + ex.getMessage()); @@ -611,11 +545,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - result = hikClientService.recordStart(cmd); - } else if (factory.equals("2")) { - result = dhClientService.recordStart(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.recordStart(cmd); } } catch (Exception ex) { log.error("寮�濮嬪綍鍍忓紓甯革細" + ex.getMessage()); @@ -632,11 +563,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - url = hikClientService.recordStopToMinio(cmd); - } else if (factory.equals("2")) { - url = dhClientService.recordStopToMinio(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + url = sdkStrategy.recordStopToMinio(cmd); } } catch (Exception ex) { log.error("鍋滄褰曞儚寮傚父锛�" + ex.getMessage()); @@ -653,11 +581,8 @@ 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); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + result = sdkStrategy.recordStopNotToMinio(cmd); } } catch (Exception ex) { log.error("鍋滄褰曞儚寮傚父锛�" + ex.getMessage()); @@ -674,11 +599,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); - if (factory.equals("1")) { - map = hikClientService.getGisInfo(cmd); - } else if (factory.equals("2")) { - map = dhClientService.getGisInfo(cmd); - } + SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); + map = sdkStrategy.getGisInfo(cmd); } } catch (Exception ex) { log.error("鑾峰彇鐩告満鏋惰鍙傛暟寮傚父锛�" + ex.getMessage()); diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/IHikClientService.java b/ard-work/src/main/java/com/ruoyi/device/camera/strategy/SdkStrategy.java similarity index 86% rename from ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/IHikClientService.java rename to ard-work/src/main/java/com/ruoyi/device/camera/strategy/SdkStrategy.java index ecd6d25..3c9e278 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/IHikClientService.java +++ b/ard-work/src/main/java/com/ruoyi/device/camera/strategy/SdkStrategy.java @@ -1,109 +1,106 @@ -package com.ruoyi.utils.sdk.hiksdk.service; - -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; - -/** - * @ClassName: IHikClientService - * @Description: 娴峰悍鎿嶄綔瀹㈡埛绔帴鍙g被 - * @Author: Administrator - * @Date: 2023骞�01鏈�17鏃� 15:59 - * @Version: 1.0 - **/ -public interface IHikClientService { - - //鍚屾鐧诲綍 - void login(ArdCameras cameras); - - //寮傛鐧诲綍 - void asyncLogin(ArdCameras cameras); - - //娉ㄩ攢 - boolean logout(String cameraId); - - //鍦ㄧ嚎鐘舵�� - boolean isOnLine(CameraCmd cmd); - - //浜戝彴鎺у埗 - boolean pTZControlWithSpeed(CameraCmd cmd); - - //璁剧疆鑱氱劍鍊� - boolean setFocusPos(CameraCmd cmd); - - //鑾峰彇鑱氱劍鍊� - int getFocusPos(CameraCmd cmd); - - //璁剧疆棰勭疆浣� - boolean setPreset(CameraCmd cmd); - - //璋冪敤棰勭疆浣� - boolean gotoPreset(CameraCmd cmd); - - //鑾峰彇鐮佹祦鍘嬬缉鍙傛暟 - Map<String, Object> getVideoCompressionCfg(CameraCmd cmd); - - //閫忛浘 - boolean controlDefogcfg(CameraCmd cmd); - - //绾㈠ - boolean controlInfrarecfg(CameraCmd cmd); - - //鑱氱劍妯″紡 - boolean controlFocusMode(CameraCmd cmd); - - //鑾峰彇鑱氱劍妯″紡 - String getFocusMode(CameraCmd cmd); - - //浜戝彴鍔犵儹 - boolean controlPTHeateRpwron(CameraCmd cmd); - - //闀滃ご闄ゅ啺 - boolean controlCameraDeicing(CameraCmd cmd); - - //鑾峰彇浜戝彴閿佸畾淇℃伅 - int getPTZLockInfo(CameraCmd cmd); - - //鎶撳浘-杩旂粰鍓嶇浜岃繘鍒舵祦 - String captureJPEGPicture(CameraCmd cmd); - - //鎶撳浘 - String picCutCate(CameraCmd cmd); - - //ptz 涓夊潗鏍� - Map<String, Object> getPtz(CameraCmd cmd); - - //鑾峰彇ptz鑼冨洿 - Map<String, Object> getPtzScope(CameraCmd cmd); - - //璁剧疆ptz - boolean setPtz(CameraCmd cmd); - - //璁剧疆闆舵柟浣嶈 - boolean setZeroPtz(CameraCmd cmd); - - //鎵嬪姩褰曞儚 - String record(CameraCmd cmd); - - - //寮曞鐩爣浣嶇疆 - boolean guideTargetPosition(CameraCmd cmd); - - //寮�濮嬪綍鍍� - boolean recordStart(CameraCmd cmd); - - //鍋滄褰曞儚-涓婁紶minio-杩斿洖褰曞儚url - String recordStopToMinio(CameraCmd cmd); - - //鍋滄褰曞儚-涓嶄笂浼爉inio - boolean recordStopNotToMinio(CameraCmd cmd); - - //鑾峰彇鐩告満閫氶亾淇℃伅 - public List<ArdChannel> getCameraChannelList(ArdCameras camera); - - //鑾峰彇GIS淇℃伅鏁版嵁 - public Map<String, Object> getGisInfo(CameraCmd cmd); -} +package com.ruoyi.device.camera.strategy; + +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; + +/** + * 鐩告満SDK绛栫暐鎺ュ彛 + * 鍒樿嫃涔� + * 2023/11/7 10:48:52 + */ +public interface SdkStrategy { + + //鍚屾鐧诲綍 + boolean login(ArdCameras cameras); + + //寮傛鐧诲綍 + void asyncLogin(ArdCameras cameras); + + //娉ㄩ攢 + boolean logout(String cameraId); + + //鍦ㄧ嚎鐘舵�� + boolean isOnLine(CameraCmd cmd); + + //浜戝彴鎺у埗 + boolean pTZControl(CameraCmd cmd); + + //璁剧疆鑱氱劍鍊� + boolean setFocusPos(CameraCmd cmd); + + //鑾峰彇鑱氱劍鍊� + int getFocusPos(CameraCmd cmd); + + //璁剧疆棰勭疆浣� + boolean setPreset(CameraCmd cmd); + + //璋冪敤棰勭疆浣� + boolean gotoPreset(CameraCmd cmd); + + //鑾峰彇鐮佹祦鍘嬬缉鍙傛暟 + Map<String, Object> getVideoCompressionCfg(CameraCmd cmd); + + //閫忛浘 + boolean controlDefogcfg(CameraCmd cmd); + + //绾㈠ + boolean controlInfrarecfg(CameraCmd cmd); + + //鑱氱劍妯″紡 + boolean controlFocusMode(CameraCmd cmd); + + //鑾峰彇鑱氱劍妯″紡 + String getFocusMode(CameraCmd cmd); + + //浜戝彴鍔犵儹 + boolean controlPTHeateRpwron(CameraCmd cmd); + + //闀滃ご闄ゅ啺 + boolean controlCameraDeicing(CameraCmd cmd); + + //鑾峰彇浜戝彴閿佸畾淇℃伅 + int getPTZLockInfo(CameraCmd cmd); + + //鎶撳浘-杩旂粰鍓嶇浜岃繘鍒舵祦 + String captureJPEGPicture(CameraCmd cmd); + + //鎶撳浘 + String picCutCate(CameraCmd cmd); + + //ptz 涓夊潗鏍� + Map<String, Object> getPtz(CameraCmd cmd); + + //鑾峰彇ptz鑼冨洿 + Map<String, Object> getPtzScope(CameraCmd cmd); + + //璁剧疆ptz + boolean setPtz(CameraCmd cmd); + + //璁剧疆闆舵柟浣嶈 + boolean setZeroPtz(CameraCmd cmd); + + //鎵嬪姩褰曞儚 + String record(CameraCmd cmd); + + + //寮曞鐩爣浣嶇疆 + boolean guideTargetPosition(CameraCmd cmd); + + //寮�濮嬪綍鍍� + boolean recordStart(CameraCmd cmd); + + //鍋滄褰曞儚-涓婁紶minio-杩斿洖褰曞儚url + String recordStopToMinio(CameraCmd cmd); + + //鍋滄褰曞儚-涓嶄笂浼爉inio + boolean recordStopNotToMinio(CameraCmd cmd); + + //鑾峰彇鐩告満閫氶亾淇℃伅 + public List<ArdChannel> getCameraChannelList(ArdCameras camera); + + //鑾峰彇GIS淇℃伅鏁版嵁 + public Map<String, Object> getGisInfo(CameraCmd cmd); +} diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/strategy/SdkStrategyFactory.java b/ard-work/src/main/java/com/ruoyi/device/camera/strategy/SdkStrategyFactory.java new file mode 100644 index 0000000..56c01bf --- /dev/null +++ b/ard-work/src/main/java/com/ruoyi/device/camera/strategy/SdkStrategyFactory.java @@ -0,0 +1,43 @@ +package com.ruoyi.device.camera.strategy; + +import com.ruoyi.device.camera.domain.ArdCameras; +import com.ruoyi.utils.sdk.dhsdk.service.impl.DhSdkStrategy; +import com.ruoyi.utils.sdk.hiksdk.service.impl.HikSdkStrategy; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + + +/** + * @Description: SDK绛栫暐宸ュ巶绫� + * @ClassName: SdkStrategyFactory + * @Author: 鍒樿嫃涔� + * @Date: 2023骞�11鏈�07鏃�10:53:00 + **/ +@Component +public class SdkStrategyFactory { + + @Resource + private HikSdkStrategy hikSdkStrategy; + @Resource + private DhSdkStrategy dhSdkStrategy; + + /** + * 鏍规嵁浼犲叆鐨勫伐鍘傚弬鏁拌幏鍙栧搴旂殑Sdk绛栫暐 + * + * @param factory 宸ュ巶鍙傛暟 + * @return 瀵瑰簲鐨凷dk绛栫暐 + * @throws IllegalArgumentException 濡傛灉涓嶆敮鎸佽宸ュ巶鍙傛暟 + */ + public SdkStrategy getSdkStrategy(String factory) { + if (factory.equals("1")) { + return hikSdkStrategy; + } else if (factory.equals("2")) { + return dhSdkStrategy; + } else { + throw new IllegalArgumentException("Unsupported device: " + factory); + } + } + +} diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java index e5ff050..3ca1966 100644 --- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java @@ -9,7 +9,6 @@ import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; import com.ruoyi.device.camera.service.ICameraSdkService; -import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; import com.ruoyi.inspect.domain.ArdVideoInspectRecord; import com.ruoyi.inspect.mapper.ArdVideoInspectRecordMapper; import com.ruoyi.inspect.mapper.ArdVideoInspectTaskStepMapper; diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java index 3181820..be01a5c 100644 --- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java +++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java @@ -1,10 +1,12 @@ package com.ruoyi.inspect.service.impl; import com.ruoyi.device.camera.domain.CameraCmd; +import com.ruoyi.device.camera.service.ICameraSdkService; +import com.ruoyi.device.camera.service.impl.CameraSdkServiceImpl; import com.ruoyi.utils.sdk.common.GlobalVariable; -import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; import com.ruoyi.inspect.domain.ArdVideoInspectTask; import com.ruoyi.inspect.mapper.ArdVideoInspectTaskMapper; +import com.ruoyi.utils.sdk.hiksdk.service.impl.HikSdkStrategy; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -28,7 +30,7 @@ @Resource ArdVideoInspectTaskMapper ardVideoInspectTaskMapper; @Resource - private IHikClientService hikClientService; + private ICameraSdkService cameraSdkService; public static Map<String, InspectionTask> taskMap;//宸插惎鍔ㄤ换鍔ap @@ -77,7 +79,7 @@ CameraCmd cmd = new CameraCmd(); cmd.setCameraId(ardVideoInspectTask.getCameraId()); cmd.setChanNo(ardVideoInspectTask.getChannel()); - hikClientService.recordStopNotToMinio(cmd); + cameraSdkService.recordStopNotToMinio(cmd); GlobalVariable.previewMap.remove(cameraId); } /*鍋滄浠诲姟*/ diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/controller/DhSdkController.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/controller/DhSdkController.java index 91ebc78..19504fb 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/controller/DhSdkController.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/controller/DhSdkController.java @@ -8,7 +8,7 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.device.camera.domain.CameraCmd; -import com.ruoyi.utils.sdk.dhsdk.service.IDhClientService; +import com.ruoyi.utils.sdk.dhsdk.service.impl.DhSdkStrategy; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.stereotype.Controller; @@ -36,7 +36,7 @@ public class DhSdkController extends BaseController { @Resource - private IDhClientService sdk; + private DhSdkStrategy sdk; @ApiOperation(value = "浜戝彴鎺у埗", notes = "Code:1-宸︿笂 2-涓� 3-鍙充笂 4-宸� 5-宸¤埅 6-鍙� 7-宸︿笅 8-涓� 9-鍙充笅 10-鐒﹁窛鍙樺ぇ 11-鐒﹁窛鍙樺皬\n" + diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/IDhClientService.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/IDhClientService.java deleted file mode 100644 index 4cb371b..0000000 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/IDhClientService.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.ruoyi.utils.sdk.dhsdk.service; - -import com.ruoyi.device.camera.domain.ArdCameras; -import com.ruoyi.device.camera.domain.CameraCmd; -import java.util.Map; - -/** - * @ClassName IDhSdkServer - * @Description: - * @Author 鍒樿嫃涔� - * @Date 2023/10/13 21:18 - * @Version 1.0 - */ -public interface IDhClientService { - - //鐧诲綍 - Boolean login(ArdCameras ardCamera); - - //娉ㄩ攢 - Boolean logout(String cameraId); - - //鍦ㄧ嚎鐘舵�� - boolean isOnLine(CameraCmd cmd); - - //浜戝彴鎺у埗 - boolean pTZControl(CameraCmd cmd); - - //ptz 涓夊潗鏍� - Map<String, Object> getPtz(CameraCmd cmd); - - //璁剧疆PTZ - boolean setPtz(CameraCmd cmd); - - //璁剧疆闆舵柟浣嶈 - boolean setZeroPtz(CameraCmd cmd); - - //鎶撳浘 - String picCutCate(CameraCmd cmd); - - //鐭椂褰曞儚 - String record(CameraCmd cmd); - boolean recordStart(CameraCmd cmd); - String recordStopToMinio(CameraCmd cmd); - boolean recordStopNotToMinio(CameraCmd cmd); - //寮曞鐩爣浣嶇疆 - boolean guideTargetPosition(CameraCmd cmd); - - //璋冪敤棰勭疆浣� - boolean gotoPreset(CameraCmd cmd); - //璁剧疆棰勭疆浣� - boolean setPreset(CameraCmd cmd); - - //璁剧疆鑱氱劍妯″紡 - boolean controlFocusMode(CameraCmd cmd); - //鑾峰彇鑱氱劍妯″紡 - String getFocusMode(CameraCmd cmd); - - //閫忛浘 - boolean controlDefogcfg(CameraCmd cmd); - //绾㈠ - boolean controlInfrarecfg(CameraCmd cmd); - //鑾峰彇鑱氱劍鍊� - int getFocusPos(CameraCmd cmd); - //璁剧疆鑱氱劍鍊� - boolean setFocusPos(CameraCmd cmd); - //鑾峰彇鐮佹祦鍘嬬缉鍙傛暟 - Map<String, Object> getVideoCompressionCfg(CameraCmd cmd); - //鑾峰彇GIS淇℃伅鏁版嵁 - Map<String, Object> getGisInfo(CameraCmd cmd); -} diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DhClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DhSdkStrategy.java similarity index 82% rename from ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DhClientServiceImpl.java rename to ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DhSdkStrategy.java index ccb5b6a..d2a2a2a 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DhClientServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DhSdkStrategy.java @@ -1,941 +1,1063 @@ -package com.ruoyi.utils.sdk.dhsdk.service.impl; - -import com.ruoyi.alarm.global.domain.GuidePriorityQueue; -import com.ruoyi.alarm.global.domain.GuideTask; -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.uuid.IdUtils; -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.channel.domain.ArdChannel; -import com.ruoyi.device.channel.service.IArdChannelService; -import com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib; -import com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.LLong; -import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.EM_NEW_CONFIG; -import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE; -import com.ruoyi.utils.sdk.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS; -import com.ruoyi.utils.sdk.dhsdk.lib.structure.DH_OUT_PTZ_VIEW_RANGE_STATUS; -import com.ruoyi.utils.sdk.dhsdk.module.*; -import com.ruoyi.utils.sdk.dhsdk.service.IDhClientService; -import com.ruoyi.utils.sdk.common.GlobalVariable; -import com.ruoyi.media.domain.Vtdu; -import com.ruoyi.media.service.IVtduService; -import com.ruoyi.utils.gis.GisUtil; -import com.ruoyi.utils.minio.MinioUtil; -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.*; -import java.text.DecimalFormat; -import java.util.*; -import java.util.concurrent.PriorityBlockingQueue; - -import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.*; -import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_MOVE_CONTROL; -import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_SET_CONTROL; -import static com.ruoyi.utils.sdk.dhsdk.lib.ToolKits.getErrorCodePrint; -import static com.ruoyi.utils.sdk.dhsdk.module.LoginModule.netsdk; - - -/** - * @ClassName DhSdkServiceImpl - * @Description: - * @Author 鍒樿嫃涔� - * @Date 2023/10/13 21:19 - * @Version 1.0 - */ -@Service -@Slf4j(topic = "dhSdk") -public class DhClientServiceImpl implements IDhClientService { - @Resource - private IArdCamerasService ardCamerasService; - @Resource - private IArdChannelService ardChannelService; - @Resource - private IVtduService vtduService; - @Value("${minio.endpoint}") - private String minioEndPoint; - private final Object lock = new Object(); - - // 璁惧鏂嚎閫氱煡鍥炶皟 - private static DisConnect disConnect = new DisConnect(); - // 缃戠粶杩炴帴鎭㈠ - private static HaveReConnect haveReConnect = new HaveReConnect(); - - - /** - * 鐧诲綍 - * 鍒樿嫃涔� - * 2023/10/17 8:28:13 - */ - @Override - public Boolean login(ArdCameras camera) { - LoginModule.init(disConnect, haveReConnect); - NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); - LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword(), m_stDeviceInfo); - if (loginId.longValue() <= 0) { - camera.setChanNum(0); - camera.setLoginId(-1); - camera.setState("0"); - ardCamerasService.updateArdCameras(camera); - return false; - } - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } - //鍒犻櫎绠$悊閫氶亾 - ardChannelService.deleteArdChannelByDeviceId(camera.getId()); - camera.setState("1"); - camera.setChanNum(m_stDeviceInfo.byChanNum); - camera.setStartDChan(1); - camera.setLoginId((int) loginId.longValue()); - ardCamerasService.updateArdCameras(camera); - GlobalVariable.loginMap.put(camera.getId(), loginId); - - //鑾峰彇鏈�鏂伴�氶亾 - for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; 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.setChanNo(i); - ardChannelService.insertArdChannel(channel); - } - //閰嶇疆鍒版祦濯掍綋 - for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) { - String name = camera.getId() + "_" + i; - String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/cam/realmonitor?channel=" + i + "&subtype=0"; - Vtdu vtdu = vtduService.selectVtduByName(name); - if (vtdu != null) { - vtduService.deleteVtduByName(name); - } - //娣诲姞鍒版祦濯掍綋 - CameraCmd cmd = new CameraCmd(camera.getId(), i); - Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); - vtdu = new Vtdu(); - if (videoCompressionCfg.get("videoEncType") != null) { - if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) { - vtdu.setIsCode("0");//榛樿涓嶈浆鐮� - } else { - vtdu.setIsCode("1");//榛樿杞爜 - } - } else { - vtdu.setIsCode("0");//榛樿涓嶈浆鐮� - } - vtdu.setRtspSource(rtspSource); - vtdu.setName(camera.getId() + "_" + i); - vtdu.setMode("1");//榛樿CPU杞В鐮� - vtdu.setCameraId(camera.getId()); - vtduService.insertVtdu(vtdu); - } - - //鍒涘缓寮曞闃熷垪 - if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { - Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); - PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); - GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); - } - return true; - } - - /** - * 娉ㄩ攢 - * 鍒樿嫃涔� - * 2023/10/17 8:28:13 - */ - @Override - public Boolean logout(String cameraId) { - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - return LoginModule.logout(loginId); - } - - /** - * 鏄惁鍦ㄧ嚎妫�娴� - * 鍒樿嫃涔� - * 2023/10/17 8:28:13 - */ - @Override - public boolean isOnLine(CameraCmd cmd) { - try { - String cameraId = cmd.getCameraId(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - NetSDKLib.NET_WORKSTATE dh_ptz_location_info = new NetSDKLib.NET_WORKSTATE(); - boolean b = ConfigModule.queryDevState(loginId, NET_DEVSTATE_ONLINE, dh_ptz_location_info); - if (!b) { - return false; - } - } catch (Exception ex) { - log.error("妫�娴嬪湪绾垮紓甯革細" + ex.getMessage()); - return false; - } - return true; - } - - /** - * 浜戝彴鎺у埗 - * 鍒樿嫃涔� - * 2023/10/17 8:28:13 - */ - @Override - @SdkOperate - public boolean pTZControl(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - boolean enable = cmd.isEnable(); - Integer chanNo = cmd.getChanNo(); - Integer speed = cmd.getSpeed(); - Integer code = cmd.getCode(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - int dwStop; - if (enable) { - dwStop = 0;//寮�鍚� - } else { - dwStop = 1;//鍏抽棴 - } - int dwPTZCommand = -1; - switch (code) { - /*鏂瑰悜*/ - case 1: - dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP; - break; - case 2: - dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_UP_CONTROL; - break; - case 3: - dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP; - break; - case 4: - dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL; - break; - case 5: - dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_POINT_LOOP_CONTROL; - break; - case 6: - dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL; - break; - case 7: - dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN; - break; - case 8: - dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL; - break; - case 9: - dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN; - break; - /*鐒﹁窛*/ - case 10: - dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL; - break; - case 11: - dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL; - break; - /*鐒︾偣*/ - case 12: - dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL; - break; - case 13: - dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL; - break; - /*鍏夊湀*/ - case 14: - dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL; - break; - case 15: - dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL; - break; - case 16: - dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_LAMP_CONTROL; - break; - } - boolean bool = PtzControlModule.ptzControl(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop); - if (!bool) { - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); - } - return bool; - } - - /** - * 鑾峰彇PTZ鍊� - * 鍒樿嫃涔� - * 2023/10/17 8:28:13 - */ - @Override - public Map<String, Object> getPtz(CameraCmd cmd) { - Map<String, Object> ptzMap = new HashMap<>(); - String cameraId = cmd.getCameraId(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return null; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - NetSDKLib.NET_PTZ_LOCATION_INFO dh_ptz_location_info = new NetSDKLib.NET_PTZ_LOCATION_INFO(); - boolean b = ConfigModule.queryDevState(loginId, NET_DEVSTATE_PTZ_LOCATION, dh_ptz_location_info); - if (b) { - DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 - String nPTZPan = df.format((float) dh_ptz_location_info.nPTZPan / 10); - float t = (float) dh_ptz_location_info.nPTZTilt / 10 * -1; - String nPTZTilt = df.format(t < 0 ? t + 360 : t); - String nPTZZoom = df.format((float) dh_ptz_location_info.nPTZZoom); - ptzMap.put("p", nPTZPan); - ptzMap.put("t", nPTZTilt); - ptzMap.put("z", nPTZZoom); - } - return ptzMap; - } - - /** - * @鎻忚堪 璁剧疆ptz淇℃伅 - * @鍙傛暟 [userId, channelNum] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:36 - * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� - */ - @Override - @SdkOperate - public boolean setPtz(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer chanNo = cmd.getChanNo(); - Map<String, Double> ptz = cmd.getPtzMap(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - try { - int p = (int) (ptz.get("p") * 10); - int t = (int) (ptz.get("t") * 10); - t = t > 900 ? 3600 - t : t * -1; - - int z = ptz.get("z").intValue() == 0 ? 1 : ptz.get("z").intValue(); - boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0); - if (!bool) { - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); - } - return bool; - } catch (Exception ex) { - log.error(ex.getMessage()); - return false; - } - } - - /** - * @鎻忚堪 璁剧疆闆舵柟浣嶈 - * @鍙傛暟 [userId, channelNum] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:36 - * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� - */ - @Override - public boolean setZeroPtz(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer chanNo = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - boolean bool = NetSDKLib.NETSDK_INSTANCE.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RESETZERO, 0, 0, 0, 0); - if (!bool) { - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); - } - return bool; - } - - /** - * @鎻忚堪 鎴浘 瀛樻湇鍔″櫒 - * @鍙傛暟 [cameraId, channelNum] - * @杩斿洖鍊� java.lang.String - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/2/2 14:59 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public String picCutCate(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer chanNo = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return ""; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - String bucketName = "pic"; - String picUrl = ""; - String bucketObject = "/capture/" + IdUtils.simpleUUID() + ".jpeg"; - fCaptureReceiveCB m_CaptureReceiveCB = new fCaptureReceiveCB(minioEndPoint, bucketName, bucketObject); - CapturePictureModule.setSnapRevCallBack(m_CaptureReceiveCB); - boolean b = CapturePictureModule.remoteCapturePicture(loginId, chanNo - 1); - if (b) { - picUrl = minioEndPoint + "/" + bucketName + bucketObject; - } - return picUrl; - - } - - /** - * @鎻忚堪 鐭椂褰曞儚 - * @鍙傛暟 [userId, channelNum, enable] - * @杩斿洖鍊� void - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/20 11:18 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public String record(CameraCmd cmd) { - try { - String url = ""; - String cameraId = cmd.getCameraId(); - Integer chanNo = cmd.getChanNo(); - String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); - boolean enable = cmd.isEnable(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return ""; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - - if (enable) { - LLong lRealHandle = new LLong(0); - if (!GlobalVariable.previewMap.containsKey(cameraId)) { - lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo - 1, path); - if (lRealHandle.longValue() <= 0) { - log.error("鍙栨祦澶辫触" + getErrorCodePrint()); - return ""; - } - log.debug("鍙栨祦鎴愬姛"); - GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue()); - } - log.debug("褰曞儚寮�濮�"); - } else { - if (GlobalVariable.previewMap.containsKey(cameraId)) { - LLong lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId)); - RealPlayModule.stopRealPlay(lRealHandle); - GlobalVariable.previewMap.remove(cameraId); - } - log.debug("褰曞儚鍋滄"); - } - return url; - } catch (Exception ex) { - log.error("褰曞儚寮傚父" + ex.getMessage()); - return ""; - } - } - - @Override - public boolean recordStart(CameraCmd cmd) { - try { - String cameraId = cmd.getCameraId(); - Integer chanNo = cmd.getChanNo(); - String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - LLong lRealHandle; - if (GlobalVariable.previewMap.containsKey(cameraId)) { - lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId)); - RealPlayModule.stopRealPlay(lRealHandle); - GlobalVariable.previewMap.remove(cameraId); - log.debug("鍋滄褰撳墠褰曞儚"); - } - lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo - 1, path); - if (lRealHandle.longValue() <= 0) { - log.error("鍙栨祦澶辫触" + getErrorCodePrint()); - } - log.debug("鍙栨祦鎴愬姛"); - GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue()); - GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName()); - //if (!netsdk.CLIENT_SaveRealData(lRealHandle, path)) { - // log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " +getErrorCodePrint()); - // return false; - //} - log.debug("褰曞儚寮�濮�"); - return true; - } catch (Exception ex) { - log.error("寮�濮嬪綍鍍忓紓甯�" + ex.getMessage()); - return false; - } - } - - @Override - public String recordStopToMinio(CameraCmd cmd) { - String url = ""; - try { - String cameraId = cmd.getCameraId(); - String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return ""; - } - LLong lRealHandle; - if (GlobalVariable.previewMap.containsKey(cameraId)) { - lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId)); - RealPlayModule.stopRealPlay(lRealHandle); - GlobalVariable.previewMap.remove(cameraId); - log.debug("鍋滄褰撳墠褰曞儚"); - } - //瀛樺叆minio - String BucketName = cmd.getRecordBucketName(); - String ObjectName = cmd.getRecordObjectName() + ".mp4"; - FileInputStream stream = new FileInputStream(path); - boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4"); - if (b) { - url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); - log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); - } - return url; - } catch (Exception ex) { - 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; - } - - /** - * 寮曞鐩爣浣嶇疆 - * 鍒樿嫃涔� - * 2023/10/17 8:27:48 - */ - @Override - public boolean guideTargetPosition(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer chanNo = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - try { - ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId); - double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()}; - double[] targetPositions = cmd.getTargetPosition(); - double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150); - int p = (int) (cameraPTZ[0] * 10); - int t = (int) (cameraPTZ[1] * 10); - int z = (int) (cameraPTZ[2]); - boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0); - if (!bool) { - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); - } - return bool; - } catch (Exception ex) { - log.error("寮曞寮傚父:" + ex.getMessage()); - return false; - } - } - - //杞嚦棰勭疆鐐� - @Override - public boolean gotoPreset(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer chanNo = cmd.getChanNo(); - Integer PresetIndex = cmd.getPresetIndex(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - try { - - boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NET_PTZ_POINT_MOVE_CONTROL, 0, PresetIndex, 0, 0); - if (!bool) { - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); - } - return bool; - } catch (Exception ex) { - log.error("杞嚦棰勭疆鐐瑰紓甯�:" + ex.getMessage()); - return false; - } - } - - @Override - //璁剧疆棰勭疆浣� - public boolean setPreset(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer chanNo = cmd.getChanNo(); - Integer PresetIndex = cmd.getPresetIndex(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - try { - - boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NET_PTZ_POINT_SET_CONTROL, 0, PresetIndex, 0, 0); - if (!bool) { - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); - } - return bool; - } catch (Exception ex) { - log.error("璁剧疆棰勭疆鐐瑰紓甯�:" + ex.getMessage()); - return false; - } - } - - //鍒囨崲鑱氱劍妯″紡 - @Override - public boolean controlFocusMode(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_VIDEO_IN_FOCUS cfg_video_in_focus = new CFG_VIDEO_IN_FOCUS(); - 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 = 0;//鑱氱劍鏋侀檺Manual - log.debug("褰撳墠涓烘墜鍔ㄨ仛鐒︽ā寮�"); - } else { - cfg_video_in_focus.stVideoInFocusUnit[i].nMode = 2;//鑷姩鑱氱劍 - cfg_video_in_focus.stVideoInFocusUnit[i].emFocusMode = 1;//鑱氱劍鏋侀檺Auto - log.debug("褰撳墠涓鸿嚜鍔ㄨ仛鐒︽ā寮�"); - } - } - cfg_video_in_focus.nChannelIndex = chanNo - 1; - boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, NetSDKLib.CFG_CMD_VIDEOIN_FOCUS, cfg_video_in_focus); - if (!bool) { - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); - } - return bool; - } catch (Exception ex) { - log.error("鍒囨崲鑱氱劍妯″紡寮傚父:" + ex.getMessage()); - return false; - } - } - - @Override - public String getFocusMode(CameraCmd cmd) { - String mode = ""; - String cameraId = cmd.getCameraId(); - Integer chanNo = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return ""; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - try { - NET_VIDEOIN_FOCUSMODE_INFO focusModeInfo = new NET_VIDEOIN_FOCUSMODE_INFO(); - int emCfgOpType = NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_VIDEOIN_FOCUSMODE; - boolean bool = ConfigModule.GetConfig(loginId, chanNo - 1, emCfgOpType, focusModeInfo); - if (!bool) { - log.error("鑾峰彇澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); - } - System.out.println("閰嶇疆绫诲瀷:" + focusModeInfo.emCfgType); // 鍏蜂綋淇℃伅锛屽弬鑰冨簱閲岀殑鏋氫妇 - System.out.println("鑱氱劍妯″紡:" + focusModeInfo.emFocusMode); - switch (focusModeInfo.emFocusMode) { - case 0: - mode = "鍏抽棴"; - break; - case 1: - mode = "杈呭姪鑱氱劍"; - break; - case 2: - mode = "鑷姩鑱氱劍"; - break; - case 3: - mode = "鍗婅嚜鍔ㄨ仛鐒�"; - break; - case 4: - mode = "鎵嬪姩鑱氱劍"; - break; - } - - } catch (Exception ex) { - log.error("鑾峰彇鑱氱劍妯″紡寮傚父:" + ex.getMessage()); - - } - return mode; - } - - //閫忛浘 - @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 { - String command = EM_NEW_CONFIG.CFG_CMD_VIDEOINDEFOG.getValue(); - //CFG_VIDEOINDEFOG_LIST cfg_videoindefog_list=new CFG_VIDEOINDEFOG_LIST(); - boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, command, 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<>(); - try { - 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));//甯х巼 - } - } catch (Exception ex) { - log.error("鍙栫爜娴佸帇缂╁弬鏁板紓甯�:" + ex.getMessage()); - } - return map; - } - - //鑾峰彇GIS淇℃伅鏁版嵁 - @Override - public Map<String, Object> getGisInfo(CameraCmd cmd) { - Map<String, Object> map = new HashMap<>(); - try { - String cameraId = cmd.getCameraId(); - Integer chanNo = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return null; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - DH_OUT_PTZ_VIEW_RANGE_STATUS dh_out_ptz_view_range_status = new DH_OUT_PTZ_VIEW_RANGE_STATUS(); - boolean b = ConfigModule.queryDevState(loginId, NET_DEVSTATE_PTZ_VIEW_RANGE, dh_out_ptz_view_range_status); - if (b) { - float nAngelH = (float) dh_out_ptz_view_range_status.nAngelH / 10; - float nAngelV = (float) dh_out_ptz_view_range_status.nAngelV / 10; - map = getPtz(cmd);//鑾峰彇ptz - map.put("fHorFieldAngle", nAngelH);// 姘村钩瑙嗗満瑙� - map.put("fVerFieldAngle", nAngelV);// 鍨傜洿瑙嗗満瑙� - } - } catch (Exception ex) { - log.error("鑾峰彇浜戝彴鍙鍩熷紓甯�" + ex.getMessage()); - } - return map; - } - - // 璁惧鏂嚎鍥炶皟: 褰撹澶囧嚭鐜版柇绾挎椂锛孲DK浼氳皟鐢ㄨ鍑芥暟 - private static class DisConnect implements NetSDKLib.fDisConnect { - public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { - log.warn("Device[" + pchDVRIP + ":" + nDVRPort + "] DisConnect!"); - } - } - - // 缃戠粶杩炴帴鎭㈠鍥炶皟:璁惧閲嶈繛鎴愬姛鍥炶皟锛屽綋宸叉柇绾跨殑璁惧閲嶈繛鎴愬姛鏃讹紝SDK浼氳皟鐢ㄨ鍑芥暟 - private static class HaveReConnect implements NetSDKLib.fHaveReConnect { - @Override - public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) { - log.warn("ReConnect Device[" + pchDVRIP + ":" + nDVRPort + "]"); - } - } - - // 鎶撳浘鎺ユ敹鍥炶皟:褰撴姄鍥炬垚鍔燂紝sdk浼氳皟鐢ㄨ鍑芥暟 - public static class fCaptureReceiveCB implements NetSDKLib.fSnapRev { - private String minioEndPoint; - private String ObjectName; - private String bucketName; - - public fCaptureReceiveCB(String minioEndPoint, String bucketName, String ObjectName) { - this.minioEndPoint = minioEndPoint; - this.bucketName = bucketName; - this.ObjectName = ObjectName; - } - - public void invoke(LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) { - if (pBuf != null && RevLen > 0) { - byte[] buf = pBuf.getByteArray(0, RevLen); - //瀛樺偍鍒癿inio - InputStream input = new ByteArrayInputStream(buf); - - try { - boolean b = MinioUtil.uploadObject(bucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG); - if (b) { - String url = minioEndPoint + "/" + bucketName + ObjectName; - log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); - } - } catch (IOException ex) { - log.error("涓婁紶鏂囦欢寮傚父锛�" + ex.getMessage()); - } - } - } - } +package com.ruoyi.utils.sdk.dhsdk.service.impl; + +import com.ruoyi.alarm.global.domain.GuidePriorityQueue; +import com.ruoyi.alarm.global.domain.GuideTask; +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.uuid.IdUtils; +import com.ruoyi.device.camera.strategy.SdkStrategy; +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.channel.domain.ArdChannel; +import com.ruoyi.device.channel.service.IArdChannelService; +import com.ruoyi.media.domain.Vtdu; +import com.ruoyi.media.service.IVtduService; +import com.ruoyi.utils.gis.GisUtil; +import com.ruoyi.utils.minio.MinioUtil; +import com.ruoyi.utils.sdk.common.GlobalVariable; +import com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib; +import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.EM_NEW_CONFIG; +import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE; +import com.ruoyi.utils.sdk.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS; +import com.ruoyi.utils.sdk.dhsdk.lib.structure.DH_OUT_PTZ_VIEW_RANGE_STATUS; +import com.ruoyi.utils.sdk.dhsdk.module.*; +import com.sun.jna.Pointer; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.*; +import java.text.DecimalFormat; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.PriorityBlockingQueue; + +import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.*; +import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.NET_DEVSTATE_PTZ_VIEW_RANGE; +import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_MOVE_CONTROL; +import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_SET_CONTROL; +import static com.ruoyi.utils.sdk.dhsdk.lib.ToolKits.getErrorCodePrint; +import static com.ruoyi.utils.sdk.dhsdk.module.LoginModule.netsdk; + +/** + * @Description: 澶у崕sdk绛栫暐 + * @ClassName: DhSdkStrategy + * @Author: 鍒樿嫃涔� + * @Date: 2023骞�11鏈�07鏃�10:51:09 + **/ +@Slf4j(topic = "dhSdk") +@Service +public class DhSdkStrategy implements SdkStrategy { + + @Resource + private IArdCamerasService ardCamerasService; + @Resource + private IArdChannelService ardChannelService; + @Resource + private IVtduService vtduService; + @Value("${minio.endpoint}") + private String minioEndPoint; + + + // 璁惧鏂嚎閫氱煡鍥炶皟 + private static DisConnect disConnect = new DisConnect(); + // 缃戠粶杩炴帴鎭㈠ + private static HaveReConnect haveReConnect = new HaveReConnect(); + + + /** + * 鐧诲綍 + * 鍒樿嫃涔� + * 2023/10/17 8:28:13 + * @return + */ + @Override + + public boolean login(ArdCameras camera) { + LoginModule.init(disConnect, haveReConnect); + NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); + NetSDKLib.LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword(), m_stDeviceInfo); + if (loginId.longValue() <= 0) { + camera.setChanNum(0); + camera.setLoginId(-1); + camera.setState("0"); + ardCamerasService.updateArdCameras(camera); + //鍒犻櫎绠$悊閫氶亾 + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + return false; + } + if (GlobalVariable.loginMap.containsKey(camera.getId())) { + GlobalVariable.loginMap.remove(camera.getId()); + } + //鍒犻櫎绠$悊閫氶亾 + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + camera.setState("1"); + camera.setChanNum(m_stDeviceInfo.byChanNum); + camera.setStartDChan(1); + camera.setLoginId((int) loginId.longValue()); + ardCamerasService.updateArdCameras(camera); + GlobalVariable.loginMap.put(camera.getId(), loginId); + + //鑾峰彇鏈�鏂伴�氶亾 + for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) { + ArdChannel channel = new ArdChannel(); + NetSDKLib.AV_CFG_ChannelName av_cfg_channelName = new NetSDKLib.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.setChanNo(i); + ardChannelService.insertArdChannel(channel); + } + //閰嶇疆鍒版祦濯掍綋 + for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) { + String name = camera.getId() + "_" + i; + String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/cam/realmonitor?channel=" + i + "&subtype=0"; + Vtdu vtdu = vtduService.selectVtduByName(name); + if (vtdu != null) { + vtduService.deleteVtduByName(name); + } + //娣诲姞鍒版祦濯掍綋 + CameraCmd cmd = new CameraCmd(camera.getId(), i); + Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); + vtdu = new Vtdu(); + if (videoCompressionCfg.get("videoEncType") != null) { + if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) { + vtdu.setIsCode("0");//榛樿涓嶈浆鐮� + } else { + vtdu.setIsCode("1");//榛樿杞爜 + } + } else { + vtdu.setIsCode("0");//榛樿涓嶈浆鐮� + } + vtdu.setRtspSource(rtspSource); + vtdu.setName(camera.getId() + "_" + i); + vtdu.setMode("1");//榛樿CPU杞В鐮� + vtdu.setCameraId(camera.getId()); + vtduService.insertVtdu(vtdu); + } + + //鍒涘缓寮曞闃熷垪 + if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { + Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); + PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); + GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); + } + return true; + } + + @Override + @Async("loginExecutor") + public void asyncLogin(ArdCameras camera){ + LoginModule.init(disConnect, haveReConnect); + NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); + NetSDKLib.LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword(), m_stDeviceInfo); + if (loginId.longValue() <= 0) { + camera.setChanNum(0); + camera.setLoginId(-1); + camera.setState("0"); + ardCamerasService.updateArdCameras(camera); + //鍒犻櫎绠$悊閫氶亾 + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + return; + } + if (GlobalVariable.loginMap.containsKey(camera.getId())) { + GlobalVariable.loginMap.remove(camera.getId()); + } + //鍒犻櫎绠$悊閫氶亾 + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + camera.setState("1"); + camera.setChanNum(m_stDeviceInfo.byChanNum); + camera.setStartDChan(1); + camera.setLoginId((int) loginId.longValue()); + ardCamerasService.updateArdCameras(camera); + GlobalVariable.loginMap.put(camera.getId(), loginId); + + //鑾峰彇鏈�鏂伴�氶亾 + for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) { + ArdChannel channel = new ArdChannel(); + NetSDKLib.AV_CFG_ChannelName av_cfg_channelName = new NetSDKLib.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.setChanNo(i); + ardChannelService.insertArdChannel(channel); + } + //閰嶇疆鍒版祦濯掍綋 + for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) { + String name = camera.getId() + "_" + i; + String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/cam/realmonitor?channel=" + i + "&subtype=0"; + Vtdu vtdu = vtduService.selectVtduByName(name); + if (vtdu != null) { + vtduService.deleteVtduByName(name); + } + //娣诲姞鍒版祦濯掍綋 + CameraCmd cmd = new CameraCmd(camera.getId(), i); + Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); + vtdu = new Vtdu(); + if (videoCompressionCfg.get("videoEncType") != null) { + if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) { + vtdu.setIsCode("0");//榛樿涓嶈浆鐮� + } else { + vtdu.setIsCode("1");//榛樿杞爜 + } + } else { + vtdu.setIsCode("0");//榛樿涓嶈浆鐮� + } + vtdu.setRtspSource(rtspSource); + vtdu.setName(camera.getId() + "_" + i); + vtdu.setMode("1");//榛樿CPU杞В鐮� + vtdu.setCameraId(camera.getId()); + vtduService.insertVtdu(vtdu); + } + + //鍒涘缓寮曞闃熷垪 + if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { + Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); + PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); + GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); + } + } + + /** + * 娉ㄩ攢 + * 鍒樿嫃涔� + * 2023/10/17 8:28:13 + * @return + */ + @Override + public boolean logout(String cameraId) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + NetSDKLib.LLong loginId = (NetSDKLib.LLong) GlobalVariable.loginMap.get(cameraId); + return LoginModule.logout(loginId); + } + + /** + * 鏄惁鍦ㄧ嚎妫�娴� + * 鍒樿嫃涔� + * 2023/10/17 8:28:13 + */ + @Override + public boolean isOnLine(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + NetSDKLib.LLong loginId = (NetSDKLib.LLong) GlobalVariable.loginMap.get(cameraId); + NetSDKLib.NET_WORKSTATE dh_ptz_location_info = new NetSDKLib.NET_WORKSTATE(); + boolean b = ConfigModule.queryDevState(loginId, NET_DEVSTATE_ONLINE, dh_ptz_location_info); + if (!b) { + return false; + } + } catch (Exception ex) { + log.error("妫�娴嬪湪绾垮紓甯革細" + ex.getMessage()); + return false; + } + return true; + } + + + /** + * 浜戝彴鎺у埗 + * 鍒樿嫃涔� + * 2023/10/17 8:28:13 + */ + @Override + public boolean pTZControl(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + boolean enable = cmd.isEnable(); + Integer chanNo = cmd.getChanNo(); + Integer speed = cmd.getSpeed(); + Integer code = cmd.getCode(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + NetSDKLib.LLong loginId = (NetSDKLib.LLong) GlobalVariable.loginMap.get(cameraId); + int dwStop; + if (enable) { + dwStop = 0;//寮�鍚� + } else { + dwStop = 1;//鍏抽棴 + } + int dwPTZCommand = -1; + switch (code) { + /*鏂瑰悜*/ + case 1: + dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP; + break; + case 2: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL; + break; + case 3: + dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP; + break; + case 4: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL; + break; + case 5: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_LOOP_CONTROL; + break; + case 6: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL; + break; + case 7: + dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN; + break; + case 8: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL; + break; + case 9: + dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN; + break; + /*鐒﹁窛*/ + case 10: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL; + break; + case 11: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL; + break; + /*鐒︾偣*/ + case 12: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL; + break; + case 13: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL; + break; + /*鍏夊湀*/ + case 14: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL; + break; + case 15: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL; + break; + case 16: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LAMP_CONTROL; + break; + } + boolean bool = PtzControlModule.ptzControl(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop); + if (!bool) { + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + } + return bool; + } + + /** + * 鑾峰彇PTZ鍊� + * 鍒樿嫃涔� + * 2023/10/17 8:28:13 + */ + @Override + public Map<String, Object> getPtz(CameraCmd cmd) { + Map<String, Object> ptzMap = new HashMap<>(); + String cameraId = cmd.getCameraId(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return null; + } + NetSDKLib.LLong loginId = (NetSDKLib.LLong) GlobalVariable.loginMap.get(cameraId); + NetSDKLib.NET_PTZ_LOCATION_INFO dh_ptz_location_info = new NetSDKLib.NET_PTZ_LOCATION_INFO(); + boolean b = ConfigModule.queryDevState(loginId, NET_DEVSTATE_PTZ_LOCATION, dh_ptz_location_info); + if (b) { + DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 + String nPTZPan = df.format((float) dh_ptz_location_info.nPTZPan / 10); + float t = (float) dh_ptz_location_info.nPTZTilt / 10 * -1; + String nPTZTilt = df.format(t < 0 ? t + 360 : t); + String nPTZZoom = df.format((float) dh_ptz_location_info.nPTZZoom); + ptzMap.put("p", nPTZPan); + ptzMap.put("t", nPTZTilt); + ptzMap.put("z", nPTZZoom); + } + return ptzMap; + } + + @Override + public Map<String, Object> getPtzScope(CameraCmd cmd) { + return null; + } + + /** + * @鎻忚堪 璁剧疆ptz淇℃伅 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� + */ + @Override + public boolean setPtz(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + Map<String, Double> ptz = cmd.getPtzMap(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + try { + int p = (int) (ptz.get("p") * 10); + int t = (int) (ptz.get("t") * 10); + t = t > 900 ? 3600 - t : t * -1; + + int z = ptz.get("z").intValue() == 0 ? 1 : ptz.get("z").intValue(); + boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0); + if (!bool) { + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + } + return bool; + } catch (Exception ex) { + log.error(ex.getMessage()); + return false; + } + } + + /** + * @鎻忚堪 璁剧疆闆舵柟浣嶈 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� + */ + @Override + public boolean setZeroPtz(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + boolean bool = NetSDKLib.NETSDK_INSTANCE.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RESETZERO, 0, 0, 0, 0); + if (!bool) { + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + } + return bool; + } + + /** + * @鎻忚堪 鎴浘 瀛樻湇鍔″櫒 + * @鍙傛暟 [cameraId, channelNum] + * @杩斿洖鍊� java.lang.String + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/2/2 14:59 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public String picCutCate(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + String bucketName = "pic"; + String picUrl = ""; + String bucketObject = "/capture/" + IdUtils.simpleUUID() + ".jpeg"; + fCaptureReceiveCB m_CaptureReceiveCB = new fCaptureReceiveCB(minioEndPoint, bucketName, bucketObject); + CapturePictureModule.setSnapRevCallBack(m_CaptureReceiveCB); + boolean b = CapturePictureModule.remoteCapturePicture(loginId, chanNo - 1); + if (b) { + picUrl = minioEndPoint + "/" + bucketName + bucketObject; + } + return picUrl; + + } + + /** + * @鎻忚堪 鐭椂褰曞儚 + * @鍙傛暟 [userId, channelNum, enable] + * @杩斿洖鍊� void + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/20 11:18 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public String record(CameraCmd cmd) { + try { + String url = ""; + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + boolean enable = cmd.isEnable(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + + if (enable) { + LLong lRealHandle = new LLong(0); + if (!GlobalVariable.previewMap.containsKey(cameraId)) { + lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo - 1, path); + if (lRealHandle.longValue() <= 0) { + log.error("鍙栨祦澶辫触" + getErrorCodePrint()); + return ""; + } + log.debug("鍙栨祦鎴愬姛"); + GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue()); + } + log.debug("褰曞儚寮�濮�"); + } else { + if (GlobalVariable.previewMap.containsKey(cameraId)) { + LLong lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId)); + RealPlayModule.stopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + } + log.debug("褰曞儚鍋滄"); + } + return url; + } catch (Exception ex) { + log.error("褰曞儚寮傚父" + ex.getMessage()); + return ""; + } + } + + @Override + public boolean recordStart(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + LLong lRealHandle; + if (GlobalVariable.previewMap.containsKey(cameraId)) { + lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId)); + RealPlayModule.stopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + log.debug("鍋滄褰撳墠褰曞儚"); + } + lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo - 1, path); + if (lRealHandle.longValue() <= 0) { + log.error("鍙栨祦澶辫触" + getErrorCodePrint()); + } + log.debug("鍙栨祦鎴愬姛"); + GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue()); + GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName()); + //if (!netsdk.CLIENT_SaveRealData(lRealHandle, path)) { + // log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " +getErrorCodePrint()); + // return false; + //} + log.debug("褰曞儚寮�濮�"); + return true; + } catch (Exception ex) { + log.error("寮�濮嬪綍鍍忓紓甯�" + ex.getMessage()); + return false; + } + } + + @Override + public String recordStopToMinio(CameraCmd cmd) { + String url = ""; + try { + String cameraId = cmd.getCameraId(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + LLong lRealHandle; + if (GlobalVariable.previewMap.containsKey(cameraId)) { + lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId)); + RealPlayModule.stopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + log.debug("鍋滄褰撳墠褰曞儚"); + } + //瀛樺叆minio + String BucketName = cmd.getRecordBucketName(); + String ObjectName = cmd.getRecordObjectName() + ".mp4"; + FileInputStream stream = new FileInputStream(path); + boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4"); + if (b) { + url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); + log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); + } + return url; + } catch (Exception ex) { + 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; + } + + @Override + public List<ArdChannel> getCameraChannelList(ArdCameras camera) { + return null; + } + + /** + * 寮曞鐩爣浣嶇疆 + * 鍒樿嫃涔� + * 2023/10/17 8:27:48 + */ + @Override + public boolean guideTargetPosition(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + try { + ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId); + double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()}; + double[] targetPositions = cmd.getTargetPosition(); + double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150); + int p = (int) (cameraPTZ[0] * 10); + int t = (int) (cameraPTZ[1] * 10); + int z = (int) (cameraPTZ[2]); + boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0); + if (!bool) { + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + } + return bool; + } catch (Exception ex) { + log.error("寮曞寮傚父:" + ex.getMessage()); + return false; + } + } + + //杞嚦棰勭疆鐐� + @Override + public boolean gotoPreset(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + Integer PresetIndex = cmd.getPresetIndex(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + try { + + boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NET_PTZ_POINT_MOVE_CONTROL, 0, PresetIndex, 0, 0); + if (!bool) { + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + } + return bool; + } catch (Exception ex) { + log.error("杞嚦棰勭疆鐐瑰紓甯�:" + ex.getMessage()); + return false; + } + } + + @Override + //璁剧疆棰勭疆浣� + public boolean setPreset(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + Integer PresetIndex = cmd.getPresetIndex(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + try { + + boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NET_PTZ_POINT_SET_CONTROL, 0, PresetIndex, 0, 0); + if (!bool) { + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + } + return bool; + } catch (Exception ex) { + log.error("璁剧疆棰勭疆鐐瑰紓甯�:" + ex.getMessage()); + return false; + } + } + + //鍒囨崲鑱氱劍妯″紡 + @Override + public boolean controlFocusMode(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_VIDEO_IN_FOCUS cfg_video_in_focus = new CFG_VIDEO_IN_FOCUS(); + 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 = 0;//鑱氱劍鏋侀檺Manual + log.debug("褰撳墠涓烘墜鍔ㄨ仛鐒︽ā寮�"); + } else { + cfg_video_in_focus.stVideoInFocusUnit[i].nMode = 2;//鑷姩鑱氱劍 + cfg_video_in_focus.stVideoInFocusUnit[i].emFocusMode = 1;//鑱氱劍鏋侀檺Auto + log.debug("褰撳墠涓鸿嚜鍔ㄨ仛鐒︽ā寮�"); + } + } + cfg_video_in_focus.nChannelIndex = chanNo - 1; + boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, NetSDKLib.CFG_CMD_VIDEOIN_FOCUS, cfg_video_in_focus); + if (!bool) { + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + } + return bool; + } catch (Exception ex) { + log.error("鍒囨崲鑱氱劍妯″紡寮傚父:" + ex.getMessage()); + return false; + } + } + + @Override + public String getFocusMode(CameraCmd cmd) { + String mode = ""; + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + try { + NET_VIDEOIN_FOCUSMODE_INFO focusModeInfo = new NET_VIDEOIN_FOCUSMODE_INFO(); + int emCfgOpType = NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_VIDEOIN_FOCUSMODE; + boolean bool = ConfigModule.GetConfig(loginId, chanNo - 1, emCfgOpType, focusModeInfo); + if (!bool) { + log.error("鑾峰彇澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + } + System.out.println("閰嶇疆绫诲瀷:" + focusModeInfo.emCfgType); // 鍏蜂綋淇℃伅锛屽弬鑰冨簱閲岀殑鏋氫妇 + System.out.println("鑱氱劍妯″紡:" + focusModeInfo.emFocusMode); + switch (focusModeInfo.emFocusMode) { + case 0: + mode = "鍏抽棴"; + break; + case 1: + mode = "杈呭姪鑱氱劍"; + break; + case 2: + mode = "鑷姩鑱氱劍"; + break; + case 3: + mode = "鍗婅嚜鍔ㄨ仛鐒�"; + break; + case 4: + mode = "鎵嬪姩鑱氱劍"; + break; + } + + } catch (Exception ex) { + log.error("鑾峰彇鑱氱劍妯″紡寮傚父:" + ex.getMessage()); + + } + return mode; + } + + @Override + public boolean controlPTHeateRpwron(CameraCmd cmd) { + return false; + } + + @Override + public boolean controlCameraDeicing(CameraCmd cmd) { + return false; + } + + @Override + public int getPTZLockInfo(CameraCmd cmd) { + return 0; + } + + @Override + public String captureJPEGPicture(CameraCmd cmd) { + return null; + } + + //閫忛浘 + @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 { + String command = EM_NEW_CONFIG.CFG_CMD_VIDEOINDEFOG.getValue(); + //CFG_VIDEOINDEFOG_LIST cfg_videoindefog_list=new CFG_VIDEOINDEFOG_LIST(); + boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, command, 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<>(); + try { + 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));//甯х巼 + } + } catch (Exception ex) { + log.error("鍙栫爜娴佸帇缂╁弬鏁板紓甯�:" + ex.getMessage()); + } + return map; + } + + //鑾峰彇GIS淇℃伅鏁版嵁 + @Override + public Map<String, Object> getGisInfo(CameraCmd cmd) { + Map<String, Object> map = new HashMap<>(); + try { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return null; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + DH_OUT_PTZ_VIEW_RANGE_STATUS dh_out_ptz_view_range_status = new DH_OUT_PTZ_VIEW_RANGE_STATUS(); + boolean b = ConfigModule.queryDevState(loginId, NET_DEVSTATE_PTZ_VIEW_RANGE, dh_out_ptz_view_range_status); + if (b) { + float nAngelH = (float) dh_out_ptz_view_range_status.nAngelH / 10; + float nAngelV = (float) dh_out_ptz_view_range_status.nAngelV / 10; + map = getPtz(cmd);//鑾峰彇ptz + map.put("fHorFieldAngle", nAngelH);// 姘村钩瑙嗗満瑙� + map.put("fVerFieldAngle", nAngelV);// 鍨傜洿瑙嗗満瑙� + } + } catch (Exception ex) { + log.error("鑾峰彇浜戝彴鍙鍩熷紓甯�" + ex.getMessage()); + } + return map; + } + + // 璁惧鏂嚎鍥炶皟: 褰撹澶囧嚭鐜版柇绾挎椂锛孲DK浼氳皟鐢ㄨ鍑芥暟 + private static class DisConnect implements NetSDKLib.fDisConnect { + public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { + log.warn("Device[" + pchDVRIP + ":" + nDVRPort + "] DisConnect!"); + } + } + + // 缃戠粶杩炴帴鎭㈠鍥炶皟:璁惧閲嶈繛鎴愬姛鍥炶皟锛屽綋宸叉柇绾跨殑璁惧閲嶈繛鎴愬姛鏃讹紝SDK浼氳皟鐢ㄨ鍑芥暟 + private static class HaveReConnect implements NetSDKLib.fHaveReConnect { + @Override + public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) { + log.warn("ReConnect Device[" + pchDVRIP + ":" + nDVRPort + "]"); + } + } + + // 鎶撳浘鎺ユ敹鍥炶皟:褰撴姄鍥炬垚鍔燂紝sdk浼氳皟鐢ㄨ鍑芥暟 + public static class fCaptureReceiveCB implements NetSDKLib.fSnapRev { + private String minioEndPoint; + private String ObjectName; + private String bucketName; + + public fCaptureReceiveCB(String minioEndPoint, String bucketName, String ObjectName) { + this.minioEndPoint = minioEndPoint; + this.bucketName = bucketName; + this.ObjectName = ObjectName; + } + + public void invoke(LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) { + if (pBuf != null && RevLen > 0) { + byte[] buf = pBuf.getByteArray(0, RevLen); + //瀛樺偍鍒癿inio + InputStream input = new ByteArrayInputStream(buf); + + try { + boolean b = MinioUtil.uploadObject(bucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG); + if (b) { + String url = minioEndPoint + "/" + bucketName + ObjectName; + log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); + } + } catch (IOException ex) { + log.error("涓婁紶鏂囦欢寮傚父锛�" + ex.getMessage()); + } + } + } + } + } \ No newline at end of file diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/controller/HikSdkController.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/controller/HikSdkController.java index 5b635c6..1701076 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/controller/HikSdkController.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/controller/HikSdkController.java @@ -8,9 +8,9 @@ import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.IArdCamerasService; -import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.utils.sdk.hiksdk.service.impl.HikSdkStrategy; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.stereotype.Controller; @@ -35,7 +35,7 @@ public class HikSdkController extends BaseController { @Resource - private IHikClientService sdk; + private HikSdkStrategy sdk; @Resource private IArdCamerasService ardCamerasService; @@ -85,7 +85,7 @@ public @ResponseBody AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return toAjax(sdk.pTZControlWithSpeed(cmd)); + return toAjax(sdk.pTZControl(cmd)); } @ApiOperation("璋冪敤棰勭疆鐐�") diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java index 232d665..5185b86 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java @@ -9,12 +9,11 @@ import com.ruoyi.device.channel.domain.ArdChannel; import com.ruoyi.device.channel.service.IArdChannelService; import com.ruoyi.utils.sdk.common.GlobalVariable; -import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; import com.ruoyi.media.domain.Vtdu; import com.ruoyi.media.service.IVtduService; +import com.ruoyi.utils.sdk.hiksdk.service.impl.HikSdkStrategy; import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; - import java.util.Comparator; import java.util.List; import java.util.concurrent.PriorityBlockingQueue; @@ -39,7 +38,7 @@ public int invoke(int lUserID, int dwResult, HCNetSDK.NET_DVR_DEVICEINFO_V30 lpDeviceinfo, Pointer pUser) { IVtduService vtduService = SpringUtils.getBean(IVtduService.class); IArdChannelService ardChannelService = SpringUtils.getBean(IArdChannelService.class); - IHikClientService hikClientService = SpringUtils.getBean(IHikClientService.class); + HikSdkStrategy hikClientService = SpringUtils.getBean(HikSdkStrategy.class); IArdCamerasService ardCamerasService = SpringUtils.getBean(IArdCamerasService.class); if (GlobalVariable.loginMap.containsKey(camera.getId())) { GlobalVariable.loginMap.remove(camera.getId()); diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikSdkStrategy.java similarity index 90% rename from ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikClientServiceImpl.java rename to ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikSdkStrategy.java index 3d09337..b3af56a 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikClientServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikSdkStrategy.java @@ -1,1693 +1,1764 @@ -package com.ruoyi.utils.sdk.hiksdk.service.impl; - -import com.ruoyi.alarm.global.domain.GuidePriorityQueue; -import com.ruoyi.alarm.global.domain.GuideTask; -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.uuid.IdUtils; -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.channel.service.IArdChannelService; -import com.ruoyi.utils.sdk.common.GlobalVariable; -import com.ruoyi.device.camera.domain.ArdCameras; -import com.ruoyi.utils.sdk.hiksdk.lib.ExceptionCallBack; -import com.ruoyi.media.domain.Vtdu; -import com.ruoyi.media.service.IVtduService; -import com.ruoyi.utils.gis.GisUtil; -import com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK; -import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; -import com.ruoyi.utils.sdk.hiksdk.lib.LoginResultCallBack; -import com.ruoyi.utils.minio.MinioUtil; -import com.sun.jna.NativeLong; -import com.sun.jna.Platform; -import com.sun.jna.Pointer; -import com.sun.jna.ptr.IntByReference; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.Base64; -import javax.annotation.Resource; -import java.io.*; -import java.math.BigDecimal; -import java.nio.ByteBuffer; -import java.text.DecimalFormat; -import java.util.*; -import java.util.concurrent.PriorityBlockingQueue; - -import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.*; - -/** - * @ClassName: hikClientServiceImpl - * @Description: 娴峰悍鎿嶄綔瀹㈡埛绔疄鐜扮被 - * @Author: Administrator - * @Date: 2023骞�01鏈�17鏃� 11:25 - * @Version: 1.2 - **/ -@Slf4j(topic = "hikSdk") -@Service -public class HikClientServiceImpl implements IHikClientService { - - @Resource - private IArdCamerasService ardCamerasService; - @Resource - private IArdChannelService ardChannelService; - @Resource - private IVtduService vtduService; - private final Object lock = new Object(); - public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; - private static FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟 - - - /** - * @鎻忚堪 娉ㄥ唽鐧诲綍 鍙敮鎸佸悓姝ョ櫥闄嗭紝涓斿畼鏂逛笉寤鸿鐩存帴鍦ㄦ鎺ュ彛涓嬪啓鑰楁椂鎿嶄綔 - * @鍙傛暟 [dvrLogin] - * @杩斿洖鍊� java.lang.Integer - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:12 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public void login(ArdCameras camera) { - try { - // 鍒濆鍖� - if (!hCNetSDK.NET_DVR_Init()) { - log.error("SDK鍒濆鍖栧け璐�"); - } - //鎵撳嵃娴峰悍sdk鏃ュ織 - if (Platform.isWindows()) { - String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; - hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); - } else { - hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); - } - String m_sDeviceIP = camera.getIp(); - String m_sUsername = camera.getUsername(); - String m_sPassword = camera.getPassword(); - short m_sPort = camera.getPort().shortValue(); - //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂� - hCNetSDK.NET_DVR_SetConnectTime(2000, 1); - hCNetSDK.NET_DVR_SetReconnect(5000, true); - //璁惧淇℃伅, 杈撳嚭鍙傛暟 - HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); - HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); - - // 娉ㄥ唽璁惧-鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑 - m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; - System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); - m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; - System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); - m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; - System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); - m_strLoginInfo.wPort = m_sPort; - m_strLoginInfo.byVerifyMode = 0; - m_strLoginInfo.byLoginMode = 0; - //鏄惁寮傛鐧诲綍锛�0- 鍚︼紝1- 鏄� windowsSDK閲屾槸true鍜宖alse - m_strLoginInfo.bUseAsynLogin = false; - m_strLoginInfo.write(); - //鍚屾鐧诲綍 - int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); - if (lUserID < 0) { - log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],閿欒鐮侊細" + hCNetSDK.NET_DVR_GetLastError()); - camera.setChanNum(0); - camera.setLoginId(-1); - camera.setState("0"); - return; - } - - log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]"); - if (fExceptionCallBack == null) { - fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟 - //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑) - if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { - log.debug("Set fExceptionCallBack function fail"); - return; - } else { - log.debug("Set fExceptionCallBack function successfully!"); - } - } - - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } - - //鍒犻櫎绠$悊閫氶亾 - ardChannelService.deleteArdChannelByDeviceId(camera.getId()); - GlobalVariable.loginMap.put(camera.getId(), lUserID); - GlobalVariable.loginCameraMap.put(lUserID, camera); - - camera.setLoginId(lUserID); - camera.setState("1"); - camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum); - camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan); - ardCamerasService.updateArdCameras(camera); - //鑾峰彇鏈�鏂伴�氶亾 - List<ArdChannel> cameraChannelList = getCameraChannelList(camera); - if (cameraChannelList.size() > 0) { - for (ArdChannel channel : cameraChannelList) { - channel.setId(IdUtils.simpleUUID()); - ardChannelService.insertArdChannel(channel); - } - //娣诲姞鍒版祦濯掍綋 - for (ArdChannel channel : cameraChannelList) { - 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) { - vtduService.deleteVtduByName(name); - } - //娣诲姞鍒版祦濯掍綋 - vtdu = new Vtdu(); - vtdu.setRtspSource(rtspSource); - vtdu.setName(camera.getId() + "_" + channel.getChanNo()); - CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo()); - Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); - if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) { - vtdu.setIsCode("0");//榛樿涓嶈浆鐮� - } else { - vtdu.setIsCode("1");//榛樿杞爜 - } - vtdu.setMode("1");//榛樿CPU杞В鐮� - vtdu.setCameraId(camera.getId()); - vtduService.insertVtdu(vtdu); - } - } - //鍒涘缓寮曞闃熷垪 - if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { - Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); - PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); - GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); - } - - } catch (Exception ex) { - log.error("娉ㄥ唽璁惧寮傚父", ex); - } - } - - /** - * @鎻忚堪 娉ㄥ唽鐧诲綍 闆嗘垚浜嶯ET_DVR_Login_V30锛屾敮鎸佸悓姝ュ拰寮傛鐧诲綍 - * @鍙傛暟 [dvrLogin] - * @杩斿洖鍊� java.lang.Integer - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:12 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public void asyncLogin(ArdCameras camera) { - // 鍒濆鍖� - if (!hCNetSDK.NET_DVR_Init()) { - log.error("SDK鍒濆鍖栧け璐�"); - } - //鎵撳嵃娴峰悍sdk鏃ュ織 - if (Platform.isWindows()) { - String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; - hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); - } else { - hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); - } - String m_sDeviceIP = camera.getIp(); - String m_sUsername = camera.getUsername(); - String m_sPassword = camera.getPassword(); - short m_sPort = camera.getPort().shortValue(); - //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂� - hCNetSDK.NET_DVR_SetConnectTime(2000, 1); - hCNetSDK.NET_DVR_SetReconnect(100000, true); - //璁惧淇℃伅, 杈撳嚭鍙傛暟 - HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); - HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); - - // 娉ㄥ唽璁惧-鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑 - m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; - System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); - m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; - System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); - m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; - System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); - m_strLoginInfo.wPort = m_sPort; - m_strLoginInfo.byVerifyMode = 0; - m_strLoginInfo.byLoginMode = 0; - //鏄惁寮傛鐧诲綍锛�0- 鍚︼紝1- 鏄� windowsSDK閲屾槸true鍜宖alse - m_strLoginInfo.bUseAsynLogin = true; - //寮傛鐧诲綍鍥炶皟 - m_strLoginInfo.cbLoginResult = new LoginResultCallBack(camera); - m_strLoginInfo.write(); - int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); - if (i < 0) { - int errorCode = hCNetSDK.NET_DVR_GetLastError(); - log.error("鐧诲綍寮傚父锛�" + errorCode); - } - - } - - - /** - * @鎻忚堪 娉ㄩ攢鐧诲綍 - * @鍙傛暟 [dvrLogin] - * @杩斿洖鍊� java.lang.Integer - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:12 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public boolean logout(String cameraId) { - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - boolean b = hCNetSDK.NET_DVR_Logout(userId); - if (b) { - GlobalVariable.loginMap.remove(cameraId); - } - return b; - } - - /** - * 鏄惁鍦ㄧ嚎 - * - * @param cmd 鐩告満鍛戒护 - */ - @Override - public boolean isOnLine(CameraCmd cmd) { - try { - String cameraId = cmd.getCameraId(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - 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()); - return false; - } - } - - /** - * @鎻忚堪 甯﹂�熷害鐨勪簯鍙版帶鍒舵搷浣� - * Code:1-宸︿笂 2-涓� 3-鍙充笂 4-宸� 5-宸¤埅 6-鍙� 7-宸︿笅 8-涓� 9-鍙充笅 10-鐒﹁窛鍙樺ぇ 11-鐒﹁窛鍙樺皬 - * 12-鐒︾偣鍓嶈皟 13-鐒︾偣鍚庤皟 14-鍏夊湀鎵╁ぇ 15-鍏夊湀缂╁皬 16-闆ㄥ埛寮�鍚� - * @鍙傛暟 [userId, channelNum, speed] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:14 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - @SdkOperate - public boolean pTZControlWithSpeed(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - boolean enable = cmd.isEnable(); - Integer channelNum = cmd.getChanNo(); - Integer speed = cmd.getSpeed(); - Integer code = cmd.getCode(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - int dwStop; - if (enable) { - dwStop = 0;//寮�鍚� - } else { - dwStop = 1;//鍏抽棴 - } - int dwPTZCommand = -1; - switch (code) { - /*鏂瑰悜*/ - case 1: - dwPTZCommand = HCNetSDK.UP_LEFT; - break; - case 2: - dwPTZCommand = HCNetSDK.TILT_UP; - break; - case 3: - dwPTZCommand = HCNetSDK.UP_RIGHT; - break; - case 4: - dwPTZCommand = HCNetSDK.PAN_LEFT; - break; - case 5: - dwPTZCommand = HCNetSDK.RUN_SEQ; - break; - case 6: - dwPTZCommand = HCNetSDK.PAN_RIGHT; - break; - case 7: - dwPTZCommand = HCNetSDK.DOWN_LEFT; - break; - case 8: - dwPTZCommand = HCNetSDK.TILT_DOWN; - break; - case 9: - dwPTZCommand = HCNetSDK.DOWN_RIGHT; - break; - /*鐒﹁窛*/ - case 10: - dwPTZCommand = HCNetSDK.ZOOM_IN; - break; - case 11: - dwPTZCommand = HCNetSDK.ZOOM_OUT; - break; - /*鐒︾偣*/ - case 12: - dwPTZCommand = HCNetSDK.FOCUS_NEAR; - break; - case 13: - dwPTZCommand = HCNetSDK.FOCUS_FAR; - break; - /*鍏夊湀*/ - case 14: - dwPTZCommand = HCNetSDK.IRIS_OPEN; - break; - case 15: - dwPTZCommand = HCNetSDK.IRIS_CLOSE; - break; - /*闆ㄥ埛*/ - case 16: - dwPTZCommand = HCNetSDK.WIPER_PWRON; - break; - } - boolean bool = hCNetSDK.NET_DVR_PTZControlWithSpeed_Other(userId, channelNum, dwPTZCommand, dwStop, speed); - if (!bool) { - int errorCode = hCNetSDK.NET_DVR_GetLastError(); - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + errorCode); - } - return bool; - } - - /** - * 璁剧疆鑱氱劍鍊� - * - * @param cmd 鐩告満鍛戒护 - */ - @Override - public boolean setFocusPos(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - Integer dwFocusPos = cmd.getDwFocusPos(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - // 鑾峰彇鍙傛暟 - 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; - struStdCfg.read(); - IntByReference lchannel = new IntByReference(channelNum); - struStdCfg.lpInBuffer = struGisInfo.getPointer(); - struStdCfg.lpCondBuffer = lchannel.getPointer(); - struStdCfg.dwCondSize = 4; - struStdCfg.dwInSize = struGisInfo.size(); - struStdCfg.write();//璁剧疆鍓嶄箣鍓嶈write() - boolean bool = hCNetSDK.NET_DVR_SetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); - if (!bool) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); - return false; - } else { - return true; - } - } - - /** - * 鑾峰彇鑱氱劍鍊� - * - * @param cmd 鐩告満鍛戒护 - */ - @Override - public int getFocusPos(CameraCmd cmd) { - int result = 0; - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return result; - } - // 鑾峰彇鍙傛暟 - 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(); - IntByReference lchannel = new IntByReference(channelNum); - struStdCfg.lpCondBuffer = lchannel.getPointer(); - struStdCfg.dwCondSize = 4; - struStdCfg.lpOutBuffer = struGisInfo.getPointer(); - struStdCfg.dwOutSize = struGisInfo.size(); - struStdCfg.write();//璁剧疆鍓嶄箣鍓嶈write() - boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); - if (!bool) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); - return result; - } else { - struGisInfo.read(); - result = struGisInfo.struPtzPosEx.dwFocus; - } - return result; - } - - /** - * 璁剧疆棰勭疆鐐� - * - * @param cmd 鐩告満鍛戒护 - */ - @Override - public boolean setPreset(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - Integer PresetIndex = cmd.getPresetIndex(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - 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(); - log.error("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); - } - return bool; - } - - /** - * 杞埌棰勭疆鐐� - * - * @param cmd 鐩告満鍛戒护 - */ - @Override - public boolean gotoPreset(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - Integer PresetIndex = cmd.getPresetIndex(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - 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(); - log.error("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); - } - return bool; - } - - /** - * @鎻忚堪 鑾峰彇閫氶亾鍘嬬缉鍙傛暟 - * @鍙傛暟 [cameraId, channelNum] - * @杩斿洖鍊� java.lang.String - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/2/3 8:36 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) { - - Map<String, Object> map = new HashMap<>(); - try { - String cameraId = cmd.getCameraId(); - Integer chanNo = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return null; - } - Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - - NET_DVR_COMPRESSIONCFG_V30 compressioncfg = new NET_DVR_COMPRESSIONCFG_V30(); - compressioncfg.write(); - Pointer pioint = compressioncfg.getPointer(); - IntByReference ibrBytesReturned = new IntByReference(0); - - boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_COMPRESSCFG_V30, chanNo, pioint, compressioncfg.size(), ibrBytesReturned); - if (bool) { - compressioncfg.read(); - //鐮佹祦绫诲瀷锛�0-瑙嗛娴侊紝1-澶嶅悎娴侊紝0xfe- 鑷姩锛堝拰婧愪竴鑷达級 - String streamType = ""; - switch (compressioncfg.struNormHighRecordPara.byStreamType) { - case 0: - streamType = "瑙嗛娴�"; - break; - case 1: - streamType = "澶嶅悎娴�"; - break; - default: - streamType = "鏈煡"; - break; - } - //瑙嗛缂栫爜绫诲瀷锛�0-绉佹湁264锛�1-鏍囧噯h264锛�2-鏍囧噯mpeg4锛�7-M-JPEG锛�8-MPEG2锛�9-SVAC锛�10-鏍囧噯h265锛�0xfe- 鑷姩锛堝拰婧愪竴鑷达級锛�0xff-鏃犳晥 - String videoEncType = ""; - switch (compressioncfg.struNormHighRecordPara.byVideoEncType) { - case 0: - videoEncType = "绉佹湁264"; - break; - case 1: - videoEncType = "鏍囧噯h264"; - break; - case 2: - videoEncType = "鏍囧噯mpeg4"; - break; - case 7: - videoEncType = "M-JPEG"; - break; - case 8: - videoEncType = "MPEG2"; - break; - case 9: - videoEncType = "SVAC"; - break; - case 10: - videoEncType = "鏍囧噯h265"; - break; - default: - videoEncType = "鏈煡"; - break; - } - //瑙嗛鐮佺巼 - String videoBitrate = ""; - switch (compressioncfg.struNormHighRecordPara.dwVideoBitrate) { - case 0: - videoBitrate = "淇濈暀"; - break; - case 1: - videoBitrate = "16(淇濈暀)"; - break; - case 2: - videoBitrate = "32"; - break; - case 3: - videoBitrate = "48"; - break; - case 4: - videoBitrate = "64"; - break; - case 5: - videoBitrate = "80"; - break; - case 6: - videoBitrate = "96"; - break; - case 7: - videoBitrate = "128"; - break; - case 8: - videoBitrate = "160"; - break; - case 9: - videoBitrate = "192"; - break; - case 10: - videoBitrate = "224"; - break; - case 11: - videoBitrate = "256"; - break; - case 12: - videoBitrate = "320"; - break; - case 13: - videoBitrate = "384"; - break; - case 14: - videoBitrate = "448"; - break; - case 15: - videoBitrate = "512"; - break; - case 16: - videoBitrate = "640"; - break; - case 17: - videoBitrate = "768"; - break; - case 18: - videoBitrate = "896"; - break; - case 19: - videoBitrate = "1024"; - break; - case 20: - videoBitrate = "1280"; - break; - case 21: - videoBitrate = "1536"; - break; - case 22: - videoBitrate = "1792"; - break; - case 23: - videoBitrate = "2048K"; - break; - case 24: - videoBitrate = "3072"; - break; - case 25: - videoBitrate = "4096"; - break; - case 26: - videoBitrate = "8192"; - break; - case 27: - videoBitrate = "16384"; - break; - default: - videoBitrate = "鍏朵粬"; - break; - } - //瑙嗛杈撳嚭鍙e垎杈ㄧ巼锛�0- 1024x768锛�1- 1280x720锛�2-1280x1024锛�3- 1680x1050锛�4- 1920x1080锛�5- 3840*2160 - String resolution = ""; - switch (compressioncfg.struNormHighRecordPara.byResolution) { - case 0: - resolution = "528*384/528*320"; - break; - case 1: - resolution = "352*288/352*240"; - break; - case 2: - resolution = "176*144/176*120"; - break; - case 3: - resolution = "704*576/704*480"; - break; - case 4: - resolution = "704*288/704*240"; - break; - case 6: - resolution = "320*240"; - break; - case 7: - resolution = "160*120"; - break; - case 16: - resolution = "640*480"; - break; - case 17: - resolution = "1600*1200"; - break; - case 18: - resolution = "800*600"; - break; - case 19: - resolution = "1280*720"; - break; - case 20: - resolution = "1280*960"; - break; - case 21: - resolution = "1600*900"; - break; - case 22: - resolution = "1360*1024"; - break; - case 23: - resolution = "1536*1536"; - break; - case 24: - resolution = "1920*1920"; - break; - case 27: - resolution = "1920*1080"; - break; - case 28: - resolution = "2560*1920"; - break; - case 29: - resolution = "1600*304"; - break; - case 30: - resolution = "2048*1536"; - break; - default: - resolution = "涓嶅湪褰撳墠鍒嗚鲸鐜囩储寮曪紝璇疯仈绯荤鐞嗗憳娣诲姞"; - break; - } - //甯х巼 - 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(); - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); - } - } catch (Exception ex) { - log.error(ex.getMessage()); - } - return map; - } - - /** - * @鎻忚堪 鑾峰彇ptz淇℃伅 - * @鍙傛暟 [userId, channelNum] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:36 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public Map<String, Object> getPtz(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return new HashMap<>(); - } - Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - - NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); - Pointer pioint = m_ptzPosCurrent.getPointer(); - IntByReference ibrBytesReturned = new IntByReference(0); - m_ptzPosCurrent.write(); - boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_PTZPOS, channelNum, pioint, m_ptzPosCurrent.size(), ibrBytesReturned); - if (bool) { - m_ptzPosCurrent.read(); - // DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 - //16杩涘埗杞琁nteger鍚庨櫎10锛屼繚鐣欏皬鏁扮偣1浣� - //瀹為檯鏄剧ず鐨凱TZ鍊兼槸鑾峰彇鍒扮殑鍗佸叚杩涘埗鍊肩殑鍗佸垎涔嬩竴锛� - //濡傝幏鍙栫殑姘村钩鍙傛暟P鐨勫�兼槸0x1750锛屽疄闄呮樉绀虹殑P鍊间负175搴︼紱 - //鑾峰彇鍒扮殑鍨傜洿鍙傛暟T鐨勫�兼槸0x0789锛屽疄闄呮樉绀虹殑T鍊间负78.9搴︼紱 - //鑾峰彇鍒扮殑鍙樺�嶅弬鏁癦鐨勫�兼槸0x1100锛屽疄闄呮樉绀虹殑Z鍊间负110鍊嶃�� - BigDecimal b = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wPanPos)) / 10); - BigDecimal c = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPos)) / 10); - BigDecimal d = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPos)) / 10); - double p = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); - double t = c.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); - double z = d.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); - //log.debug("T鍨傜洿鍙傛暟涓�: " + p + "P姘村钩鍙傛暟涓�: " + t + "Z鍙樺�嶅弬鏁颁负: " + z); - Map<String, Object> ptzMap = new HashMap<>(); - ptzMap.put("p", p); - ptzMap.put("t", t); - ptzMap.put("z", z); - return ptzMap; - } else { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); - return new HashMap<>(); - } - } - - /** - * @鎻忚堪 璁剧疆ptz淇℃伅 - * @鍙傛暟 [userId, channelNum] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:36 - * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� - */ - @Override - public boolean setPtz(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - Map<String, Double> ptz = cmd.getPtzMap(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - 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)); - m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16)); - m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16)); - m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16)); - Pointer point = m_ptzPosCurrent.getPointer(); - m_ptzPosCurrent.write(); - boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); - if (!bool) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); - } - return bool; - } catch (Exception ex) { - log.error(ex.getMessage()); - return false; - } - } - - @Override - 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); - NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); - m_ptzPosCurrent.wAction = 1; - try { - ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId); - double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()}; - double[] targetPositions = cmd.getTargetPosition(); - double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150); - String p = String.valueOf((int) (cameraPTZ[0] * 10)); - String t = String.valueOf((int) (cameraPTZ[1] * 10)); - String z = String.valueOf((int) (cameraPTZ[2] * 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)); - Pointer point = m_ptzPosCurrent.getPointer(); - m_ptzPosCurrent.write(); - boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); - if (!bool) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); - } - return bool; - } catch (Exception ex) { - log.error("寮曞寮傚父:" + ex.getMessage()); - return false; - } - } - - - /** - * @鎻忚堪 鑾峰彇ptz閿佸畾淇℃伅 - * @鍙傛暟 [userId, channelNum] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:36 - * @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾 - */ - @Override - public int getPTZLockInfo(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return -1; - } - 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); - netDvrPtzLockcfg.write(); - boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZLOCKCFG, channelNum, point, netDvrPtzLockcfg.size(), ibrBytesReturned); - if (!bool) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("鑾峰彇ptz閿佸畾淇℃伅澶辫触,璇风◢鍚庨噸璇�" + code); - return -1; - } else { - netDvrPtzLockcfg.read(); - return netDvrPtzLockcfg.byWorkMode; - } - } - - /** - * @鎻忚堪 璁剧疆闆舵柟浣嶈 - * @鍙傛暟 [userId, channelNum] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:36 - * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� - */ - @Override - @SdkOperate - public boolean setZeroPtz(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - NET_DVR_INITIALPOSITIONCTRL initialpositionctrl = new NET_DVR_INITIALPOSITIONCTRL(); - - initialpositionctrl.dwSize = initialpositionctrl.size(); - initialpositionctrl.byWorkMode = 0; - initialpositionctrl.dwChan = Short.parseShort(channelNum.toString()); - - Pointer point = initialpositionctrl.getPointer(); - initialpositionctrl.write(); - boolean bool = hCNetSDK.NET_DVR_RemoteControl(userId, NET_DVR_PTZ_INITIALPOSITIONCTRL, point, initialpositionctrl.size()); - if (!bool) { - int i = hCNetSDK.NET_DVR_GetLastError(); - log.error("閿欒鐮侊細" + i); - } - return bool; - } - - /** - * @鎻忚堪 鑾峰彇鐞冩満PTZ鍙傛暟鍙栧�艰寖鍥� - * @鍙傛暟 [cameraId, channelNum] - * @杩斿洖鍊� java.util.Map<java.lang.String, java.lang.Object> - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/2/8 10:58 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public Map<String, Object> getPtzScope(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return new HashMap<>(); - } - 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); - m_ptzPosCurrent.write(); - boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZSCOPE, channelNum, point, m_ptzPosCurrent.size(), ibrBytesReturned); - if (!bool) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); - return new HashMap<>(); - } else { - m_ptzPosCurrent.read(); - DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 - - String wPanPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wPanPosMax)) / 10); - String wPanPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPosMax)) / 10); - String wTiltPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPosMax)) / 10); - String wTiltPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPosMin)) / 10); - String wZoomPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPosMax)) / 10); - String wZoomPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPosMin)) / 10); - Map<String, Object> ptzScopeMap = new HashMap<>(); - ptzScopeMap.put("pMax", wPanPosMax); - ptzScopeMap.put("pMin", wPanPosMin); - ptzScopeMap.put("tMax", wTiltPosMax); - ptzScopeMap.put("tMin", wTiltPosMin); - ptzScopeMap.put("zMax", wZoomPosMax); - ptzScopeMap.put("zMin", wZoomPosMin); - return ptzScopeMap; - } - - } - - /** - * @鎻忚堪 閫忛浘寮�鍏� - * @鍙傛暟 [userId, channelNum, enable] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/18 13:07 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public boolean controlDefogcfg(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - boolean enable = cmd.isEnable(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - 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); - boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size(), ibrBytesReturned); - if (!b_GetCameraParam) { - log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); - } - struCameraParam.read(); - log.debug("鏄惁寮�鍚�忛浘锛�" + struCameraParam.struDefogCfg.byMode); - - NET_DVR_DEFOGCFG defogcfg = new NET_DVR_DEFOGCFG(); - if (enable) { - defogcfg.byMode = 2;//0-涓嶅惎鐢� 1-鑷姩妯″紡 2-甯稿紑妯″紡 - defogcfg.byLevel = 100;//鍙栧�艰寖鍥�0-100 - } else { - defogcfg.byMode = 0;//0-涓嶅惎鐢� 1-鑷姩妯″紡 2-甯稿紑妯″紡 - } - struCameraParam.struDefogCfg = defogcfg; - struCameraParam.write(); - boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size()); - if (!bool) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆閫忛浘澶辫触,璇风◢鍚庨噸璇�" + code); - } - log.debug("璁剧疆閫忛浘鎴愬姛"); - return bool; - } - - /** - * @鎻忚堪 绾㈠寮�鍏� - * @鍙傛暟 [userId, channelNum, enable] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/18 13:07 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public boolean controlInfrarecfg(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - boolean enable = cmd.isEnable(); - Integer chanNo = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - 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); - boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, chanNo, point, struDayNigh.size(), ibrBytesReturned); - if (!b_GetCameraParam) { - log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); - } - struDayNigh.read(); - String current = struDayNigh.struDayNight.byDayNightFilterType == 1 ? "寮�鍚�" : "鍏抽棴"; - log.debug("褰撳墠鐘舵��:" + current); - - NET_DVR_DAYNIGHT daynight = new NET_DVR_DAYNIGHT(); - if (enable) { - daynight.byDayNightFilterType = 1;//澶滄櫄 - } else { - daynight.byDayNightFilterType = 0;//鐧藉ぉ - } - daynight.bySwitchScheduleEnabled = 1; - daynight.byDayNightFilterTime = 60; - struDayNigh.struDayNight = daynight; - struDayNigh.write(); - boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, chanNo, point, struDayNigh.size()); - if (!bool) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆澶滆澶辫触,璇风◢鍚庨噸璇�" + code); - } - else { - log.debug("璁剧疆澶滆鎴愬姛"); - } - - return bool; - } - - /** - * @鎻忚堪 鑱氱劍寮�鍏� - * @鍙傛暟 [userId, channelNum, enable] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/18 13:07 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public boolean controlFocusMode(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - boolean enable = cmd.isEnable(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - 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); - boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned); - if (!b_GetCameraParam) { - log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); - } - struFocusMode.read(); - log.debug("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); - - if (enable) { - struFocusMode.byFocusMode = 1;//鎵嬪姩鑱氱劍 - } else { - struFocusMode.byAutoFocusMode = 1; - struFocusMode.byFocusMode = 2;//鑷姩鑱氱劍 - } - struFocusMode.byFocusDefinitionDisplay = 1; - struFocusMode.byFocusSpeedLevel = 3; - struFocusMode.write(); - boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_FOCUSMODECFG, channelNum, point, struFocusMode.size()); - if (!bool) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆鑱氱劍妯″紡澶辫触,璇风◢鍚庨噸璇�" + code); - } - log.debug("璁剧疆鑱氱劍妯″紡鎴愬姛"); - return bool; - } - - /** - * @鎻忚堪 鑾峰彇鑱氱劍妯″紡 - * @鍙傛暟 [userId, channelNum] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/18 13:07 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - public String getFocusMode(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return ""; - } - 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); - boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned); - if (!b_GetCameraParam) { - log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); - } - struFocusMode.read(); - log.debug("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); - return String.valueOf(struFocusMode.byFocusMode); - } - - /** - * @鎻忚堪 浜戝彴鍔犵儹寮�鍏� - * @鍙傛暟 [userId, channelNum, enable] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/18 13:07 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public boolean controlPTHeateRpwron(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - boolean enable = cmd.isEnable(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - int dwStop; - if (enable) { - dwStop = 0;//寮�鍚� - } else { - dwStop = 1;//鍏抽棴 - } - boolean bool = hCNetSDK.NET_DVR_PTZControl_Other(userId, channelNum, HEATER_PWRON, dwStop); - if (!bool) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆浜戝彴鍔犵儹澶辫触,璇风◢鍚庨噸璇�" + code); - } - log.debug("璁剧疆浜戝彴鍔犵儹鎴愬姛"); - return bool; - } - - /** - * @鎻忚堪 闀滃ご鍔犵儹寮�鍏� - * @鍙傛暟 [userId, channelNum, enable] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/18 13:07 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public boolean controlCameraDeicing(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - boolean enable = cmd.isEnable(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - 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); - boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_DEVSERVER_CFG, channelNum, point, struDeicing.size(), ibrBytesReturned); - if (!b_GetCameraParam) { - log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); - } - struDeicing.read(); - log.debug("鏄惁寮�鍚櫎鍐帮細" + struDeicing.byEnableDeicing); - - if (enable) { - struDeicing.byEnableDeicing = 1;//寮�鍚� - } else { - struDeicing.byEnableDeicing = 0;//鍏抽棴 - } - struDeicing.write(); - boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_DEVSERVER_CFG, channelNum, point, struDeicing.size()); - if (!bool) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆闀滃ご闄ゅ啺澶辫触,璇风◢鍚庨噸璇�" + code); - } - log.debug("璁剧疆闀滃ご闄ゅ啺鎴愬姛"); - return bool; - } - - /** - * 鎴浘 杩旂粰鍓嶇 - * - * @param cmd 鐩告満鍛戒护 - */ - public String captureJPEGPicture(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return ""; - } - 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鍊硷紝鍒ゆ柇鏄惁鑾峰彇璁惧鑳藉姏 - log.error("鎶撳浘澶辫触锛岃绋嶅悗閲嶈瘯"); - } - //鍥剧墖璐ㄩ噺 - NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA(); - //璁剧疆鍥剧墖鍒嗚鲸鐜� - jpeg.wPicSize = 0; - //璁剧疆鍥剧墖璐ㄩ噺 - jpeg.wPicQuality = 0; - IntByReference a = new IntByReference(); - //璁剧疆鍥剧墖澶у皬 - ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024); - // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓� - boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); - log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); - - Base64.Encoder decoder = Base64.getEncoder(); - // BASE64Encoder encoder = new BASE64Encoder(); - String png_base64 = decoder.encodeToString(jpegBuffer.array());//杞崲鎴恇ase64涓� - png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//鍒犻櫎 \r\n - log.debug("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------"); - return png_base64; - } - - /** - * @鎻忚堪 鎴浘 瀛樻湇鍔″櫒 - * @鍙傛暟 [cameraId, channelNum] - * @杩斿洖鍊� java.lang.String - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/2/2 14:59 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public String picCutCate(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return ""; - } - Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - //鍥剧墖淇℃伅 - NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA(); - //璁剧疆鍥剧墖鍒嗚鲸鐜� - //鍥剧墖灏哄锛�0-CIF(352*288/352*240)锛�1-QCIF(176*144/176*120)锛�2-4CIF(704*576/704*480)鎴朌1(720*576/720*486)锛�3-UXGA(1600*1200)锛� - // 4-SVGA(800*600)锛�5-HD720P(1280*720)锛�6-VGA(640*480)锛�7-XVGA(1280*960)锛�8-HD900P(1600*900)锛�9-HD1080P(1920*1080)锛�10-2560*1920锛� - // 11-1600*304锛�12-2048*1536锛�13-2448*2048锛�14-2448*1200锛�15-2448*800锛�16-XGA(1024*768)锛�17-SXGA(1280*1024)锛�18-WD1(960*576/960*480), - // 19-1080I(1920*1080)锛�20-576*576锛�21-1536*1536锛�22-1920*1920锛�23-320*240锛�24-720*720锛�25-1024*768锛�26-1280*1280锛�27-1600*600锛� - // 28-2048*768锛�29-160*120锛�75-336*256锛�78-384*256锛�79-384*216锛�80-320*256锛�82-320*192锛�83-512*384锛�127-480*272锛�128-512*272锛� 161-288*320锛� - // 162-144*176锛�163-480*640锛�164-240*320锛�165-120*160锛�166-576*720锛�167-720*1280锛�168-576*960锛�180-180*240, 181-360*480, 182-540*720, - // 183-720*960, 184-960*1280, 185-1080*1440, 500-384*288, 0xff-Auto(浣跨敤褰撳墠鐮佹祦鍒嗚鲸鐜�) - jpeg.wPicSize = 0; - //璁剧疆鍥剧墖璐ㄩ噺锛�0-鏈�濂斤紝1-杈冨ソ锛�2-涓�鑸� - jpeg.wPicQuality = 0; - IntByReference a = new IntByReference(); - //璁剧疆鍥剧墖澶у皬 - ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024); - // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓� - log.debug("-----------杩欓噷寮�濮嬪皝瑁� NET_DVR_CaptureJPEGPicture_NEW---------"); - boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); - log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); - if (is) { - log.debug("hksdk(鎶撳浘)-缁撴灉鐘舵�佸��(0琛ㄧず鎴愬姛):" + hCNetSDK.NET_DVR_GetLastError()); - byte[] array = jpegBuffer.array(); - //瀛樺偍鍒癿inio - String BucketName = "pic"; - String ObjectName = "capture/" + IdUtils.simpleUUID() + ".jpeg"; - InputStream input = new ByteArrayInputStream(array); - String url = ""; - try { - boolean b = MinioUtil.uploadObject(BucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG); - if (b) { - url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); - log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); - } - } catch (IOException ex) { - log.error("涓婁紶鏂囦欢寮傚父锛�" + ex.getMessage()); - } - return url; - } else { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("鎶撳浘澶辫触,璇风◢鍚庨噸璇�" + code); - return ""; - } - } - - /** - * @鎻忚堪 鐭椂褰曞儚 - * @鍙傛暟 [userId, channelNum, enable] - * @杩斿洖鍊� void - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/20 11:18 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public String record(CameraCmd cmd) { - try { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); - boolean enable = cmd.isEnable(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return ""; - } - Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - //寮哄埗I甯х粨鏋勪綋瀵硅薄 - HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� - netDvrIFrame.read(); - netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 - netDvrIFrame.byStreamType = 0; - netDvrIFrame.dwSize = netDvrIFrame.size(); - netDvrIFrame.write(); - if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { - log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); - } - //棰勮鍙傛暟 - NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); - previewinfo.read(); - previewinfo.lChannel = channelNum; - previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� - previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ - previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� - previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 - previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 - previewinfo.write(); - String url = ""; - if (enable) { - if (!GlobalVariable.previewMap.containsKey(cameraId)) { - int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); - if (lRealHandle == -1) { - log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); - return ""; - } - log.debug("鍙栨祦鎴愬姛"); - GlobalVariable.previewMap.put(cameraId, lRealHandle); - } - if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { - log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); - return ""; - } - log.debug("褰曞儚寮�濮�"); - } else { - if (GlobalVariable.previewMap.containsKey(cameraId)) { - Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); - hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); - GlobalVariable.previewMap.remove(cameraId); - } - log.debug("褰曞儚鍋滄"); - //瀛樺叆minio - String BucketName = "record"; - String ObjectName = IdUtils.simpleUUID() + ".mp4"; - FileInputStream stream = new FileInputStream(path); - boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4"); - if (b) { - url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); - log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); - } - } - return url; - } catch (Exception ex) { - log.error("褰曞儚寮傚父" + ex.getMessage()); - return ""; - } - } - - @Override - public boolean recordStart(CameraCmd cmd) { - try { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - //寮哄埗I甯х粨鏋勪綋瀵硅薄 - HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� - netDvrIFrame.read(); - netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 - netDvrIFrame.byStreamType = 0; - netDvrIFrame.dwSize = netDvrIFrame.size(); - netDvrIFrame.write(); - if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { - log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); - } - //棰勮鍙傛暟 - NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); - previewinfo.read(); - previewinfo.lChannel = channelNum; - previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� - previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ - previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� - previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 - previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 - previewinfo.write(); - if (GlobalVariable.previewMap.containsKey(cameraId)) { - Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); - hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); - GlobalVariable.previewMap.remove(cameraId); - log.debug("鍋滄褰撳墠褰曞儚"); - } - int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); - if (lRealHandle == -1) { - log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); - return false; - } - log.debug("鍙栨祦鎴愬姛"); - GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName()); - GlobalVariable.previewMap.put(cameraId, lRealHandle); - if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { - log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); - return false; - } - log.debug("褰曞儚寮�濮�"); - return true; - } catch (Exception ex) { - log.error("寮�濮嬪綍鍍忓紓甯�" + ex.getMessage()); - return false; - } - } - - @Override - public String recordStopToMinio(CameraCmd cmd) { - String url = ""; - try { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return ""; - } - Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - //region 寮哄埗I甯� - HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� - netDvrIFrame.read(); - netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 - netDvrIFrame.byStreamType = 0; - netDvrIFrame.dwSize = netDvrIFrame.size(); - netDvrIFrame.write(); - if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { - log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); - } - //endregion - //region 棰勮鍙傛暟 - NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); - previewinfo.read(); - previewinfo.lChannel = channelNum; - previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� - previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ - previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� - previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 - previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 - previewinfo.write(); - //endregion - if (GlobalVariable.previewMap.containsKey(cameraId)) { - Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); - hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); - GlobalVariable.previewMap.remove(cameraId); - } - log.debug("褰曞儚鍋滄"); - //瀛樺叆minio - String BucketName = cmd.getRecordBucketName(); - String ObjectName = cmd.getRecordObjectName() + ".mp4"; - FileInputStream stream = new FileInputStream(path); - boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4"); - if (b) { - url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); - log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); - } - return url; - } catch (Exception ex) { - log.error("褰曞儚寮傚父" + ex.getMessage()); - return ""; - } - } - - @Override - public boolean recordStopNotToMinio(CameraCmd cmd) { - boolean result = false; - try { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - //寮哄埗I甯х粨鏋勪綋瀵硅薄 - HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� - netDvrIFrame.read(); - netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 - netDvrIFrame.byStreamType = 0; - netDvrIFrame.dwSize = netDvrIFrame.size(); - netDvrIFrame.write(); - if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { - log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); - } - //棰勮鍙傛暟 - NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); - previewinfo.read(); - previewinfo.lChannel = channelNum; - previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� - previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ - previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� - previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 - previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 - previewinfo.write(); - if (GlobalVariable.previewMap.containsKey(cameraId)) { - Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); - hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); - GlobalVariable.previewMap.remove(cameraId); - } - log.debug("褰曞儚鍋滄"); - result = true; - } catch (Exception ex) { - log.error("褰曞儚鍋滄寮傚父" + ex.getMessage()); - result = false; - } - return result; - } - - //鑾峰彇IP閫氶亾 - @Override - public List<ArdChannel> getCameraChannelList(ArdCameras camera) { - /*鑾峰彇閫氶亾*/ - List<ArdChannel> channelList = new ArrayList<>(); - try { - Integer chanNum = camera.getChanNum(); - Integer startDChan = camera.getStartDChan(); - if (chanNum > 0) { - // 鑾峰彇閫氶亾鍙� - for (int iChannum = 0; iChannum < chanNum; iChannum++) { - ArdChannel ardChannel = new ArdChannel(); - int channum = iChannum + startDChan + 1; - HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40(); - strPicCfg.dwSize = strPicCfg.size(); - strPicCfg.write(); - Pointer pStrPicCfg = strPicCfg.getPointer(); - NativeLong lChannel = new NativeLong(channum); - IntByReference pInt = new IntByReference(0); - boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), - pStrPicCfg, strPicCfg.size(), pInt); - if (b_GetPicCfg) { - strPicCfg.read(); - String channelName = new String(strPicCfg.sChanName, "GBK").trim(); - ardChannel.setName(channelName); - } - ardChannel.setDeviceId(camera.getId()); - ardChannel.setChanNo(iChannum + 1); - channelList.add(ardChannel); - } - } - } catch (Exception ex) { - log.error("鑾峰彇鐩告満閫氶亾寮傚父:" + ex.getMessage()); - } - return channelList; - } - - /** - * @鎻忚堪 鑾峰彇GIS淇℃伅鏁版嵁 - * @鍙傛暟 [userId, channelNum] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:36 - * @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾 - */ - @Override - public Map<String, Object> getGisInfo(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return new HashMap<>(); - } - // 鑾峰彇鍙傛暟 - 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(); - IntByReference lchannel = new IntByReference(channelNum); - struStdCfg.lpCondBuffer = lchannel.getPointer(); - struStdCfg.dwCondSize = 4; - struStdCfg.lpOutBuffer = struGisInfo.getPointer(); - struStdCfg.dwOutSize = struGisInfo.size(); - struStdCfg.write();//璁剧疆鍓嶄箣鍓嶈write() - boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); - if (!bool) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); - return new HashMap<>(); - } else { - struGisInfo.read(); - Map<String, Object> map = new HashMap<>(); - map.put("p", struGisInfo.struPtzPos.fPanPos); - map.put("t", struGisInfo.struPtzPos.fTiltPos < 0 ? struGisInfo.struPtzPos.fTiltPos + 360 : struGisInfo.struPtzPos.fTiltPos); - map.put("z", struGisInfo.struPtzPos.fZoomPos); - map.put("fHorFieldAngle", struGisInfo.fHorizontalValue);// 姘村钩瑙嗗満瑙� - map.put("fVerFieldAngle", struGisInfo.fVerticalValue);// 鍨傜洿瑙嗗満瑙� - return map; - } - } -} \ No newline at end of file +package com.ruoyi.utils.sdk.hiksdk.service.impl; + +import com.ruoyi.alarm.global.domain.GuidePriorityQueue; +import com.ruoyi.alarm.global.domain.GuideTask; +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.uuid.IdUtils; +import com.ruoyi.device.camera.service.IArdCamerasService; +import com.ruoyi.device.camera.strategy.SdkStrategy; +import com.ruoyi.device.camera.domain.ArdCameras; +import com.ruoyi.device.camera.domain.CameraCmd; +import com.ruoyi.device.channel.domain.ArdChannel; +import com.ruoyi.device.channel.service.IArdChannelService; +import com.ruoyi.media.domain.Vtdu; +import com.ruoyi.media.service.IVtduService; +import com.ruoyi.utils.gis.GisUtil; +import com.ruoyi.utils.minio.MinioUtil; +import com.ruoyi.utils.sdk.common.GlobalVariable; +import com.ruoyi.utils.sdk.hiksdk.lib.ExceptionCallBack; +import com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK; +import com.sun.jna.NativeLong; +import com.sun.jna.Platform; +import com.sun.jna.Pointer; +import com.sun.jna.ptr.IntByReference; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.*; +import java.math.BigDecimal; +import java.nio.ByteBuffer; +import java.text.DecimalFormat; +import java.util.*; +import java.util.concurrent.PriorityBlockingQueue; + +import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.*; +import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.NET_DVR_GET_GISINFO; + +/** + * @Description: 娴峰悍sdk绛栫暐 + * @ClassName: DhSdkStrategy + * @Author: 鍒樿嫃涔� + * @Date: 2023骞�11鏈�07鏃�10:51:09 + **/ +@Service +@Slf4j(topic = "hikSdk") +public class HikSdkStrategy implements SdkStrategy { + @Resource + private IArdCamerasService ardCamerasService; + @Resource + private IArdChannelService ardChannelService; + @Resource + private IVtduService vtduService; + + public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; + private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟 + + /** + * @鎻忚堪 娉ㄥ唽鐧诲綍 鍙敮鎸佸悓姝ョ櫥闄嗭紝涓斿畼鏂逛笉寤鸿鐩存帴鍦ㄦ鎺ュ彛涓嬪啓鑰楁椂鎿嶄綔 + * @鍙傛暟 [dvrLogin] + * @杩斿洖鍊� java.lang.Integer + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:12 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public boolean login(ArdCameras camera) { + try { + // 鍒濆鍖� + if (!hCNetSDK.NET_DVR_Init()) { + log.error("SDK鍒濆鍖栧け璐�"); + } + //鎵撳嵃娴峰悍sdk鏃ュ織 + if (Platform.isWindows()) { + String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; + hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); + } else { + hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); + } + String m_sDeviceIP = camera.getIp(); + String m_sUsername = camera.getUsername(); + String m_sPassword = camera.getPassword(); + short m_sPort = camera.getPort().shortValue(); + //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂� + hCNetSDK.NET_DVR_SetConnectTime(2000, 1); + hCNetSDK.NET_DVR_SetReconnect(5000, true); + //璁惧淇℃伅, 杈撳嚭鍙傛暟 + HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); + HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); + + // 娉ㄥ唽璁惧-鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑 + m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; + System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); + m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; + System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); + m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; + System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); + m_strLoginInfo.wPort = m_sPort; + m_strLoginInfo.byVerifyMode = 0; + m_strLoginInfo.byLoginMode = 0; + //鏄惁寮傛鐧诲綍锛�0- 鍚︼紝1- 鏄� windowsSDK閲屾槸true鍜宖alse + m_strLoginInfo.bUseAsynLogin = false; + m_strLoginInfo.write(); + //鍚屾鐧诲綍 + int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); + if (lUserID < 0) { + log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],閿欒鐮侊細" + hCNetSDK.NET_DVR_GetLastError()); + camera.setChanNum(0); + camera.setLoginId(-1); + camera.setState("0"); + //鍒犻櫎绠$悊閫氶亾 + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + ardCamerasService.updateArdCameras(camera); + return false; + } + + log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]"); + if (fExceptionCallBack == null) { + fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟 + //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑) + if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { + log.debug("Set fExceptionCallBack function fail"); + return false; + } else { + log.debug("Set fExceptionCallBack function successfully!"); + } + } + + if (GlobalVariable.loginMap.containsKey(camera.getId())) { + GlobalVariable.loginMap.remove(camera.getId()); + } + + //鍒犻櫎绠$悊閫氶亾 + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + GlobalVariable.loginMap.put(camera.getId(), lUserID); + GlobalVariable.loginCameraMap.put(lUserID, camera); + + camera.setLoginId(lUserID); + camera.setState("1"); + camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum); + camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan); + ardCamerasService.updateArdCameras(camera); + //鑾峰彇鏈�鏂伴�氶亾 + List<ArdChannel> cameraChannelList = getCameraChannelList(camera); + if (cameraChannelList.size() > 0) { + for (ArdChannel channel : cameraChannelList) { + channel.setId(IdUtils.simpleUUID()); + ardChannelService.insertArdChannel(channel); + } + //娣诲姞鍒版祦濯掍綋 + for (ArdChannel channel : cameraChannelList) { + 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) { + vtduService.deleteVtduByName(name); + } + //娣诲姞鍒版祦濯掍綋 + vtdu = new Vtdu(); + vtdu.setRtspSource(rtspSource); + vtdu.setName(camera.getId() + "_" + channel.getChanNo()); + CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo()); + Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); + if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) { + vtdu.setIsCode("0");//榛樿涓嶈浆鐮� + } else { + vtdu.setIsCode("1");//榛樿杞爜 + } + vtdu.setMode("1");//榛樿CPU杞В鐮� + vtdu.setCameraId(camera.getId()); + vtduService.insertVtdu(vtdu); + } + } + //鍒涘缓寮曞闃熷垪 + if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { + Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); + PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); + GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); + } + + } catch (Exception ex) { + log.error("娉ㄥ唽璁惧寮傚父", ex); + } + return true; + } + + /** + * @鎻忚堪 娉ㄥ唽鐧诲綍 闆嗘垚浜嶯ET_DVR_Login_V30锛屾敮鎸佸悓姝ュ拰寮傛鐧诲綍 + * @鍙傛暟 [dvrLogin] + * @杩斿洖鍊� java.lang.Integer + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:12 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + @Async("loginExecutor") + public void asyncLogin(ArdCameras camera) { + try { + // 鍒濆鍖� + if (!hCNetSDK.NET_DVR_Init()) { + log.error("SDK鍒濆鍖栧け璐�"); + } + //鎵撳嵃娴峰悍sdk鏃ュ織 + if (Platform.isWindows()) { + String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; + hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); + } else { + hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); + } + String m_sDeviceIP = camera.getIp(); + String m_sUsername = camera.getUsername(); + String m_sPassword = camera.getPassword(); + short m_sPort = camera.getPort().shortValue(); + //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂� + hCNetSDK.NET_DVR_SetConnectTime(2000, 1); + hCNetSDK.NET_DVR_SetReconnect(5000, true); + //璁惧淇℃伅, 杈撳嚭鍙傛暟 + HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); + HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); + + // 娉ㄥ唽璁惧-鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑 + m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; + System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); + m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; + System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); + m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; + System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); + m_strLoginInfo.wPort = m_sPort; + m_strLoginInfo.byVerifyMode = 0; + m_strLoginInfo.byLoginMode = 0; + //鏄惁寮傛鐧诲綍锛�0- 鍚︼紝1- 鏄� windowsSDK閲屾槸true鍜宖alse + m_strLoginInfo.bUseAsynLogin = false; + m_strLoginInfo.write(); + //鍚屾鐧诲綍 + int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); + if (lUserID < 0) { + log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],閿欒鐮侊細" + hCNetSDK.NET_DVR_GetLastError()); + camera.setChanNum(0); + camera.setLoginId(-1); + camera.setState("0"); + //鍒犻櫎绠$悊閫氶亾 + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + ardCamerasService.updateArdCameras(camera); + return ; + } + + log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]"); + if (fExceptionCallBack == null) { + fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟 + //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑) + if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { + log.debug("Set fExceptionCallBack function fail"); + return ; + } else { + log.debug("Set fExceptionCallBack function successfully!"); + } + } + + if (GlobalVariable.loginMap.containsKey(camera.getId())) { + GlobalVariable.loginMap.remove(camera.getId()); + } + + //鍒犻櫎绠$悊閫氶亾 + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + GlobalVariable.loginMap.put(camera.getId(), lUserID); + GlobalVariable.loginCameraMap.put(lUserID, camera); + + camera.setLoginId(lUserID); + camera.setState("1"); + camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum); + camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan); + ardCamerasService.updateArdCameras(camera); + //鑾峰彇鏈�鏂伴�氶亾 + List<ArdChannel> cameraChannelList = getCameraChannelList(camera); + if (cameraChannelList.size() > 0) { + for (ArdChannel channel : cameraChannelList) { + channel.setId(IdUtils.simpleUUID()); + ardChannelService.insertArdChannel(channel); + } + //娣诲姞鍒版祦濯掍綋 + for (ArdChannel channel : cameraChannelList) { + 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) { + vtduService.deleteVtduByName(name); + } + //娣诲姞鍒版祦濯掍綋 + vtdu = new Vtdu(); + vtdu.setRtspSource(rtspSource); + vtdu.setName(camera.getId() + "_" + channel.getChanNo()); + CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo()); + Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); + if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) { + vtdu.setIsCode("0");//榛樿涓嶈浆鐮� + } else { + vtdu.setIsCode("1");//榛樿杞爜 + } + vtdu.setMode("1");//榛樿CPU杞В鐮� + vtdu.setCameraId(camera.getId()); + vtduService.insertVtdu(vtdu); + } + } + //鍒涘缓寮曞闃熷垪 + if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { + Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); + PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); + GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); + } + + } catch (Exception ex) { + log.error("娉ㄥ唽璁惧寮傚父", ex); + } + } + + /** + * @鎻忚堪 娉ㄩ攢鐧诲綍 + * @鍙傛暟 [dvrLogin] + * @杩斿洖鍊� java.lang.Integer + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:12 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public boolean logout(String cameraId) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + boolean b = hCNetSDK.NET_DVR_Logout(userId); + if (b) { + GlobalVariable.loginMap.remove(cameraId); + } + return b; + } + + /** + * 鏄惁鍦ㄧ嚎 + * + * @param cmd 鐩告満鍛戒护 + */ + @Override + public boolean isOnLine(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + 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()); + return false; + } + } + + /** + * @鎻忚堪 甯﹂�熷害鐨勪簯鍙版帶鍒舵搷浣� + * Code:1-宸︿笂 2-涓� 3-鍙充笂 4-宸� 5-宸¤埅 6-鍙� 7-宸︿笅 8-涓� 9-鍙充笅 10-鐒﹁窛鍙樺ぇ 11-鐒﹁窛鍙樺皬 + * 12-鐒︾偣鍓嶈皟 13-鐒︾偣鍚庤皟 14-鍏夊湀鎵╁ぇ 15-鍏夊湀缂╁皬 16-闆ㄥ埛寮�鍚� + * @鍙傛暟 [userId, channelNum, speed] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:14 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public boolean pTZControl(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + boolean enable = cmd.isEnable(); + Integer channelNum = cmd.getChanNo(); + Integer speed = cmd.getSpeed(); + Integer code = cmd.getCode(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + int dwStop; + if (enable) { + dwStop = 0;//寮�鍚� + } else { + dwStop = 1;//鍏抽棴 + } + int dwPTZCommand = -1; + switch (code) { + /*鏂瑰悜*/ + case 1: + dwPTZCommand = HCNetSDK.UP_LEFT; + break; + case 2: + dwPTZCommand = HCNetSDK.TILT_UP; + break; + case 3: + dwPTZCommand = HCNetSDK.UP_RIGHT; + break; + case 4: + dwPTZCommand = HCNetSDK.PAN_LEFT; + break; + case 5: + dwPTZCommand = HCNetSDK.RUN_SEQ; + break; + case 6: + dwPTZCommand = HCNetSDK.PAN_RIGHT; + break; + case 7: + dwPTZCommand = HCNetSDK.DOWN_LEFT; + break; + case 8: + dwPTZCommand = HCNetSDK.TILT_DOWN; + break; + case 9: + dwPTZCommand = HCNetSDK.DOWN_RIGHT; + break; + /*鐒﹁窛*/ + case 10: + dwPTZCommand = HCNetSDK.ZOOM_IN; + break; + case 11: + dwPTZCommand = HCNetSDK.ZOOM_OUT; + break; + /*鐒︾偣*/ + case 12: + dwPTZCommand = HCNetSDK.FOCUS_NEAR; + break; + case 13: + dwPTZCommand = HCNetSDK.FOCUS_FAR; + break; + /*鍏夊湀*/ + case 14: + dwPTZCommand = HCNetSDK.IRIS_OPEN; + break; + case 15: + dwPTZCommand = HCNetSDK.IRIS_CLOSE; + break; + /*闆ㄥ埛*/ + case 16: + dwPTZCommand = HCNetSDK.WIPER_PWRON; + break; + } + boolean bool = hCNetSDK.NET_DVR_PTZControlWithSpeed_Other(userId, channelNum, dwPTZCommand, dwStop, speed); + if (!bool) { + int errorCode = hCNetSDK.NET_DVR_GetLastError(); + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + errorCode); + } + return bool; + } + + /** + * 璁剧疆鑱氱劍鍊� + * + * @param cmd 鐩告満鍛戒护 + */ + @Override + public boolean setFocusPos(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + Integer dwFocusPos = cmd.getDwFocusPos(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + // 鑾峰彇鍙傛暟 + 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; + struStdCfg.read(); + IntByReference lchannel = new IntByReference(channelNum); + struStdCfg.lpInBuffer = struGisInfo.getPointer(); + struStdCfg.lpCondBuffer = lchannel.getPointer(); + struStdCfg.dwCondSize = 4; + struStdCfg.dwInSize = struGisInfo.size(); + struStdCfg.write();//璁剧疆鍓嶄箣鍓嶈write() + boolean bool = hCNetSDK.NET_DVR_SetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("璁剧疆GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); + return false; + } else { + return true; + } + } + + /** + * 鑾峰彇鑱氱劍鍊� + * + * @param cmd 鐩告満鍛戒护 + */ + @Override + public int getFocusPos(CameraCmd cmd) { + int result = 0; + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return result; + } + // 鑾峰彇鍙傛暟 + 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(); + IntByReference lchannel = new IntByReference(channelNum); + struStdCfg.lpCondBuffer = lchannel.getPointer(); + struStdCfg.dwCondSize = 4; + struStdCfg.lpOutBuffer = struGisInfo.getPointer(); + struStdCfg.dwOutSize = struGisInfo.size(); + struStdCfg.write();//璁剧疆鍓嶄箣鍓嶈write() + boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); + return result; + } else { + struGisInfo.read(); + result = struGisInfo.struPtzPosEx.dwFocus; + } + return result; + } + + /** + * 璁剧疆棰勭疆鐐� + * + * @param cmd 鐩告満鍛戒护 + */ + @Override + public boolean setPreset(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + Integer PresetIndex = cmd.getPresetIndex(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + 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(); + log.error("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); + } + return bool; + } + + /** + * 杞埌棰勭疆鐐� + * + * @param cmd 鐩告満鍛戒护 + */ + @Override + public boolean gotoPreset(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + Integer PresetIndex = cmd.getPresetIndex(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + 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(); + log.error("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); + } + return bool; + } + + /** + * @鎻忚堪 鑾峰彇閫氶亾鍘嬬缉鍙傛暟 + * @鍙傛暟 [cameraId, channelNum] + * @杩斿洖鍊� java.lang.String + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/2/3 8:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) { + + Map<String, Object> map = new HashMap<>(); + try { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return null; + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + + NET_DVR_COMPRESSIONCFG_V30 compressioncfg = new NET_DVR_COMPRESSIONCFG_V30(); + compressioncfg.write(); + Pointer pioint = compressioncfg.getPointer(); + IntByReference ibrBytesReturned = new IntByReference(0); + + boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_COMPRESSCFG_V30, chanNo, pioint, compressioncfg.size(), ibrBytesReturned); + if (bool) { + compressioncfg.read(); + //鐮佹祦绫诲瀷锛�0-瑙嗛娴侊紝1-澶嶅悎娴侊紝0xfe- 鑷姩锛堝拰婧愪竴鑷达級 + String streamType = ""; + switch (compressioncfg.struNormHighRecordPara.byStreamType) { + case 0: + streamType = "瑙嗛娴�"; + break; + case 1: + streamType = "澶嶅悎娴�"; + break; + default: + streamType = "鏈煡"; + break; + } + //瑙嗛缂栫爜绫诲瀷锛�0-绉佹湁264锛�1-鏍囧噯h264锛�2-鏍囧噯mpeg4锛�7-M-JPEG锛�8-MPEG2锛�9-SVAC锛�10-鏍囧噯h265锛�0xfe- 鑷姩锛堝拰婧愪竴鑷达級锛�0xff-鏃犳晥 + String videoEncType = ""; + switch (compressioncfg.struNormHighRecordPara.byVideoEncType) { + case 0: + videoEncType = "绉佹湁264"; + break; + case 1: + videoEncType = "鏍囧噯h264"; + break; + case 2: + videoEncType = "鏍囧噯mpeg4"; + break; + case 7: + videoEncType = "M-JPEG"; + break; + case 8: + videoEncType = "MPEG2"; + break; + case 9: + videoEncType = "SVAC"; + break; + case 10: + videoEncType = "鏍囧噯h265"; + break; + default: + videoEncType = "鏈煡"; + break; + } + //瑙嗛鐮佺巼 + String videoBitrate = ""; + switch (compressioncfg.struNormHighRecordPara.dwVideoBitrate) { + case 0: + videoBitrate = "淇濈暀"; + break; + case 1: + videoBitrate = "16(淇濈暀)"; + break; + case 2: + videoBitrate = "32"; + break; + case 3: + videoBitrate = "48"; + break; + case 4: + videoBitrate = "64"; + break; + case 5: + videoBitrate = "80"; + break; + case 6: + videoBitrate = "96"; + break; + case 7: + videoBitrate = "128"; + break; + case 8: + videoBitrate = "160"; + break; + case 9: + videoBitrate = "192"; + break; + case 10: + videoBitrate = "224"; + break; + case 11: + videoBitrate = "256"; + break; + case 12: + videoBitrate = "320"; + break; + case 13: + videoBitrate = "384"; + break; + case 14: + videoBitrate = "448"; + break; + case 15: + videoBitrate = "512"; + break; + case 16: + videoBitrate = "640"; + break; + case 17: + videoBitrate = "768"; + break; + case 18: + videoBitrate = "896"; + break; + case 19: + videoBitrate = "1024"; + break; + case 20: + videoBitrate = "1280"; + break; + case 21: + videoBitrate = "1536"; + break; + case 22: + videoBitrate = "1792"; + break; + case 23: + videoBitrate = "2048K"; + break; + case 24: + videoBitrate = "3072"; + break; + case 25: + videoBitrate = "4096"; + break; + case 26: + videoBitrate = "8192"; + break; + case 27: + videoBitrate = "16384"; + break; + default: + videoBitrate = "鍏朵粬"; + break; + } + //瑙嗛杈撳嚭鍙e垎杈ㄧ巼锛�0- 1024x768锛�1- 1280x720锛�2-1280x1024锛�3- 1680x1050锛�4- 1920x1080锛�5- 3840*2160 + String resolution = ""; + switch (compressioncfg.struNormHighRecordPara.byResolution) { + case 0: + resolution = "528*384/528*320"; + break; + case 1: + resolution = "352*288/352*240"; + break; + case 2: + resolution = "176*144/176*120"; + break; + case 3: + resolution = "704*576/704*480"; + break; + case 4: + resolution = "704*288/704*240"; + break; + case 6: + resolution = "320*240"; + break; + case 7: + resolution = "160*120"; + break; + case 16: + resolution = "640*480"; + break; + case 17: + resolution = "1600*1200"; + break; + case 18: + resolution = "800*600"; + break; + case 19: + resolution = "1280*720"; + break; + case 20: + resolution = "1280*960"; + break; + case 21: + resolution = "1600*900"; + break; + case 22: + resolution = "1360*1024"; + break; + case 23: + resolution = "1536*1536"; + break; + case 24: + resolution = "1920*1920"; + break; + case 27: + resolution = "1920*1080"; + break; + case 28: + resolution = "2560*1920"; + break; + case 29: + resolution = "1600*304"; + break; + case 30: + resolution = "2048*1536"; + break; + default: + resolution = "涓嶅湪褰撳墠鍒嗚鲸鐜囩储寮曪紝璇疯仈绯荤鐞嗗憳娣诲姞"; + break; + } + //甯х巼 + 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(); + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); + } + } catch (Exception ex) { + log.error(ex.getMessage()); + } + return map; + } + + /** + * @鎻忚堪 鑾峰彇ptz淇℃伅 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public Map<String, Object> getPtz(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return new HashMap<>(); + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + + NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); + Pointer pioint = m_ptzPosCurrent.getPointer(); + IntByReference ibrBytesReturned = new IntByReference(0); + m_ptzPosCurrent.write(); + boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_PTZPOS, channelNum, pioint, m_ptzPosCurrent.size(), ibrBytesReturned); + if (bool) { + m_ptzPosCurrent.read(); + // DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 + //16杩涘埗杞琁nteger鍚庨櫎10锛屼繚鐣欏皬鏁扮偣1浣� + //瀹為檯鏄剧ず鐨凱TZ鍊兼槸鑾峰彇鍒扮殑鍗佸叚杩涘埗鍊肩殑鍗佸垎涔嬩竴锛� + //濡傝幏鍙栫殑姘村钩鍙傛暟P鐨勫�兼槸0x1750锛屽疄闄呮樉绀虹殑P鍊间负175搴︼紱 + //鑾峰彇鍒扮殑鍨傜洿鍙傛暟T鐨勫�兼槸0x0789锛屽疄闄呮樉绀虹殑T鍊间负78.9搴︼紱 + //鑾峰彇鍒扮殑鍙樺�嶅弬鏁癦鐨勫�兼槸0x1100锛屽疄闄呮樉绀虹殑Z鍊间负110鍊嶃�� + BigDecimal b = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wPanPos)) / 10); + BigDecimal c = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPos)) / 10); + BigDecimal d = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPos)) / 10); + double p = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); + double t = c.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); + double z = d.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); + //log.debug("T鍨傜洿鍙傛暟涓�: " + p + "P姘村钩鍙傛暟涓�: " + t + "Z鍙樺�嶅弬鏁颁负: " + z); + Map<String, Object> ptzMap = new HashMap<>(); + ptzMap.put("p", p); + ptzMap.put("t", t); + ptzMap.put("z", z); + return ptzMap; + } else { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); + return new HashMap<>(); + } + } + + /** + * @鎻忚堪 璁剧疆ptz淇℃伅 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� + */ + @Override + public boolean setPtz(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + Map<String, Double> ptz = cmd.getPtzMap(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + 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)); + m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16)); + m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16)); + m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16)); + Pointer point = m_ptzPosCurrent.getPointer(); + m_ptzPosCurrent.write(); + boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); + } + return bool; + } catch (Exception ex) { + log.error(ex.getMessage()); + return false; + } + } + + @Override + 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); + NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); + m_ptzPosCurrent.wAction = 1; + try { + ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId); + double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()}; + double[] targetPositions = cmd.getTargetPosition(); + double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150); + String p = String.valueOf((int) (cameraPTZ[0] * 10)); + String t = String.valueOf((int) (cameraPTZ[1] * 10)); + String z = String.valueOf((int) (cameraPTZ[2] * 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)); + Pointer point = m_ptzPosCurrent.getPointer(); + m_ptzPosCurrent.write(); + boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); + } + return bool; + } catch (Exception ex) { + log.error("寮曞寮傚父:" + ex.getMessage()); + return false; + } + } + + + /** + * @鎻忚堪 鑾峰彇ptz閿佸畾淇℃伅 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾 + */ + public int getPTZLockInfo(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return -1; + } + 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); + netDvrPtzLockcfg.write(); + boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZLOCKCFG, channelNum, point, netDvrPtzLockcfg.size(), ibrBytesReturned); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鑾峰彇ptz閿佸畾淇℃伅澶辫触,璇风◢鍚庨噸璇�" + code); + return -1; + } else { + netDvrPtzLockcfg.read(); + return netDvrPtzLockcfg.byWorkMode; + } + } + + /** + * @鎻忚堪 璁剧疆闆舵柟浣嶈 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� + */ + @Override + public boolean setZeroPtz(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + NET_DVR_INITIALPOSITIONCTRL initialpositionctrl = new NET_DVR_INITIALPOSITIONCTRL(); + + initialpositionctrl.dwSize = initialpositionctrl.size(); + initialpositionctrl.byWorkMode = 0; + initialpositionctrl.dwChan = Short.parseShort(channelNum.toString()); + + Pointer point = initialpositionctrl.getPointer(); + initialpositionctrl.write(); + boolean bool = hCNetSDK.NET_DVR_RemoteControl(userId, NET_DVR_PTZ_INITIALPOSITIONCTRL, point, initialpositionctrl.size()); + if (!bool) { + int i = hCNetSDK.NET_DVR_GetLastError(); + log.error("閿欒鐮侊細" + i); + } + return bool; + } + + /** + * @鎻忚堪 鑾峰彇鐞冩満PTZ鍙傛暟鍙栧�艰寖鍥� + * @鍙傛暟 [cameraId, channelNum] + * @杩斿洖鍊� java.util.Map<java.lang.String, java.lang.Object> + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/2/8 10:58 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public Map<String, Object> getPtzScope(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return new HashMap<>(); + } + 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); + m_ptzPosCurrent.write(); + boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZSCOPE, channelNum, point, m_ptzPosCurrent.size(), ibrBytesReturned); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); + return new HashMap<>(); + } else { + m_ptzPosCurrent.read(); + DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 + + String wPanPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wPanPosMax)) / 10); + String wPanPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPosMax)) / 10); + String wTiltPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPosMax)) / 10); + String wTiltPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPosMin)) / 10); + String wZoomPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPosMax)) / 10); + String wZoomPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPosMin)) / 10); + Map<String, Object> ptzScopeMap = new HashMap<>(); + ptzScopeMap.put("pMax", wPanPosMax); + ptzScopeMap.put("pMin", wPanPosMin); + ptzScopeMap.put("tMax", wTiltPosMax); + ptzScopeMap.put("tMin", wTiltPosMin); + ptzScopeMap.put("zMax", wZoomPosMax); + ptzScopeMap.put("zMin", wZoomPosMin); + return ptzScopeMap; + } + + } + + /** + * @鎻忚堪 閫忛浘寮�鍏� + * @鍙傛暟 [userId, channelNum, enable] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/18 13:07 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public boolean controlDefogcfg(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + boolean enable = cmd.isEnable(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + 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); + boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size(), ibrBytesReturned); + if (!b_GetCameraParam) { + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + } + struCameraParam.read(); + log.debug("鏄惁寮�鍚�忛浘锛�" + struCameraParam.struDefogCfg.byMode); + + NET_DVR_DEFOGCFG defogcfg = new NET_DVR_DEFOGCFG(); + if (enable) { + defogcfg.byMode = 2;//0-涓嶅惎鐢� 1-鑷姩妯″紡 2-甯稿紑妯″紡 + defogcfg.byLevel = 100;//鍙栧�艰寖鍥�0-100 + } else { + defogcfg.byMode = 0;//0-涓嶅惎鐢� 1-鑷姩妯″紡 2-甯稿紑妯″紡 + } + struCameraParam.struDefogCfg = defogcfg; + struCameraParam.write(); + boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size()); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("璁剧疆閫忛浘澶辫触,璇风◢鍚庨噸璇�" + code); + } + log.debug("璁剧疆閫忛浘鎴愬姛"); + return bool; + } + + /** + * @鎻忚堪 绾㈠寮�鍏� + * @鍙傛暟 [userId, channelNum, enable] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/18 13:07 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public boolean controlInfrarecfg(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + boolean enable = cmd.isEnable(); + Integer chanNo = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + 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); + boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, chanNo, point, struDayNigh.size(), ibrBytesReturned); + if (!b_GetCameraParam) { + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + } + struDayNigh.read(); + String current = struDayNigh.struDayNight.byDayNightFilterType == 1 ? "寮�鍚�" : "鍏抽棴"; + log.debug("褰撳墠鐘舵��:" + current); + + NET_DVR_DAYNIGHT daynight = new NET_DVR_DAYNIGHT(); + if (enable) { + daynight.byDayNightFilterType = 1;//澶滄櫄 + } else { + daynight.byDayNightFilterType = 0;//鐧藉ぉ + } + daynight.bySwitchScheduleEnabled = 1; + daynight.byDayNightFilterTime = 60; + struDayNigh.struDayNight = daynight; + struDayNigh.write(); + boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, chanNo, point, struDayNigh.size()); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("璁剧疆澶滆澶辫触,璇风◢鍚庨噸璇�" + code); + } + else { + log.debug("璁剧疆澶滆鎴愬姛"); + } + + return bool; + } + + /** + * @鎻忚堪 鑱氱劍寮�鍏� + * @鍙傛暟 [userId, channelNum, enable] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/18 13:07 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public boolean controlFocusMode(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + boolean enable = cmd.isEnable(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + 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); + boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned); + if (!b_GetCameraParam) { + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + } + struFocusMode.read(); + log.debug("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); + + if (enable) { + struFocusMode.byFocusMode = 1;//鎵嬪姩鑱氱劍 + } else { + struFocusMode.byAutoFocusMode = 1; + struFocusMode.byFocusMode = 2;//鑷姩鑱氱劍 + } + struFocusMode.byFocusDefinitionDisplay = 1; + struFocusMode.byFocusSpeedLevel = 3; + struFocusMode.write(); + boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_FOCUSMODECFG, channelNum, point, struFocusMode.size()); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("璁剧疆鑱氱劍妯″紡澶辫触,璇风◢鍚庨噸璇�" + code); + } + log.debug("璁剧疆鑱氱劍妯″紡鎴愬姛"); + return bool; + } + + /** + * @鎻忚堪 鑾峰彇鑱氱劍妯″紡 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/18 13:07 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + public String getFocusMode(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + 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); + boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned); + if (!b_GetCameraParam) { + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + } + struFocusMode.read(); + log.debug("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); + return String.valueOf(struFocusMode.byFocusMode); + } + + /** + * @鎻忚堪 浜戝彴鍔犵儹寮�鍏� + * @鍙傛暟 [userId, channelNum, enable] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/18 13:07 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public boolean controlPTHeateRpwron(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + boolean enable = cmd.isEnable(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + int dwStop; + if (enable) { + dwStop = 0;//寮�鍚� + } else { + dwStop = 1;//鍏抽棴 + } + boolean bool = hCNetSDK.NET_DVR_PTZControl_Other(userId, channelNum, HEATER_PWRON, dwStop); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("璁剧疆浜戝彴鍔犵儹澶辫触,璇风◢鍚庨噸璇�" + code); + } + log.debug("璁剧疆浜戝彴鍔犵儹鎴愬姛"); + return bool; + } + + /** + * @鎻忚堪 闀滃ご鍔犵儹寮�鍏� + * @鍙傛暟 [userId, channelNum, enable] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/18 13:07 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public boolean controlCameraDeicing(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + boolean enable = cmd.isEnable(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + 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); + boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_DEVSERVER_CFG, channelNum, point, struDeicing.size(), ibrBytesReturned); + if (!b_GetCameraParam) { + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + } + struDeicing.read(); + log.debug("鏄惁寮�鍚櫎鍐帮細" + struDeicing.byEnableDeicing); + + if (enable) { + struDeicing.byEnableDeicing = 1;//寮�鍚� + } else { + struDeicing.byEnableDeicing = 0;//鍏抽棴 + } + struDeicing.write(); + boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_DEVSERVER_CFG, channelNum, point, struDeicing.size()); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("璁剧疆闀滃ご闄ゅ啺澶辫触,璇风◢鍚庨噸璇�" + code); + } + log.debug("璁剧疆闀滃ご闄ゅ啺鎴愬姛"); + return bool; + } + + /** + * 鎴浘 杩旂粰鍓嶇 + * + * @param cmd 鐩告満鍛戒护 + */ + public String captureJPEGPicture(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + 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鍊硷紝鍒ゆ柇鏄惁鑾峰彇璁惧鑳藉姏 + log.error("鎶撳浘澶辫触锛岃绋嶅悗閲嶈瘯"); + } + //鍥剧墖璐ㄩ噺 + NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA(); + //璁剧疆鍥剧墖鍒嗚鲸鐜� + jpeg.wPicSize = 0; + //璁剧疆鍥剧墖璐ㄩ噺 + jpeg.wPicQuality = 0; + IntByReference a = new IntByReference(); + //璁剧疆鍥剧墖澶у皬 + ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024); + // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓� + boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); + log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); + + Base64.Encoder decoder = Base64.getEncoder(); + // BASE64Encoder encoder = new BASE64Encoder(); + String png_base64 = decoder.encodeToString(jpegBuffer.array());//杞崲鎴恇ase64涓� + png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//鍒犻櫎 \r\n + log.debug("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------"); + return png_base64; + } + + /** + * @鎻忚堪 鎴浘 瀛樻湇鍔″櫒 + * @鍙傛暟 [cameraId, channelNum] + * @杩斿洖鍊� java.lang.String + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/2/2 14:59 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public String picCutCate(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + //鍥剧墖淇℃伅 + NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA(); + //璁剧疆鍥剧墖鍒嗚鲸鐜� + //鍥剧墖灏哄锛�0-CIF(352*288/352*240)锛�1-QCIF(176*144/176*120)锛�2-4CIF(704*576/704*480)鎴朌1(720*576/720*486)锛�3-UXGA(1600*1200)锛� + // 4-SVGA(800*600)锛�5-HD720P(1280*720)锛�6-VGA(640*480)锛�7-XVGA(1280*960)锛�8-HD900P(1600*900)锛�9-HD1080P(1920*1080)锛�10-2560*1920锛� + // 11-1600*304锛�12-2048*1536锛�13-2448*2048锛�14-2448*1200锛�15-2448*800锛�16-XGA(1024*768)锛�17-SXGA(1280*1024)锛�18-WD1(960*576/960*480), + // 19-1080I(1920*1080)锛�20-576*576锛�21-1536*1536锛�22-1920*1920锛�23-320*240锛�24-720*720锛�25-1024*768锛�26-1280*1280锛�27-1600*600锛� + // 28-2048*768锛�29-160*120锛�75-336*256锛�78-384*256锛�79-384*216锛�80-320*256锛�82-320*192锛�83-512*384锛�127-480*272锛�128-512*272锛� 161-288*320锛� + // 162-144*176锛�163-480*640锛�164-240*320锛�165-120*160锛�166-576*720锛�167-720*1280锛�168-576*960锛�180-180*240, 181-360*480, 182-540*720, + // 183-720*960, 184-960*1280, 185-1080*1440, 500-384*288, 0xff-Auto(浣跨敤褰撳墠鐮佹祦鍒嗚鲸鐜�) + jpeg.wPicSize = 0; + //璁剧疆鍥剧墖璐ㄩ噺锛�0-鏈�濂斤紝1-杈冨ソ锛�2-涓�鑸� + jpeg.wPicQuality = 0; + IntByReference a = new IntByReference(); + //璁剧疆鍥剧墖澶у皬 + ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024); + // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓� + log.debug("-----------杩欓噷寮�濮嬪皝瑁� NET_DVR_CaptureJPEGPicture_NEW---------"); + boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); + log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); + if (is) { + log.debug("hksdk(鎶撳浘)-缁撴灉鐘舵�佸��(0琛ㄧず鎴愬姛):" + hCNetSDK.NET_DVR_GetLastError()); + byte[] array = jpegBuffer.array(); + //瀛樺偍鍒癿inio + String BucketName = "pic"; + String ObjectName = "capture/" + IdUtils.simpleUUID() + ".jpeg"; + InputStream input = new ByteArrayInputStream(array); + String url = ""; + try { + boolean b = MinioUtil.uploadObject(BucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG); + if (b) { + url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); + log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); + } + } catch (IOException ex) { + log.error("涓婁紶鏂囦欢寮傚父锛�" + ex.getMessage()); + } + return url; + } else { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鎶撳浘澶辫触,璇风◢鍚庨噸璇�" + code); + return ""; + } + } + + /** + * @鎻忚堪 鐭椂褰曞儚 + * @鍙傛暟 [userId, channelNum, enable] + * @杩斿洖鍊� void + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/20 11:18 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public String record(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + boolean enable = cmd.isEnable(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + //寮哄埗I甯х粨鏋勪綋瀵硅薄 + HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� + netDvrIFrame.read(); + netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 + netDvrIFrame.byStreamType = 0; + netDvrIFrame.dwSize = netDvrIFrame.size(); + netDvrIFrame.write(); + if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { + log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + } + //棰勮鍙傛暟 + NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); + previewinfo.read(); + previewinfo.lChannel = channelNum; + previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� + previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ + previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� + previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 + previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 + previewinfo.write(); + String url = ""; + if (enable) { + if (!GlobalVariable.previewMap.containsKey(cameraId)) { + int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); + if (lRealHandle == -1) { + log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); + return ""; + } + log.debug("鍙栨祦鎴愬姛"); + GlobalVariable.previewMap.put(cameraId, lRealHandle); + } + if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { + log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + return ""; + } + log.debug("褰曞儚寮�濮�"); + } else { + if (GlobalVariable.previewMap.containsKey(cameraId)) { + Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); + hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + } + log.debug("褰曞儚鍋滄"); + //瀛樺叆minio + String BucketName = "record"; + String ObjectName = IdUtils.simpleUUID() + ".mp4"; + FileInputStream stream = new FileInputStream(path); + boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4"); + if (b) { + url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); + log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); + } + } + return url; + } catch (Exception ex) { + log.error("褰曞儚寮傚父" + ex.getMessage()); + return ""; + } + } + + @Override + public boolean recordStart(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + //寮哄埗I甯х粨鏋勪綋瀵硅薄 + HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� + netDvrIFrame.read(); + netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 + netDvrIFrame.byStreamType = 0; + netDvrIFrame.dwSize = netDvrIFrame.size(); + netDvrIFrame.write(); + if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { + log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + } + //棰勮鍙傛暟 + NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); + previewinfo.read(); + previewinfo.lChannel = channelNum; + previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� + previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ + previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� + previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 + previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 + previewinfo.write(); + if (GlobalVariable.previewMap.containsKey(cameraId)) { + Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); + hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + log.debug("鍋滄褰撳墠褰曞儚"); + } + int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); + if (lRealHandle == -1) { + log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); + return false; + } + log.debug("鍙栨祦鎴愬姛"); + GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName()); + GlobalVariable.previewMap.put(cameraId, lRealHandle); + if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { + log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + return false; + } + log.debug("褰曞儚寮�濮�"); + return true; + } catch (Exception ex) { + log.error("寮�濮嬪綍鍍忓紓甯�" + ex.getMessage()); + return false; + } + } + + @Override + public String recordStopToMinio(CameraCmd cmd) { + String url = ""; + try { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + //region 寮哄埗I甯� + HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� + netDvrIFrame.read(); + netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 + netDvrIFrame.byStreamType = 0; + netDvrIFrame.dwSize = netDvrIFrame.size(); + netDvrIFrame.write(); + if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { + log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + } + //endregion + //region 棰勮鍙傛暟 + NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); + previewinfo.read(); + previewinfo.lChannel = channelNum; + previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� + previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ + previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� + previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 + previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 + previewinfo.write(); + //endregion + if (GlobalVariable.previewMap.containsKey(cameraId)) { + Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); + hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + } + log.debug("褰曞儚鍋滄"); + //瀛樺叆minio + String BucketName = cmd.getRecordBucketName(); + String ObjectName = cmd.getRecordObjectName() + ".mp4"; + FileInputStream stream = new FileInputStream(path); + boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4"); + if (b) { + url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); + log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); + } + return url; + } catch (Exception ex) { + log.error("褰曞儚寮傚父" + ex.getMessage()); + return ""; + } + } + + @Override + public boolean recordStopNotToMinio(CameraCmd cmd) { + boolean result = false; + try { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + //寮哄埗I甯х粨鏋勪綋瀵硅薄 + HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� + netDvrIFrame.read(); + netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 + netDvrIFrame.byStreamType = 0; + netDvrIFrame.dwSize = netDvrIFrame.size(); + netDvrIFrame.write(); + if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { + log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + } + //棰勮鍙傛暟 + NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); + previewinfo.read(); + previewinfo.lChannel = channelNum; + previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� + previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ + previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� + previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 + previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 + previewinfo.write(); + if (GlobalVariable.previewMap.containsKey(cameraId)) { + Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); + hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + } + log.debug("褰曞儚鍋滄"); + result = true; + } catch (Exception ex) { + log.error("褰曞儚鍋滄寮傚父" + ex.getMessage()); + result = false; + } + return result; + } + + //鑾峰彇IP閫氶亾 + @Override + public List<ArdChannel> getCameraChannelList(ArdCameras camera) { + /*鑾峰彇閫氶亾*/ + List<ArdChannel> channelList = new ArrayList<>(); + try { + Integer chanNum = camera.getChanNum(); + Integer startDChan = camera.getStartDChan(); + if (chanNum > 0) { + // 鑾峰彇閫氶亾鍙� + for (int iChannum = 0; iChannum < chanNum; iChannum++) { + ArdChannel ardChannel = new ArdChannel(); + int channum = iChannum + startDChan + 1; + HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40(); + strPicCfg.dwSize = strPicCfg.size(); + strPicCfg.write(); + Pointer pStrPicCfg = strPicCfg.getPointer(); + NativeLong lChannel = new NativeLong(channum); + IntByReference pInt = new IntByReference(0); + boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), + pStrPicCfg, strPicCfg.size(), pInt); + if (b_GetPicCfg) { + strPicCfg.read(); + String channelName = new String(strPicCfg.sChanName, "GBK").trim(); + ardChannel.setName(channelName); + } + ardChannel.setDeviceId(camera.getId()); + ardChannel.setChanNo(iChannum + 1); + channelList.add(ardChannel); + } + } + } catch (Exception ex) { + log.error("鑾峰彇鐩告満閫氶亾寮傚父:" + ex.getMessage()); + } + return channelList; + } + + /** + * @鎻忚堪 鑾峰彇GIS淇℃伅鏁版嵁 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾 + */ + @Override + public Map<String, Object> getGisInfo(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return new HashMap<>(); + } + // 鑾峰彇鍙傛暟 + 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(); + IntByReference lchannel = new IntByReference(channelNum); + struStdCfg.lpCondBuffer = lchannel.getPointer(); + struStdCfg.dwCondSize = 4; + struStdCfg.lpOutBuffer = struGisInfo.getPointer(); + struStdCfg.dwOutSize = struGisInfo.size(); + struStdCfg.write();//璁剧疆鍓嶄箣鍓嶈write() + boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); + return new HashMap<>(); + } else { + struGisInfo.read(); + Map<String, Object> map = new HashMap<>(); + map.put("p", struGisInfo.struPtzPos.fPanPos); + map.put("t", struGisInfo.struPtzPos.fTiltPos < 0 ? struGisInfo.struPtzPos.fTiltPos + 360 : struGisInfo.struPtzPos.fTiltPos); + map.put("z", struGisInfo.struPtzPos.fZoomPos); + map.put("fHorFieldAngle", struGisInfo.fHorizontalValue);// 姘村钩瑙嗗満瑙� + map.put("fVerFieldAngle", struGisInfo.fVerticalValue);// 鍨傜洿瑙嗗満瑙� + return map; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java index 836fba0..9046e96 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java @@ -17,7 +17,7 @@ final String key = "language"; String language = "en_US";//request.getHeader(key); // 鍓嶇浼犻�掔殑language蹇呴』鏄痾h-CN鏍煎紡鐨勶紝涓棿鐨�-蹇呴』瑕佸畬鏁达紝涓嶈兘鍙紶閫抸h鎴杄n - log.info("褰撳墠璇█={}",language); + log.debug("褰撳墠璇█={}",language); Locale locale = new Locale(language.split("_")[0],language.split("_")[1]); // 杩欐牱璧嬪�间互鍚庯紝MessageUtils.message鏂规硶灏变笉鐢ㄤ慨鏀逛簡 LocaleContextHolder.setLocale(locale); diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java index 968fcab..e857c30 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java @@ -1,25 +1,20 @@ package com.ruoyi.quartz.task; -import com.alibaba.fastjson2.JSONObject; + import com.ruoyi.common.core.domain.entity.SysUser; 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.channel.domain.ArdChannel; -import com.ruoyi.utils.sdk.dhsdk.service.IDhClientService; -import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; -import com.ruoyi.media.domain.Items; -import com.ruoyi.media.domain.JsonsRoot; import com.ruoyi.media.domain.Vtdu; import com.ruoyi.media.service.IMediaService; import com.ruoyi.media.service.IVtduService; import com.ruoyi.rongcloud.service.RongCloudService; import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.utils.sdk.dhsdk.service.impl.DhSdkStrategy; +import com.ruoyi.utils.sdk.hiksdk.service.impl.HikSdkStrategy; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; - import javax.annotation.Resource; -import java.util.ArrayList; import java.util.List; /** @@ -38,9 +33,9 @@ @Resource IArdCamerasService iArdCamerasService; @Resource - IHikClientService hikClientService; + HikSdkStrategy hikClientService; @Resource - IDhClientService dhClientService; + DhSdkStrategy dhClientService; @Resource IVtduService vtduService; @Resource -- Gitblit v1.9.3