From d353fdce7cb957aa0f5d9d51d0ad4205c96e156c Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期六, 21 十月 2023 11:57:12 +0800
Subject: [PATCH] 1、流媒体升级1.2.0,修改部分forest接口 2、登录设备判断编码自动配置转码 3、增加sdk聚焦模式切换 4、增加sdk视场角获取并定时上传

---
 ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java |  101 +++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 87 insertions(+), 14 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
index ed12a00..2a20d7e 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
@@ -3,31 +3,25 @@
 import com.ruoyi.common.annotation.SdkOperate;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.common.utils.file.MimeTypeUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.device.camera.domain.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.device.dhsdk.common.Res;
 import com.ruoyi.device.dhsdk.lib.NetSDKLib;
 import com.ruoyi.device.dhsdk.lib.NetSDKLib.LLong;
-import com.ruoyi.device.dhsdk.lib.enumeration.EM_FOCUS_LIMIT_SELECT_MODE;
 import com.ruoyi.device.dhsdk.lib.enumeration.EM_NEW_CONFIG;
+import com.ruoyi.device.dhsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE;
 import com.ruoyi.device.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS;
-import com.ruoyi.device.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS_UNIT;
-import com.ruoyi.device.dhsdk.lib.structure.NET_ENCODE_VIDEO_INFO;
+import com.ruoyi.device.dhsdk.lib.structure.DH_OUT_PTZ_VIEW_RANGE_STATUS;
 import com.ruoyi.device.dhsdk.module.*;
 import com.ruoyi.device.dhsdk.service.IDhClientService;
 import com.ruoyi.device.hiksdk.common.GlobalVariable;
-import com.ruoyi.device.hiksdk.sdk.HCNetSDK;
 import com.ruoyi.media.domain.Vtdu;
 import com.ruoyi.media.service.IVtduService;
-import com.ruoyi.media.service.impl.VtduServiceImpl;
 import com.ruoyi.utils.gis.GisUtil;
 import com.ruoyi.utils.minio.MinioUtil;
-import com.ruoyi.utils.tools.ArdTool;
 import com.sun.jna.Pointer;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
@@ -150,11 +144,18 @@
                 if (vtdu != null) {
                     vtduService.deleteVtduByName(name);
                 }
+
                 //娣诲姞鍒版祦濯掍綋
+                CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
+                Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
                 vtdu = new Vtdu();
+                if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
+                    vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
+                } else {
+                    vtdu.setIsCode("1");//榛樿杞爜
+                }
                 vtdu.setRtspSource(rtspSource);
                 vtdu.setName(camera.getId() + "_" + channel.getChanNo());
-                vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
                 vtdu.setMode("1");//榛樿CPU杞В鐮�
                 vtdu.setCameraId(camera.getId());
                 vtduService.insertVtdu(vtdu);
@@ -312,7 +313,8 @@
         if (b) {
             DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟
             String nPTZPan = df.format((float) dh_ptz_location_info.nPTZPan / 10);
-            String nPTZTilt = df.format((float) dh_ptz_location_info.nPTZTilt / 10);
+            float t = (float) dh_ptz_location_info.nPTZTilt / 10;
+            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);
@@ -648,10 +650,12 @@
                 cfg_video_in_focus.stVideoInFocusUnit[i].nFocusLimit = 10000;//鑱氱劍鏋侀檺鍊�, 鍗曚綅姣背
                 if (enable) {//鑱氱劍妯″紡, 0-鍏抽棴, 1-杈呭姪鑱氱劍, 2-鑷姩鑱氱劍, 3-鍗婅嚜鍔ㄨ仛鐒�, 4-鎵嬪姩鑱氱劍
                     cfg_video_in_focus.stVideoInFocusUnit[i].nMode = 4;//鎵嬪姩鑱氱劍
-                    cfg_video_in_focus.stVideoInFocusUnit[i].emFocusMode = 1;//鑱氱劍鏋侀檺Manual
+                    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 = 0;//鑱氱劍鏋侀檺Auto
+                    cfg_video_in_focus.stVideoInFocusUnit[i].emFocusMode = 1;//鑱氱劍鏋侀檺Auto
+                    log.debug("褰撳墠涓鸿嚜鍔ㄨ仛鐒︽ā寮�");
                 }
             }
             cfg_video_in_focus.nChannelIndex = chanNo - 1;
@@ -666,6 +670,49 @@
         }
     }
 
+    @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) {
@@ -677,9 +724,9 @@
         }
         LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
         try {
-            EM_NEW_CONFIG config = EM_NEW_CONFIG.CFG_CMD_VIDEOINDEFOG;
+            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, config.getValue(), null);
+            boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, command, null);
             if (!bool) {
                 log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint());
             }
@@ -836,6 +883,32 @@
         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) {

--
Gitblit v1.9.3