From aaa07634fa899b7346dfd61c6f70962adbc1dca5 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期五, 20 十月 2023 08:55:02 +0800
Subject: [PATCH] 1. 增加聚焦值和获取接口。 2. 增加视频编码获取接口。 3. 流媒体通过编码自动切换是否转码。

---
 ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java                   |   16 
 ard-work/src/main/resources/templates/test.html                                               |  102 ++--
 ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java                        |    4 
 ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java                                     |   16 
 ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java                              |    2 
 ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java                             |    2 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java                                |   26 
 ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java         |  226 ++++++--
 ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java                        |   67 ++
 ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/HikSdkController.java               |   25 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java                      |   17 
 ard-work/src/main/java/com/ruoyi/media/service/impl/VtduServiceImpl.java                      |    4 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java                    |   14 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/lib/structure/CFG_VIDEO_IN_FOCUS_UNIT.java      |   54 +-
 ard-work/src/main/java/com/ruoyi/device/dhsdk/controller/DhSdkController.java                 |    5 
 ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java           |   31 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java           |  316 +++++++++++-
 ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java            |   16 
 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java                 |   14 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/lib/enumeration/EM_FOCUS_LIMIT_SELECT_MODE.java |    2 
 ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java             |   12 
 ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java                     |   53 +
 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java         |  323 +++++++------
 ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java                         |   26 +
 ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java                 |   28 
 ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java        |    1 
 ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java                   |   25 
 27 files changed, 927 insertions(+), 500 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java
index b4b12e0..d67db60 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java
@@ -15,7 +15,7 @@
 import com.ruoyi.alarm.tube.service.IArdAlarmTubeService;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.device.camera.domain.CameraCmd;
-import com.ruoyi.device.hiksdk.service.IHikClientService;
+import com.ruoyi.device.camera.service.ICameraSdkService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
@@ -39,7 +39,7 @@
     @Resource
     IArdAlarmRadarPumpService ardAlarmRadarPumpService;
     @Resource
-    IHikClientService hikClientService;
+    ICameraSdkService cameraSdkService;
     @Resource
     IArdAlarmTubeService ardAlarmTubeService;
 
@@ -58,17 +58,17 @@
             cmd.setRecordBucketName("record");
             cmd.setRecordObjectName("alarm_" + guideTask.getAlarmId());
             log.debug("寮�濮嬪紩瀵�");
-            boolean guideRes = hikClientService.guideTargetPosition(cmd);
+            boolean guideRes = cameraSdkService.guideTargetPosition(cmd);
             if (guideRes) {
                 log.debug("寮曞鎴愬姛");
-                hikClientService.controlLock(cmd);//涓婇攣
-                hikClientService.recordStart(cmd);//寮�濮嬪綍鍍�
+                cameraSdkService.controlLock(cmd);//涓婇攣
+                cameraSdkService.recordStart(cmd);//寮�濮嬪綍鍍�
                 try {
                     Thread.sleep(30000);
                 } catch (InterruptedException e) {
                     log.info("褰撳墠浠诲姟ID" + guideTask.getAlarmId() + "绾跨▼琚粓姝�");
                 }
-                String url = hikClientService.recordStopToMinio(cmd);//鍋滄褰曞儚杩斿洖url
+                String url = cameraSdkService.recordStopToMinio(cmd);//鍋滄褰曞儚杩斿洖url
                 if (StringUtils.isNotEmpty(url)) {
                     switch (guideTask.getAlarmType()) {
                         case "sys_tube_leak":
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java b/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
index 2ffda2a..4a4976e 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
@@ -7,6 +7,8 @@
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.service.IArdCamerasService;
+import com.ruoyi.device.camera.service.ICameraSdkService;
+import com.ruoyi.device.camera.service.impl.CameraSdkServiceImpl;
 import com.ruoyi.device.dhsdk.service.IDhClientService;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
 import com.ruoyi.device.hiksdk.service.impl.HikClientServiceImpl;
@@ -49,6 +51,8 @@
     private IHikClientService hikSdk;
     @Resource
     private IDhClientService dhSdk;
+    @Resource
+    private ICameraSdkService cameraSdkService;
     @Resource
     private IArdCamerasService ardCamerasService;
     @Resource
@@ -99,17 +103,8 @@
     public AjaxResult add(@RequestBody ArdCameras camera) {
         int i = ardCamerasService.insertArdCameras(camera);
         if (i > 0) {
-            if (camera.getFactory().equals("1")) {
-                //娉ㄩ攢
-                hikSdk.logout(camera.getId());
-                //寮傛鐧诲綍
-                hikSdk.asyncLogin(camera);
-            }
-            else if(camera.getFactory().equals("2"))
-            {
-                dhSdk.logout(camera.getId());
-                dhSdk.login(camera);
-            }
+            cameraSdkService.logout(camera.getId());
+            cameraSdkService.login(camera);
         }
         return toAjax(i);
     }
@@ -124,15 +119,8 @@
     public AjaxResult edit(@RequestBody ArdCameras camera) {
         int i = ardCamerasService.updateArdCameras(camera);
         if (i > 0) {
-            camera= ardCamerasService.selectArdCamerasById(camera.getId());
-            if(camera.getFactory().equals("1")) {
-                hikSdk.logout(camera.getId());
-                hikSdk.asyncLogin(camera);
-            }
-            else if(camera.getFactory().equals("2")) {
-                dhSdk.logout(camera.getId());
-                dhSdk.login(camera);
-            }
+            cameraSdkService.logout(camera.getId());
+            cameraSdkService.login(camera);
         }
         return toAjax(i);
     }
@@ -146,8 +134,7 @@
     @DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable String[] ids) {
         for (String id : ids) {
-            hikSdk.logout(id);
-            dhSdk.logout(id);
+            cameraSdkService.logout(id);
         }
         return toAjax(ardCamerasService.deleteArdCamerasByIds(ids));
     }
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java b/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
index 81adfa8..186424c 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
@@ -150,8 +150,8 @@
     public @ResponseBody
     AjaxResult getFocusPos(@RequestBody CameraCmd cmd) {
         cmd.setOperator(SecurityUtils.getUserId());
-        Map<String, Object> Map = cameraSdkService.getFocusPos(cmd);
-        return AjaxResult.success("鑾峰彇鑱氱劍鍊�", Map);
+        int focus = cameraSdkService.getFocusPos(cmd);
+        return AjaxResult.success("鑾峰彇鑱氱劍鍊�", focus);
     }
 
     @ApiOperation("璁剧疆鑱氱劍鍊�")
@@ -335,6 +335,17 @@
         return AjaxResult.success(cameraSdkService.getGisInfo(cmd));
     }
 
+    @ApiOperation("褰曞儚")
+    @PostMapping("/record")
+    @Log(title = "鎵嬪姩褰曞儚寮�濮�", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
+    public @ResponseBody
+    AjaxResult record(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        String url = cameraSdkService.record(cmd);
+        return AjaxResult.success(url);
+    }
+
     @ApiOperation("鎵嬪姩褰曞儚寮�濮�")
     @PostMapping("/recordStart")
     @Log(title = "鎵嬪姩褰曞儚寮�濮�", businessType = BusinessType.CONTROL)
@@ -345,6 +356,7 @@
         boolean b = cameraSdkService.recordStart(cmd);
         return toAjax(b);
     }
+
     @ApiOperation("鎵嬪姩褰曞儚鍋滄")
     @PostMapping("/recordStop")
     @Log(title = "鎵嬪姩褰曞儚鍋滄", businessType = BusinessType.CONTROL)
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 dc7f5cf..e210aad 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,20 +2,15 @@
 
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
-import com.ruoyi.device.channel.domain.ArdChannel;
 
-import java.util.List;
 import java.util.Map;
 
 public interface ICameraSdkService {
     //sdk鍒濆鍖�
     void initSDK();
 
-    //鍚屾鐧诲綍
-    void syncLogin(ArdCameras cameras);
-
-    //寮傛鐧诲綍
-    void asyncLogin(ArdCameras cameras);
+    //鐧诲綍
+    Boolean login(ArdCameras ardCamera);
 
     //娉ㄩ攢
     boolean logout(String cameraId);
@@ -30,7 +25,7 @@
     boolean setFocusPos(CameraCmd cmd);
 
     //鑾峰彇鑱氱劍鍊�
-    Map<String, Object> getFocusPos(CameraCmd cmd);
+    int getFocusPos(CameraCmd cmd);
 
     //璁剧疆棰勭疆浣�
     boolean setPreset(CameraCmd cmd);
@@ -39,12 +34,12 @@
     boolean gotoPreset(CameraCmd cmd);
 
     //鑾峰彇鐮佹祦鍘嬬缉鍙傛暟
-    Map<String, String> getVideoCompressionCfg(CameraCmd cmd);
+    Map<String, Object> getVideoCompressionCfg(CameraCmd cmd);
 
     //閫忛浘
     boolean controlDefogcfg(CameraCmd cmd);
 
-    //绾㈠?
+    //绾㈠
     boolean controlInfrarecfg(CameraCmd cmd);
 
     //鑱氱劍妯″紡
@@ -56,7 +51,7 @@
     //浜戝彴鍔犵儹
     boolean controlPTHeateRpwron(CameraCmd cmd);
 
-    //闀滃ご闄ゅ啺
+    //闀滃ご鍔犵儹闄ゅ啺
     boolean controlCameraDeicing(CameraCmd cmd);
 
     //閰嶇疆閿佸畾
@@ -85,9 +80,11 @@
     //璁剧疆闆舵柟浣嶈
     boolean setZeroPtz(CameraCmd cmd);
 
-
     //寮曞鐩爣浣嶇疆
     boolean guideTargetPosition(CameraCmd cmd);
+
+    //褰曞儚
+    String record(CameraCmd cmd);
 
     //鎵嬪姩寮�濮嬪綍鍍�
     boolean recordStart(CameraCmd cmd);
@@ -96,11 +93,8 @@
     String recordStopToMinio(CameraCmd cmd);
 
     //鍋滄褰曞儚-涓嶄笂浼爉inio
-    void recordStopNotToMinio(CameraCmd cmd);
-
-    //鑾峰彇鐩告満閫氶亾淇℃伅
-    public List<ArdChannel> getCameraChannelList(ArdCameras camera);
+    boolean recordStopNotToMinio(CameraCmd cmd);
 
     //鑾峰彇GIS淇℃伅鏁版嵁
-    public Map<String, Object> getGisInfo(CameraCmd cmd);
+    Map<String, Object> getGisInfo(CameraCmd cmd);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
index e44f979..8fb5c0d 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -13,6 +13,7 @@
 import com.ruoyi.device.channel.domain.ArdChannel;
 import com.ruoyi.device.channel.mapper.ArdChannelMapper;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
+import com.ruoyi.media.domain.Vtdu;
 import com.ruoyi.media.service.IVtduService;
 import com.ruoyi.scheduling.domian.SchedulingParam;
 import com.ruoyi.utils.gis.GisUtil;
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 97591be..00fb04a 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
@@ -1,11 +1,16 @@
 package com.ruoyi.device.camera.service.impl;
 
+import com.ruoyi.common.annotation.SdkOperate;
 import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.camera.service.IArdCamerasService;
 import com.ruoyi.device.camera.service.ICameraSdkService;
 import com.ruoyi.device.channel.domain.ArdChannel;
+import com.ruoyi.device.dhsdk.lib.NetSDKLib;
+import com.ruoyi.device.dhsdk.module.RealPlayModule;
 import com.ruoyi.device.dhsdk.service.IDhClientService;
 import com.ruoyi.device.hiksdk.common.GlobalVariable;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
@@ -13,10 +18,13 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint;
+import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk;
 import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.NET_DVR_CHECK_USER_STATUS;
 
 
@@ -30,12 +38,14 @@
 @Slf4j(topic = "SDK")
 public class CameraSdkServiceImpl implements ICameraSdkService {
     @Resource
+    private IArdCamerasService ardCamerasService;
+    @Resource
     IHikClientService hikClientService;
     @Resource
     IDhClientService dhClientService;
     @Resource
     RedisCache redisCache;
-
+    //鍒濆鍖朣DK
     @Override
     public void initSDK() {
         //鍒濆鍖栧姞杞絪dk搴撴枃浠�
@@ -48,20 +58,47 @@
             dhClientService.loginAll();//鐧诲綍鍏ㄩ儴澶у崕鐩告満
         }
     }
+    //鐧诲綍
     @Override
-    public void syncLogin(ArdCameras cameras) {
-
+    public Boolean login(ArdCameras ardCamera) {
+        boolean result = false;
+        try {
+            if (ardCamera != null) {
+                String factory = ardCamera.getFactory();
+                if (factory.equals("1")) {
+                    hikClientService.syncLogin(ardCamera);
+                    result=true;
+                } else if (factory.equals("2")) {
+                    result = dhClientService.login(ardCamera);
+                }
+            }
+        } catch (Exception ex) {
+            log.error("鐧诲綍寮傚父锛�" + ex.getMessage());
+            return false;
+        }
+        return result;
     }
-
-    @Override
-    public void asyncLogin(ArdCameras cameras) {
-
-    }
-
+    //娉ㄩ攢
     @Override
     public boolean logout(String cameraId) {
-        return false;
+        boolean result = false;
+        try {
+            ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
+            if (ardCamera != null) {
+                String factory = ardCamera.getFactory();
+                if (factory.equals("1")) {
+                    result = hikClientService.logout(cameraId);
+                } else if (factory.equals("2")) {
+                    result = dhClientService.logout(cameraId);
+                }
+            }
+        } catch (Exception ex) {
+            log.error("娉ㄩ攢寮傚父锛�" + ex.getMessage());
+            return false;
+        }
+        return result;
     }
+
     //鍦ㄧ嚎妫�娴�
     @Override
     public boolean isOnLine(CameraCmd cmd) {
@@ -84,6 +121,7 @@
         }
     }
     //浜戝彴鎺у埗
+    @SdkOperate
     @Override
     public boolean pTZControl(CameraCmd cmd) {
         try {
@@ -116,7 +154,7 @@
                 if (factory.equals("1")) {
                     result = hikClientService.setFocusPos(cmd);
                 } else if (factory.equals("2")) {
-
+                    result = dhClientService.setFocusPos(cmd);
                 }
             }
         } catch (Exception ex) {
@@ -127,23 +165,23 @@
     }
     //鑾峰彇鑱氱劍鍊�
     @Override
-    public Map<String, Object> getFocusPos(CameraCmd cmd) {
-        Map<String, Object> map = new HashMap<>();
+    public int getFocusPos(CameraCmd cmd) {
+        int result=0;
         try {
             String cameraId = cmd.getCameraId();
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
                 if (factory.equals("1")) {
-                    map = hikClientService.getFocusPos(cmd);
+                    result = hikClientService.getFocusPos(cmd);
                 } else if (factory.equals("2")) {
-
+                    result = dhClientService.getFocusPos(cmd);
                 }
             }
         } catch (Exception ex) {
             log.error("鑾峰彇鑱氱劍鍊煎紓甯革細" + ex.getMessage());
         }
-        return map;
+        return result;
     }
     //璁剧疆棰勭疆浣�
     @Override
@@ -187,8 +225,8 @@
     }
     //鑾峰彇鐮佹祦鍘嬬缉鍙傛暟
     @Override
-    public Map<String, String> getVideoCompressionCfg(CameraCmd cmd) {
-        Map<String, String> map = new HashMap<>();
+    public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) {
+        Map<String, Object> map = new HashMap<>();
         try {
             String cameraId = cmd.getCameraId();
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
@@ -197,7 +235,7 @@
                 if (factory.equals("1")) {
                     map = hikClientService.getVideoCompressionCfg(cmd);
                 } else if (factory.equals("2")) {
-
+                    map = dhClientService.getVideoCompressionCfg(cmd);
                 }
             }
         } catch (Exception ex) {
@@ -217,7 +255,7 @@
                 if (factory.equals("1")) {
                     result = hikClientService.controlDefogcfg(cmd);
                 } else if (factory.equals("2")) {
-
+                    //涓嶆敮鎸�
                 }
             }
         } catch (Exception ex) {
@@ -237,7 +275,7 @@
                 if (factory.equals("1")) {
                     result = hikClientService.controlInfrarecfg(cmd);
                 } else if (factory.equals("2")) {
-
+                    result = dhClientService.controlInfrarecfg(cmd);
                 }
             }
         } catch (Exception ex) {
@@ -297,7 +335,7 @@
                 if (factory.equals("1")) {
                     result = hikClientService.controlPTHeateRpwron(cmd);
                 } else if (factory.equals("2")) {
-
+                    //涓嶆敮鎸�
                 }
             }
         } catch (Exception ex) {
@@ -317,7 +355,7 @@
                 if (factory.equals("1")) {
                     result = hikClientService.controlCameraDeicing(cmd);
                 } else if (factory.equals("2")) {
-
+                    //涓嶆敮鎸�
                 }
             }
         } catch (Exception ex) {
@@ -325,46 +363,7 @@
         }
         return result;
     }
-    //鎿嶆帶閿佸畾
-    @Override
-    public boolean controlLock(CameraCmd cmd) {
-        boolean result = false;
-        try {
-            String cameraId = cmd.getCameraId();
-            ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
-            if (ardCamera != null) {
-                String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.controlLock(cmd);
-                } else if (factory.equals("2")) {
 
-                }
-            }
-        } catch (Exception ex) {
-            log.error("鎿嶆帶閿佸畾寮傚父锛�" + ex.getMessage());
-        }
-        return result;
-    }
-    //璁剧疆瑙i攣
-    @Override
-    public boolean controlUnLock(CameraCmd cmd) {
-        boolean result = false;
-        try {
-            String cameraId = cmd.getCameraId();
-            ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
-            if (ardCamera != null) {
-                String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.controlUnLock(cmd);
-                } else if (factory.equals("2")) {
-
-                }
-            }
-        } catch (Exception ex) {
-            log.error("璁剧疆瑙i攣寮傚父锛�" + ex.getMessage());
-        }
-        return result;
-    }
     //鑾峰彇浜戝彴閿佸畾淇℃伅
     @Override
     public int getPTZLockInfo(CameraCmd cmd) {
@@ -391,17 +390,23 @@
         return null;
     }
     //鎶撳浘
+    @SdkOperate
     @Override
     public String picCutCate(CameraCmd cmd) {
-        String url = "";
+       String url = "";
         try {
+            //鑾峰彇鎽勫儚澶碔D
             String cameraId = cmd.getCameraId();
+            //浠巖edis涓幏鍙栨憚鍍忓ご淇℃伅
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             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);
                 }
             }
@@ -451,6 +456,7 @@
         return map;
     }
     //璁剧疆ptz
+    @SdkOperate
     @Override
     public boolean setPtz(CameraCmd cmd) {
         boolean result = false;
@@ -471,6 +477,7 @@
         return result;
     }
     //璁剧疆闆舵柟浣嶈
+    @SdkOperate
     @Override
     public boolean setZeroPtz(CameraCmd cmd) {
         boolean result = false;
@@ -491,6 +498,7 @@
         return result;
     }
     //寮曞鎸囧悜鐩爣
+    @SdkOperate
     @Override
     public boolean guideTargetPosition(CameraCmd cmd) {
         boolean result = false;
@@ -510,6 +518,74 @@
         }
         return result;
     }
+
+    /**
+     * @鎻忚堪 鎿嶆帶閿佸畾
+     * @鍙傛暟 [userId, channelNum]
+     * @杩斿洖鍊� boolean
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/1/17 16:36
+     * @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾
+     */
+    @Override
+    @SdkOperate
+    public boolean controlLock(CameraCmd cmd) {
+        String cameraId = cmd.getCameraId();//鐢宠閿佺殑鐩告満
+        ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
+        Date now = new Date();
+        now.setTime(now.getTime() + cmd.getExpired() * 1000);
+        ardCameras.setOperatorExpired(now);//璁剧疆褰撳墠杩囨湡鏃堕棿
+        ardCamerasService.updateArdCameras(ardCameras);
+        return true;
+    }
+
+    /**
+     * @鎻忚堪 鎿嶆帶瑙i攣
+     * @鍙傛暟 [userId, channelNum]
+     * @杩斿洖鍊� boolean
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/6/30 15:36
+     * @淇敼浜哄拰鍏跺畠淇℃伅
+     */
+    @Override
+    public boolean controlUnLock(CameraCmd cmd) {
+        String cameraId = cmd.getCameraId();//鐢宠瑙i攣鐨勭浉鏈�
+        String operator = cmd.getOperator();//鐢宠鑰�
+        ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
+        if (ardCameras.getOperatorId().equals(operator)) {
+            //濡傛灉瑙i攣鐩告満鐨勫綋鍓嶇敤鎴锋槸鐢宠鑰咃紝鍒欐竻绌鸿鐩告満鐨勮繃鏈熸椂闂�
+            ardCameras.setOperatorExpired(null);
+            int i = ardCamerasService.updateArdCameras(ardCameras);
+            if (i > 0) {
+                log.debug(cameraId + "--瑙i攣鎴愬姛");
+            }
+        }
+        return true;
+    }
+
+
+    //褰曞儚
+    @SdkOperate
+    @Override
+    public String record(CameraCmd cmd) {
+        String url = "";
+        try {
+            String cameraId = cmd.getCameraId();
+            ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
+            if (ardCamera != null) {
+                String factory = ardCamera.getFactory();
+                if (factory.equals("1")) {
+                    url = hikClientService.record(cmd);
+                } else if (factory.equals("2")) {
+                    url = dhClientService.record(cmd);
+                }
+            }
+        } catch (Exception ex) {
+            log.error("褰曞儚寮傚父锛�" + ex.getMessage());
+        }
+        return url;
+    }
+
     //寮�濮嬪綍鍍�
     @Override
     public boolean recordStart(CameraCmd cmd) {
@@ -552,13 +628,23 @@
     }
     //鍋滄褰曞儚骞朵笉瀛樺叆minio
     @Override
-    public void recordStopNotToMinio(CameraCmd cmd) {
-
-    }
-
-    @Override
-    public List<ArdChannel> getCameraChannelList(ArdCameras camera) {
-        return null;
+    public boolean recordStopNotToMinio(CameraCmd cmd) {
+        boolean result = false;
+        try {
+            String cameraId = cmd.getCameraId();
+            ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
+            if (ardCamera != null) {
+                String factory = ardCamera.getFactory();
+                if (factory.equals("1")) {
+                    result = hikClientService.recordStopNotToMinio(cmd);
+                } else if (factory.equals("2")) {
+                    result = dhClientService.recordStopNotToMinio(cmd);
+                }
+            }
+        } catch (Exception ex) {
+            log.error("鍋滄褰曞儚寮傚父锛�" + ex.getMessage());
+        }
+        return result;
     }
 
     //鑾峰彇鐩告満鏋惰鍙傛暟
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/controller/DhSdkController.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/controller/DhSdkController.java
index c0039e5..94d0385 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/controller/DhSdkController.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/controller/DhSdkController.java
@@ -9,7 +9,6 @@
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.dhsdk.service.IDhClientService;
-import com.ruoyi.device.hiksdk.service.IHikClientService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.stereotype.Controller;
@@ -17,8 +16,6 @@
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import java.util.Map;
 
@@ -28,7 +25,7 @@
  * @Author: 鍒樿嫃涔�
  * @Date: 2023骞�10鏈�14鏃�10:34:58
  **/
-@Api(tags = "澶у崕SDK鎺ュ彛")
+
 @Controller
 @RequestMapping("/dh")
 @Anonymous
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/lib/enumeration/EM_FOCUS_LIMIT_SELECT_MODE.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/lib/enumeration/EM_FOCUS_LIMIT_SELECT_MODE.java
index 40520ef..6e99ee6 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/lib/enumeration/EM_FOCUS_LIMIT_SELECT_MODE.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/lib/enumeration/EM_FOCUS_LIMIT_SELECT_MODE.java
@@ -10,7 +10,7 @@
 /**
  Manual  鑷姩
 */
-EM_FOCUS_LIMIT_MODE_MANUAL(0," Manual  鑷姩"),
+EM_FOCUS_LIMIT_MODE_MANUAL(0," Manual 鑷姩"),
 /**
  Auto 鎵嬪姩
 */
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/lib/structure/CFG_VIDEO_IN_FOCUS_UNIT.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/lib/structure/CFG_VIDEO_IN_FOCUS_UNIT.java
index e8667be..3e1b252 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/lib/structure/CFG_VIDEO_IN_FOCUS_UNIT.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/lib/structure/CFG_VIDEO_IN_FOCUS_UNIT.java
@@ -2,33 +2,33 @@
 
 import com.ruoyi.device.dhsdk.lib.NetSDKLib;
 
-/** 
-* @author 291189
-* @description  鑱氱劍璁剧疆鍩烘湰淇℃伅鍗曞厓 
-* @date 2022/11/01 11:16:54
-*/
+/**
+ * @author 291189
+ * @description 鑱氱劍璁剧疆鍩烘湰淇℃伅鍗曞厓
+ * @date 2022/11/01 11:16:54
+ */
 public class CFG_VIDEO_IN_FOCUS_UNIT extends NetSDKLib.SdkStructure {
-/** 
-鑱氱劍妯″紡, 0-鍏抽棴, 1-杈呭姪鑱氱劍, 2-鑷姩鑱氱劍, 3-鍗婅嚜鍔ㄨ仛鐒�, 4-鎵嬪姩鑱氱劍
-*/
-public			int					nMode;
-/** 
-鑱氱劍鐏垫晱搴�, 0-楂�, 1-榛樿, 2-浣�
-*/
-public			int					nSensitivity;
-/** 
-绾㈠鍏夎仛鐒︿慨姝�, 0-涓嶄慨姝�, 1-淇, 2-鑷姩淇
-*/
-public			int					nIRCorrection;
-/** 
-鑱氱劍鏋侀檺 {@link com.ruoyi.device.dhsdk.lib.enumeration.EM_FOCUS_LIMIT_SELECT_MODE}
-*/
-public			int					emFocusMode;
-/** 
-鑱氱劍鏋侀檺鍊�, 鍗曚綅姣背
-*/
-public			int					nFocusLimit;
+    /**
+     * 鑱氱劍妯″紡, 0-鍏抽棴, 1-杈呭姪鑱氱劍, 2-鑷姩鑱氱劍, 3-鍗婅嚜鍔ㄨ仛鐒�, 4-鎵嬪姩鑱氱劍
+     */
+    public int nMode;
+    /**
+     * 鑱氱劍鐏垫晱搴�, 0-楂�, 1-榛樿, 2-浣�
+     */
+    public int nSensitivity;
+    /**
+     * 绾㈠鍏夎仛鐒︿慨姝�, 0-涓嶄慨姝�, 1-淇, 2-鑷姩淇
+     */
+    public int nIRCorrection;
+    /**
+     * 鑱氱劍鏋侀檺 {@link com.ruoyi.device.dhsdk.lib.enumeration.EM_FOCUS_LIMIT_SELECT_MODE}
+     */
+    public int emFocusMode;
+    /**
+     * 鑱氱劍鏋侀檺鍊�, 鍗曚綅姣背
+     */
+    public int nFocusLimit;
 
-public			CFG_VIDEO_IN_FOCUS_UNIT(){
-}
+    public CFG_VIDEO_IN_FOCUS_UNIT() {
+    }
 }
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java
index bb99075..cf30284 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java
@@ -1,8 +1,10 @@
 package com.ruoyi.device.dhsdk.module;
 
 import com.ruoyi.device.dhsdk.lib.NetSDKLib;
+import com.ruoyi.device.dhsdk.lib.ToolKits;
 import com.sun.jna.Structure;
 import com.sun.jna.ptr.IntByReference;
+
 import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint;
 
 /**
@@ -14,6 +16,7 @@
 public class ConfigModule {
     public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
     public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE;
+
     /**
      * 鏌ヨ璁惧鐘舵��
      */
@@ -27,28 +30,78 @@
         stuInfo.read();
         return true;
     }
+
+    /**
+     * 鑾峰彇鍗曚釜閰嶇疆
+     *
+     * @param hLoginHandle 鐧婚檰鍙ユ焺
+     * @param nChn         閫氶亾鍙凤紝-1 琛ㄧず鍏ㄩ�氶亾
+     * @param strCmd       閰嶇疆鍚嶇О
+     * @param cmdObject    閰嶇疆瀵瑰簲鐨勭粨鏋勪綋瀵硅薄
+     * @return 鎴愬姛杩斿洖 true
+     */
+    public static boolean GetNewDevConfig(NetSDKLib.LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) {
+        boolean result = false;
+        IntByReference error = new IntByReference(0);
+        int nBufferLen = 2 * 1024 * 1024;
+        byte[] strBuffer = new byte[nBufferLen];
+
+        if (netsdk.CLIENT_GetNewDevConfig(hLoginHandle, strCmd, nChn, strBuffer, nBufferLen, error, 3000)) {
+            cmdObject.write();
+            if (configsdk.CLIENT_ParseData(strCmd, strBuffer, cmdObject.getPointer(), cmdObject.size(), null)) {
+                cmdObject.read();
+                result = true;
+            } else {
+                System.err.println("Parse " + strCmd + " Config Failed!" + ToolKits.getErrorCodePrint());
+                result = false;
+            }
+        } else {
+            System.err.printf("Get %s Config Failed!Last Error = %s\n", strCmd, getErrorCodePrint());
+            result = false;
+        }
+
+        return result;
+    }
+
+    public static boolean GetDevConfig(NetSDKLib.LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) {
+        boolean result = true;
+        IntByReference error = new IntByReference(0);
+        int nBufferLen = 2 * 1024 * 1024;
+        byte[] strBuffer = new byte[nBufferLen];
+        cmdObject.write();
+        boolean bRet = netsdk.CLIENT_QueryNewSystemInfo(hLoginHandle, strCmd, nChn, strBuffer, cmdObject.size(), error,3000);
+        if (bRet) {
+            cmdObject.read();
+        } else {
+            System.err.printf("Get %s Config Failed!Last Error = %s\n", strCmd, getErrorCodePrint());
+            result = false;
+        }
+        return result;
+    }
+
     /**
      * 璁剧疆鍗曚釜閰嶇疆
+     *
      * @param hLoginHandle 鐧婚檰鍙ユ焺
-     * @param nChn 閫氶亾鍙凤紝-1 琛ㄧず鍏ㄩ�氶亾
-     * @param strCmd 閰嶇疆鍚嶇О
-     * @param cmdObject 閰嶇疆瀵瑰簲鐨勭粨鏋勪綋瀵硅薄
+     * @param nChn         閫氶亾鍙凤紝-1 琛ㄧず鍏ㄩ�氶亾
+     * @param strCmd       閰嶇疆鍚嶇О
+     * @param cmdObject    閰嶇疆瀵瑰簲鐨勭粨鏋勪綋瀵硅薄
      * @return 鎴愬姛杩斿洖 true
      */
     public static boolean SetDevConfig(NetSDKLib.LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) {
         boolean result = false;
-        int nBufferLen = 2*1024*1024;
+        int nBufferLen = 2 * 1024 * 1024;
         byte szBuffer[] = new byte[nBufferLen];
-        for(int i=0; i<nBufferLen; i++)szBuffer[i]=0;
+        for (int i = 0; i < nBufferLen; i++) szBuffer[i] = 0;
         IntByReference error = new IntByReference(0);
         IntByReference restart = new IntByReference(0);
         cmdObject.write();
         if (configsdk.CLIENT_PacketData(strCmd, cmdObject.getPointer(), cmdObject.size(), szBuffer, nBufferLen)) {
             cmdObject.read();
-            if( configsdk.CLIENT_SetNewDevConfig(hLoginHandle, strCmd , nChn , szBuffer, nBufferLen, error, restart, 3000)) {
+            if (netsdk.CLIENT_SetNewDevConfig(hLoginHandle, strCmd, nChn, szBuffer, nBufferLen, error, restart, 3000)) {
                 result = true;
             } else {
-                System.err.printf("Set %s Config Failed! Last Error = %s\n" , strCmd , getErrorCodePrint());
+                System.err.printf("Set %s Config Failed! Last Error = %s\n", strCmd, getErrorCodePrint());
                 result = false;
             }
         } else {
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java
index 31ecfe6..32fa9a0 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java
@@ -2,18 +2,27 @@
 
 import com.ruoyi.device.dhsdk.lib.NetSDKLib;
 
+import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk;
+
 /**
  * 浜戝彴鎺у埗鎺ュ彛瀹炵幇
  * 涓昏鏈� 锛氬叓涓柟鍚戞帶鍒躲�佸彉鍊嶃�佸彉鐒︺�佸厜鍦堝姛鑳�
  */
 public class PtzControlModule {
     public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
+    /**
+     * 鎸塪wPTZCommand绫诲瀷鎺у埗
+     */
+    public static boolean ptzControl(NetSDKLib.LLong m_hLoginHandle,int nChannelID, int dwPTZCommand,int lParam1, int lParam2,int lParam3, int dwStop) {
+        return  netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, dwPTZCommand, lParam1, lParam2, lParam3, dwStop);
+    }
+
 
     /**
      * 鍚戜笂
      */
-    public static boolean ptzControlUpStart(NetSDKLib.LLong lLoginID, int nChannelID, int lParam1, int lParam2) {
-        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+    public static boolean ptzControlUpStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam1, int lParam2) {
+        return netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                 NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
                 lParam1, lParam2, 0, 0);
     }
@@ -72,6 +81,7 @@
     /**
      * 鍚戝乏涓�
      */
+
     public static boolean ptzControlLeftUpStart(int nChannelID, int lParam1, int lParam2) {
         return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                 NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java
index a397132..a97ce4c 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java
@@ -18,25 +18,14 @@
      * 寮�濮嬮瑙�
      * \endif
      */
-    public static NetSDKLib.LLong startRealPlay(NetSDKLib.LLong m_hLoginHandle, int channel, int stream) {
-        NetSDKLib.LLong m_hPlayHandle = netsdk.CLIENT_RealPlayEx(m_hLoginHandle, channel, null, stream);
-        if (m_hPlayHandle.longValue() == 0) {
-            System.err.println("寮�濮嬪疄鏃堕瑙堝け璐ワ紝閿欒鐮�" + ToolKits.getErrorCodePrint());
-        } else {
-            System.out.println("Success to start realplay");
-            //  netsdk.CLIENT_SetRealDataCallBackEx(m_hPlayHandle, CbfRealDataCallBackEx.getInstance(),null, 0x0000001f);
-        }
-        return m_hPlayHandle;
-    }
 
-    public static NetSDKLib.LLong startRealPlay1(NetSDKLib.LLong m_hLoginHandle, int channel, String path) {
+    public static NetSDKLib.LLong startRealPlay(NetSDKLib.LLong m_hLoginHandle, int channel, String path) {
         NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE net_in_realplay_by_data_type = new NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE();
         net_in_realplay_by_data_type.nChannelID = channel;
         net_in_realplay_by_data_type.hWnd = null;
         net_in_realplay_by_data_type.rType = 0;
         net_in_realplay_by_data_type.emDataType = NetSDKLib.EM_REAL_DATA_TYPE.EM_REAL_DATA_TYPE_MP4;
         net_in_realplay_by_data_type.szSaveFileName = path;
-        //net_in_realplay_by_data_type.cbRealData = CbfRealDataCallBackEx.getInstance();
         NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE net_out_realplay_by_data_type = new NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE();
         NetSDKLib.LLong m_hPlayHandle = netsdk.CLIENT_RealPlayByDataType(m_hLoginHandle, net_in_realplay_by_data_type, net_out_realplay_by_data_type, 5000);
         if (m_hPlayHandle.longValue() == 0) {
@@ -49,7 +38,7 @@
 
     /**
      * \if ENGLISH_LANG
-     * Start RealPlay
+     * Stop RealPlay
      * \else
      * 鍋滄棰勮
      * \endif
@@ -110,4 +99,4 @@
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java
index 32ad998..7c9fd83 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java
@@ -1,11 +1,7 @@
 package com.ruoyi.device.dhsdk.service;
 
-import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
-import com.ruoyi.device.channel.domain.ArdChannel;
-
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -51,7 +47,7 @@
     String record(CameraCmd cmd);
     boolean recordStart(CameraCmd cmd);
     String recordStopToMinio(CameraCmd cmd);
-
+    boolean recordStopNotToMinio(CameraCmd cmd);
     //寮曞鐩爣浣嶇疆
     boolean guideTargetPosition(CameraCmd cmd);
 
@@ -61,4 +57,14 @@
     boolean setPreset(CameraCmd cmd);
     //鑱氱劍妯″紡
     boolean controlFocusMode(CameraCmd cmd);
+    //閫忛浘
+    boolean controlDefogcfg(CameraCmd cmd);
+    //绾㈠
+    boolean controlInfrarecfg(CameraCmd cmd);
+    //鑾峰彇鑱氱劍鍊�
+    int getFocusPos(CameraCmd cmd);
+    //璁剧疆鑱氱劍鍊�
+    boolean setFocusPos(CameraCmd cmd);
+    //鑾峰彇鐮佹祦鍘嬬缉鍙傛暟
+    Map<String, Object> getVideoCompressionCfg(CameraCmd cmd);
 }
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 b7aadfb..ed12a00 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
@@ -13,17 +13,21 @@
 import com.ruoyi.device.dhsdk.common.Res;
 import com.ruoyi.device.dhsdk.lib.NetSDKLib;
 import com.ruoyi.device.dhsdk.lib.NetSDKLib.LLong;
+import com.ruoyi.device.dhsdk.lib.enumeration.EM_FOCUS_LIMIT_SELECT_MODE;
+import com.ruoyi.device.dhsdk.lib.enumeration.EM_NEW_CONFIG;
 import com.ruoyi.device.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS;
 import com.ruoyi.device.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS_UNIT;
-import com.ruoyi.device.dhsdk.module.CapturePictureModule;
-import com.ruoyi.device.dhsdk.module.ConfigModule;
-import com.ruoyi.device.dhsdk.module.LoginModule;
-import com.ruoyi.device.dhsdk.module.RealPlayModule;
+import com.ruoyi.device.dhsdk.lib.structure.NET_ENCODE_VIDEO_INFO;
+import com.ruoyi.device.dhsdk.module.*;
 import com.ruoyi.device.dhsdk.service.IDhClientService;
 import com.ruoyi.device.hiksdk.common.GlobalVariable;
 import com.ruoyi.device.hiksdk.sdk.HCNetSDK;
+import com.ruoyi.media.domain.Vtdu;
+import com.ruoyi.media.service.IVtduService;
+import com.ruoyi.media.service.impl.VtduServiceImpl;
 import com.ruoyi.utils.gis.GisUtil;
 import com.ruoyi.utils.minio.MinioUtil;
+import com.ruoyi.utils.tools.ArdTool;
 import com.sun.jna.Pointer;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
@@ -31,20 +35,15 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.io.ByteArrayInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
 import java.text.DecimalFormat;
 import java.util.*;
 
-import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_DEVSTATE_ONLINE;
-import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_DEVSTATE_PTZ_LOCATION;
+import static com.ruoyi.device.dhsdk.lib.NetSDKLib.*;
 import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_MOVE_CONTROL;
 import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_SET_CONTROL;
 import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint;
 import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk;
-import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.NET_DVR_SET_PTZPOS;
 
 
 /**
@@ -61,10 +60,11 @@
     private IArdCamerasService ardCamerasService;
     @Resource
     private IArdChannelService ardChannelService;
+    @Resource
+    private IVtduService vtduService;
     @Value("${minio.endpoint}")
     private String minioEndPoint;
 
-    private Vector<String> chnlist = new Vector<String>();
     // 璁惧鏂嚎閫氱煡鍥炶皟
     private static DisConnect disConnect = new DisConnect();
     // 缃戠粶杩炴帴鎭㈠
@@ -125,13 +125,39 @@
             GlobalVariable.loginMap.put(camera.getId(), loginId);
             //鑾峰彇鏈�鏂伴�氶亾
             for (int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
-                chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
                 ArdChannel channel = new ArdChannel();
+                AV_CFG_ChannelName av_cfg_channelName = new AV_CFG_ChannelName();
+                boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName);
+                if (b) {
+                    String chanName = null;
+                    try {
+                        chanName = new String(av_cfg_channelName.szName, "GBK").trim();
+                    } catch (UnsupportedEncodingException e) {
+                        e.printStackTrace();
+                    }
+                    channel.setName(chanName);
+                } else {
+                    channel.setName("閫氶亾" + i);
+                }
                 channel.setDeviceId(camera.getId());
-                channel.setName("閫氶亾" + i);
-                channel.setId(IdUtils.simpleUUID());
                 channel.setChanNo(i);
                 ardChannelService.insertArdChannel(channel);
+
+                //閰嶇疆鍒版祦濯掍綋
+                String name = camera.getId() + "_" + channel.getChanNo();
+                String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/cam/realmonitor?channel=" + channel.getChanNo() + "&subtype=0";
+                Vtdu vtdu = vtduService.selectVtduByName(name);
+                if (vtdu != null) {
+                    vtduService.deleteVtduByName(name);
+                }
+                //娣诲姞鍒版祦濯掍綋
+                vtdu = new Vtdu();
+                vtdu.setRtspSource(rtspSource);
+                vtdu.setName(camera.getId() + "_" + channel.getChanNo());
+                vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
+                vtdu.setMode("1");//榛樿CPU杞В鐮�
+                vtdu.setCameraId(camera.getId());
+                vtduService.insertVtdu(vtdu);
             }
         } else {
             //log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触");
@@ -210,58 +236,58 @@
         switch (code) {
             /*鏂瑰悜*/
             case 1:
-                dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP;
+                dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP;
                 break;
             case 2:
-                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL;
+                dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_UP_CONTROL;
                 break;
             case 3:
-                dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP;
+                dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP;
                 break;
             case 4:
-                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL;
+                dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL;
                 break;
             case 5:
-                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_LOOP_CONTROL;
+                dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_POINT_LOOP_CONTROL;
                 break;
             case 6:
-                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL;
+                dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL;
                 break;
             case 7:
-                dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN;
+                dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN;
                 break;
             case 8:
-                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL;
+                dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL;
                 break;
             case 9:
-                dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN;
+                dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN;
                 break;
             /*鐒﹁窛*/
             case 10:
-                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL;
+                dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL;
                 break;
             case 11:
-                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL;
+                dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL;
                 break;
             /*鐒︾偣*/
             case 12:
-                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL;
+                dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL;
                 break;
             case 13:
-                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL;
+                dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL;
                 break;
             /*鍏夊湀*/
             case 14:
-                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL;
+                dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL;
                 break;
             case 15:
-                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL;
+                dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL;
                 break;
             case 16:
-                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LAMP_CONTROL;
+                dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_LAMP_CONTROL;
                 break;
         }
-        boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop);
+        boolean bool = PtzControlModule.ptzControl(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop);
         if (!bool) {
             log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint());
         }
@@ -409,7 +435,7 @@
             if (enable) {
                 LLong lRealHandle = new LLong(0);
                 if (!GlobalVariable.previewMap.containsKey(cameraId)) {
-                    lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo, 0);
+                    lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo - 1, path);
                     if (lRealHandle.longValue() <= 0) {
                         log.error("鍙栨祦澶辫触" + getErrorCodePrint());
                         return "";
@@ -417,15 +443,11 @@
                     log.debug("鍙栨祦鎴愬姛");
                     GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue());
                 }
-                if (!netsdk.CLIENT_SaveRealData(lRealHandle, path)) {
-                    log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负:  " + getErrorCodePrint());
-                    return "";
-                }
                 log.debug("褰曞儚寮�濮�");
             } else {
                 if (GlobalVariable.previewMap.containsKey(cameraId)) {
                     LLong lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
-                    boolean b = netsdk.CLIENT_StopSaveRealData(lRealHandle);
+                    RealPlayModule.stopRealPlay(lRealHandle);
                     GlobalVariable.previewMap.remove(cameraId);
                 }
                 log.debug("褰曞儚鍋滄");
@@ -450,11 +472,11 @@
             LLong lRealHandle;
             if (GlobalVariable.previewMap.containsKey(cameraId)) {
                 lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
-                netsdk.CLIENT_StopRealPlayEx(lRealHandle);
+                RealPlayModule.stopRealPlay(lRealHandle);
                 GlobalVariable.previewMap.remove(cameraId);
                 log.debug("鍋滄褰撳墠褰曞儚");
             }
-            lRealHandle = RealPlayModule.startRealPlay1(loginId, chanNo - 1, path);
+            lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo - 1, path);
             if (lRealHandle.longValue() <= 0) {
                 log.error("鍙栨祦澶辫触" + getErrorCodePrint());
             }
@@ -485,7 +507,7 @@
             LLong lRealHandle;
             if (GlobalVariable.previewMap.containsKey(cameraId)) {
                 lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
-                netsdk.CLIENT_StopRealPlayEx(lRealHandle);
+                RealPlayModule.stopRealPlay(lRealHandle);
                 GlobalVariable.previewMap.remove(cameraId);
                 log.debug("鍋滄褰撳墠褰曞儚");
             }
@@ -503,6 +525,29 @@
             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;
     }
 
     /**
@@ -595,14 +640,21 @@
         LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
         try {
             CFG_VIDEO_IN_FOCUS cfg_video_in_focus = new CFG_VIDEO_IN_FOCUS();
-            CFG_VIDEO_IN_FOCUS_UNIT[] stVideoInFocusUnit = new CFG_VIDEO_IN_FOCUS_UNIT[32];
-            if (enable) {
-                stVideoInFocusUnit[0].nMode = 4;//鎵嬪姩鑱氱劍
-            } else {
-                stVideoInFocusUnit[0].nMode = 2;//鎵嬪姩鑱氱劍
+            cfg_video_in_focus.nVideoInFocusRealNum = 3;//閰嶇疆浣跨敤涓暟
+            for (int i = 0; i < 3; i++) {
+                cfg_video_in_focus.stVideoInFocusUnit[i].nSensitivity = 1;//鑱氱劍鐏垫晱搴�, 0-楂�, 1-榛樿, 2-浣�
+
+                cfg_video_in_focus.stVideoInFocusUnit[i].nIRCorrection = 2;//绾㈠鍏夎仛鐒︿慨姝�, 0-涓嶄慨姝�, 1-淇, 2-鑷姩淇
+                cfg_video_in_focus.stVideoInFocusUnit[i].nFocusLimit = 10000;//鑱氱劍鏋侀檺鍊�, 鍗曚綅姣背
+                if (enable) {//鑱氱劍妯″紡, 0-鍏抽棴, 1-杈呭姪鑱氱劍, 2-鑷姩鑱氱劍, 3-鍗婅嚜鍔ㄨ仛鐒�, 4-鎵嬪姩鑱氱劍
+                    cfg_video_in_focus.stVideoInFocusUnit[i].nMode = 4;//鎵嬪姩鑱氱劍
+                    cfg_video_in_focus.stVideoInFocusUnit[i].emFocusMode = 1;//鑱氱劍鏋侀檺Manual
+                } else {
+                    cfg_video_in_focus.stVideoInFocusUnit[i].nMode = 2;//鑷姩鑱氱劍
+                    cfg_video_in_focus.stVideoInFocusUnit[i].emFocusMode = 0;//鑱氱劍鏋侀檺Auto
+                }
             }
             cfg_video_in_focus.nChannelIndex = chanNo - 1;
-            cfg_video_in_focus.stVideoInFocusUnit = stVideoInFocusUnit;
             boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, NetSDKLib.CFG_CMD_VIDEOIN_FOCUS, cfg_video_in_focus);
             if (!bool) {
                 log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint());
@@ -614,6 +666,176 @@
         }
     }
 
+    //閫忛浘
+    @Override
+    public boolean controlDefogcfg(CameraCmd cmd) {
+        String cameraId = cmd.getCameraId();
+        Integer chanNo = cmd.getChanNo();
+        boolean enable = cmd.isEnable();
+        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+            return false;
+        }
+        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+        try {
+            EM_NEW_CONFIG config = EM_NEW_CONFIG.CFG_CMD_VIDEOINDEFOG;
+            //CFG_VIDEOINDEFOG_LIST cfg_videoindefog_list=new CFG_VIDEOINDEFOG_LIST();
+            boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, config.getValue(), null);
+            if (!bool) {
+                log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint());
+            }
+            return bool;
+        } catch (Exception ex) {
+            log.error("鍒囨崲閫忛浘寮傚父:" + ex.getMessage());
+            return false;
+        }
+    }
+
+    //绾㈠
+    @Override
+    public boolean controlInfrarecfg(CameraCmd cmd) {
+        String cameraId = cmd.getCameraId();
+        Integer chanNo = cmd.getChanNo();
+        boolean enable = cmd.isEnable();
+        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+            return false;
+        }
+        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+        try {
+            CFG_LIGHTING_INFO cfg_lighting_info = new CFG_LIGHTING_INFO();
+            cfg_lighting_info.nLightingDetailNum = 1;
+            if (enable) {
+                cfg_lighting_info.stuLightingDetail[0].emMode = EM_CFG_LIGHTING_MODE.EM_CFG_LIGHTING_MODE_MANUAL;
+            } else {
+                cfg_lighting_info.stuLightingDetail[0].emMode = EM_CFG_LIGHTING_MODE.EM_CFG_LIGHTING_MODE_OFF;
+            }
+            boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, CFG_CMD_LIGHTING, cfg_lighting_info);
+            if (!bool) {
+                log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint());
+            }
+            return bool;
+        } catch (Exception ex) {
+            log.error("鍒囨崲绾㈠寮傚父:" + ex.getMessage());
+            return false;
+        }
+    }
+
+    //鑾峰彇鑱氱劍鍊�
+    @Override
+    public int getFocusPos(CameraCmd cmd) {
+        int result = 0;
+        try {
+            String cameraId = cmd.getCameraId();
+            Integer chanNo = cmd.getChanNo();
+            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+                return result;
+            }
+            LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+            NET_PTZ_LOCATION_INFO net_ptz_location_info = new NET_PTZ_LOCATION_INFO();
+            net_ptz_location_info.nChannelID = chanNo - 1;
+            boolean bool = ConfigModule.queryDevState(loginId, NET_DEVSTATE_PTZ_LOCATION, net_ptz_location_info);
+            if (!bool) {
+                log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint());
+            }
+            result = net_ptz_location_info.nFocusMapValue;
+        } catch (Exception ex) {
+            log.error("鑾峰彇鑱氱劍鍊煎紓甯�:" + ex.getMessage());
+        }
+        return result;
+    }
+
+    //璁剧疆鑱氱劍鍊�
+    @Override
+    public boolean setFocusPos(CameraCmd cmd) {
+        String cameraId = cmd.getCameraId();
+        Integer chanNo = cmd.getChanNo();
+        boolean enable = cmd.isEnable();
+        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+            return false;
+        }
+        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+        try {
+            CFG_LIGHTING_INFO cfg_lighting_info = new CFG_LIGHTING_INFO();
+            cfg_lighting_info.nLightingDetailNum = 1;
+            if (enable) {
+                cfg_lighting_info.stuLightingDetail[0].emMode = EM_CFG_LIGHTING_MODE.EM_CFG_LIGHTING_MODE_MANUAL;
+            } else {
+                cfg_lighting_info.stuLightingDetail[0].emMode = EM_CFG_LIGHTING_MODE.EM_CFG_LIGHTING_MODE_OFF;
+            }
+            boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, CFG_CMD_LIGHTING, cfg_lighting_info);
+            if (!bool) {
+                log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint());
+            }
+            return bool;
+        } catch (Exception ex) {
+            log.error("璁剧疆鑱氱劍鍊煎紓甯�:" + ex.getMessage());
+            return false;
+        }
+    }
+
+    //鑾峰彇鐮佹祦鍘嬬缉鍙傛暟
+    @Override
+    public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) {
+        Map<String, Object> map = new HashMap<>();
+        String cameraId = cmd.getCameraId();
+        Integer chanNo = cmd.getChanNo();
+        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+            return null;
+        }
+        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+        CFG_ENCODE_INFO cfg_encode_info = new CFG_ENCODE_INFO();
+        cfg_encode_info.nChannelID = chanNo - 1;
+        boolean b = ConfigModule.GetNewDevConfig(loginId, chanNo - 1, CFG_CMD_ENCODE, cfg_encode_info);
+        if (b) {
+            int emCompression = cfg_encode_info.stuMainStream[0].stuVideoFormat.emCompression;//瑙嗛鏍煎紡
+            String videoEncType = "";
+            switch (emCompression) {
+                case 0:
+                    videoEncType = "MPEG4";
+                    break;
+                case 1:
+                    videoEncType = "MS-MPEG4";
+                    break;
+                case 2:
+                    videoEncType = "MPEG2";
+                    break;
+                case 3:
+                    videoEncType = "MPEG1";
+                    break;
+                case 4:
+                    videoEncType = "H.263";
+                    break;
+                case 5:
+                    videoEncType = "MJPG";
+                    break;
+                case 6:
+                    videoEncType = "FCC-MPEG4";
+                    break;
+                case 7:
+                    videoEncType = "鏍囧噯h264";
+                    break;
+                case 8:
+                    videoEncType = "鏍囧噯h265";
+                    break;
+                case 9:
+                    videoEncType = "SVAC";
+                    break;
+                default:
+                    videoEncType = "鏈煡";
+                    break;
+            }
+            int nBitRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nBitRate;
+            int nWidth = cfg_encode_info.stuMainStream[0].stuVideoFormat.nWidth;
+            int nHeight = cfg_encode_info.stuMainStream[0].stuVideoFormat.nHeight;
+            String resolution = nWidth + "*" + nHeight;
+            float nFrameRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nFrameRate;
+            map.put("resolution", resolution);//鍒嗚鲸鐜�
+            map.put("videoBitrate", String.valueOf(nBitRate));//姣旂壒鐜�
+            map.put("videoEncType", videoEncType);//缂栫爜
+            map.put("nFrameRate", String.valueOf(nFrameRate));//甯х巼
+        }
+        return map;
+    }
+
     // 璁惧鏂嚎鍥炶皟: 褰撹澶囧嚭鐜版柇绾挎椂锛孲DK浼氳皟鐢ㄨ鍑芥暟
     private static class DisConnect implements NetSDKLib.fDisConnect {
         public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/HikSdkController.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/HikSdkController.java
index 6f9fbcb..7ccc486 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/HikSdkController.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/HikSdkController.java
@@ -29,7 +29,6 @@
  * @Date: 2023骞�01鏈�17鏃� 12:04
  * @Version: 1.0
  **/
-@Api(tags = "娴峰悍SDK鎺ュ彛")
 @Controller
 @RequestMapping("/hik")
 @Anonymous
@@ -45,6 +44,7 @@
     private String preview() {
         return "preview";
     }
+
     @RequestMapping("/index")
     private String index() {
         return "test";
@@ -115,8 +115,8 @@
     public @ResponseBody
     AjaxResult getFocusPos(@RequestBody CameraCmd cmd) {
         cmd.setOperator(SecurityUtils.getUserId());
-        Map<String, Object> Map = sdk.getFocusPos(cmd);
-        return AjaxResult.success("鑾峰彇鑱氱劍鍊�", Map);
+        int focus = sdk.getFocusPos(cmd);
+        return AjaxResult.success("鑾峰彇鑱氱劍鍊�", focus);
     }
 
     @ApiOperation("璁剧疆鑱氱劍鍊�")
@@ -182,25 +182,6 @@
         return toAjax(sdk.setZeroPtz(cmd));
     }
 
-    @ApiOperation("璁剧疆閿佸畾")
-    @PostMapping("/setPTZLock")
-    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.expired"})
-    @Log(title = "璁剧疆閿佸畾", businessType = BusinessType.CONTROL)
-    public @ResponseBody
-    AjaxResult setPTZLock(@RequestBody CameraCmd cmd) {
-        cmd.setOperator(SecurityUtils.getUserId());
-        return AjaxResult.success(sdk.controlLock(cmd));
-    }
-
-    @ApiOperation("璁剧疆瑙i攣")
-    @PostMapping("/setPTZUnLock")
-    @ApiOperationSupport(includeParameters = {"cmd.cameraId"})
-    @Log(title = "璁剧疆瑙i攣", businessType = BusinessType.CONTROL)
-    public @ResponseBody
-    AjaxResult setPTZUnLock(@RequestBody CameraCmd cmd) {
-        cmd.setOperator(SecurityUtils.getUserId());
-        return AjaxResult.success(sdk.controlUnLock(cmd));
-    }
 
     @ApiOperation("鑾峰彇浜戝彴閿佸畾淇℃伅")
     @PostMapping("/getPTZLockInfo")
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java
index d3dbd9f..7754aea 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java
@@ -1802,7 +1802,7 @@
     public static class NET_DVR_COMPRESSIONCFG_V30 extends HIKSDKStructure {
         public int dwSize;
         public NET_DVR_COMPRESSION_INFO_V30 struNormHighRecordPara;    //褰曞儚 瀵瑰簲8000鐨勬櫘閫�
-        public NET_DVR_COMPRESSION_INFO_V30 struRes;   //淇濈暀 String[28];
+        public NET_DVR_COMPRESSION_INFO_V30 struRes;                   //淇濈暀 String[28];
         public NET_DVR_COMPRESSION_INFO_V30 struEventRecordPara;       //浜嬩欢瑙﹀彂鍘嬬缉鍙傛暟
         public NET_DVR_COMPRESSION_INFO_V30 struNetPara;               //缃戜紶(瀛愮爜娴�)
 
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java
index a385d70..5c7bcf1 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java
@@ -68,22 +68,17 @@
                     String name = camera.getId() + "_" + channel.getChanNo();
                     String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
                     Vtdu vtdu = vtduService.selectVtduByName(name);
-                    if (vtdu == null) {
-                        //娣诲姞鍒版祦濯掍綋
-                        vtdu = new Vtdu();
-                        vtdu.setRtspSource(rtspSource);
-                        vtdu.setName(camera.getId() + "_" + channel.getChanNo());
-                        vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
-                        vtdu.setMode("1");//榛樿CPU杞В鐮�
-                        vtdu.setCameraId(camera.getId());
-                        vtduService.insertVtdu(vtdu);
-                    } else {
-                        if (!rtspSource.equals(vtdu.getRtspSource())) {
-                            //鏇存柊rtsp鍦板潃
-                            vtdu.setRtspSource(rtspSource);
-                            vtduService.updateVtdu(vtdu);
-                        }
+                    if (vtdu != null) {
+                        vtduService.deleteVtduByName(name);
                     }
+                    //娣诲姞鍒版祦濯掍綋
+                    vtdu = new Vtdu();
+                    vtdu.setRtspSource(rtspSource);
+                    vtdu.setName(camera.getId() + "_" + channel.getChanNo());
+                    vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
+                    vtdu.setMode("1");//榛樿CPU杞В鐮�
+                    vtdu.setCameraId(camera.getId());
+                    vtduService.insertVtdu(vtdu);
                 }
             }
             //鍒涘缓寮曞闃熷垪
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
index b740fc8..a5606ed 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
@@ -40,7 +40,7 @@
     boolean setFocusPos(CameraCmd cmd);
 
     //鑾峰彇鑱氱劍鍊�
-    Map<String, Object> getFocusPos(CameraCmd cmd);
+    int getFocusPos(CameraCmd cmd);
 
     //璁剧疆棰勭疆浣�
     boolean setPreset(CameraCmd cmd);
@@ -49,12 +49,12 @@
     boolean gotoPreset(CameraCmd cmd);
 
     //鑾峰彇鐮佹祦鍘嬬缉鍙傛暟
-    Map<String, String> getVideoCompressionCfg(CameraCmd cmd);
+    Map<String, Object> getVideoCompressionCfg(CameraCmd cmd);
 
     //閫忛浘
     boolean controlDefogcfg(CameraCmd cmd);
 
-    //绾㈠?
+    //绾㈠
     boolean controlInfrarecfg(CameraCmd cmd);
 
     //鑱氱劍妯″紡
@@ -68,12 +68,6 @@
 
     //闀滃ご闄ゅ啺
     boolean controlCameraDeicing(CameraCmd cmd);
-
-    //閰嶇疆閿佸畾
-    boolean controlLock(CameraCmd cmd);
-
-    //閰嶇疆瑙i攣
-    boolean controlUnLock(CameraCmd cmd);
 
     //鑾峰彇浜戝彴閿佸畾淇℃伅
     int getPTZLockInfo(CameraCmd cmd);
@@ -109,7 +103,7 @@
     String recordStopToMinio(CameraCmd cmd);
 
     //鍋滄褰曞儚-涓嶄笂浼爉inio
-    void recordStopNotToMinio(CameraCmd cmd);
+    boolean recordStopNotToMinio(CameraCmd cmd);
 
     //鑾峰彇鐩告満閫氶亾淇℃伅
     public List<ArdChannel> getCameraChannelList(ArdCameras camera);
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
index 126acde..b937b71 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -5,7 +5,6 @@
 import com.ruoyi.common.annotation.SdkOperate;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.common.utils.file.MimeTypeUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.service.IArdCamerasService;
@@ -26,9 +25,7 @@
 import com.sun.jna.Pointer;
 import com.sun.jna.ptr.IntByReference;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-
 import java.util.Base64;
 import javax.annotation.Resource;
 import java.io.*;
@@ -184,22 +181,17 @@
                     String name = camera.getId() + "_" + channel.getChanNo();
                     String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
                     Vtdu vtdu = vtduService.selectVtduByName(name);
-                    if (vtdu == null) {
-                        //娣诲姞鍒版祦濯掍綋
-                        vtdu = new Vtdu();
-                        vtdu.setRtspSource(rtspSource);
-                        vtdu.setName(camera.getId() + "_" + channel.getChanNo());
-                        vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
-                        vtdu.setMode("1");//榛樿CPU杞В鐮�
-                        vtdu.setCameraId(camera.getId());
-                        vtduService.insertVtdu(vtdu);
-                    } else {
-                        if (!rtspSource.equals(vtdu.getRtspSource())) {
-                            //鏇存柊rtsp鍦板潃
-                            vtdu.setRtspSource(rtspSource);
-                            vtduService.updateVtdu(vtdu);
-                        }
+                    if (vtdu != null) {
+                        vtduService.deleteVtduByName(name);
                     }
+                    //娣诲姞鍒版祦濯掍綋
+                    vtdu = new Vtdu();
+                    vtdu.setRtspSource(rtspSource);
+                    vtdu.setName(camera.getId() + "_" + channel.getChanNo());
+                    vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
+                    vtdu.setMode("1");//榛樿CPU杞В鐮�
+                    vtdu.setCameraId(camera.getId());
+                    vtduService.insertVtdu(vtdu);
                 }
             }
             //鍒涘缓寮曞闃熷垪
@@ -285,7 +277,7 @@
             for (ArdCameras camera : ardCameras) {
                 Thread.sleep(500);
                 //寮傛鐧诲綍
-                asyncLogin(camera);
+                syncLogin(camera);
             }
         } catch (Exception ex) {
             log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
@@ -305,7 +297,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         boolean b = hCNetSDK.NET_DVR_Logout(userId);
         if (b) {
             GlobalVariable.loginMap.remove(cameraId);
@@ -325,7 +317,7 @@
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return false;
             }
-            Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+            Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
             return hCNetSDK.NET_DVR_RemoteControl(userId, NET_DVR_CHECK_USER_STATUS, null, 0);
         } catch (Exception ex) {
             log.error("妫�娴嬪湪绾垮紓甯革細" + ex.getMessage());
@@ -344,7 +336,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public boolean pTZControlWithSpeed(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -354,7 +345,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         int dwStop;
         if (enable) {
             dwStop = 0;//寮�鍚�
@@ -431,7 +422,6 @@
      * @param cmd 鐩告満鍛戒护
      */
     @Override
-    @SdkOperate
     public boolean setFocusPos(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer channelNum = cmd.getChanNo();
@@ -440,7 +430,7 @@
             return false;
         }
         // 鑾峰彇鍙傛暟
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG();
         HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO();
         struGisInfo.struPtzPosEx.dwFocus = dwFocusPos;
@@ -467,14 +457,15 @@
      * @param cmd 鐩告満鍛戒护
      */
     @Override
-    public Map<String, Object> getFocusPos(CameraCmd cmd) {
+    public int getFocusPos(CameraCmd cmd) {
+        int result = 0;
         String cameraId = cmd.getCameraId();
         Integer channelNum = cmd.getChanNo();
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
-            return new HashMap<>();
+            return result;
         }
         // 鑾峰彇鍙傛暟
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG();
         HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO();
         struStdCfg.read();
@@ -488,13 +479,12 @@
         if (!bool) {
             int code = hCNetSDK.NET_DVR_GetLastError();
             log.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code);
-            return new HashMap<>();
+            return result;
         } else {
             struGisInfo.read();
-            Map<String, Object> map = new HashMap<>();
-            map.put("dwFocus", struGisInfo.struPtzPosEx.dwFocus);
-            return map;
+            result = struGisInfo.struPtzPosEx.dwFocus;
         }
+        return result;
     }
 
     /**
@@ -503,7 +493,6 @@
      * @param cmd 鐩告満鍛戒护
      */
     @Override
-    @SdkOperate
     public boolean setPreset(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer channelNum = cmd.getChanNo();
@@ -511,7 +500,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, SET_PRESET, PresetIndex);
         if (!bool) {
             int code = hCNetSDK.NET_DVR_GetLastError();
@@ -526,7 +515,6 @@
      * @param cmd 鐩告満鍛戒护
      */
     @Override
-    @SdkOperate
     public boolean gotoPreset(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer channelNum = cmd.getChanNo();
@@ -534,7 +522,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, GOTO_PRESET, PresetIndex);
         if (!bool) {
             int code = hCNetSDK.NET_DVR_GetLastError();
@@ -552,15 +540,15 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    public Map<String, String> getVideoCompressionCfg(CameraCmd cmd) {
+    public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer chanNo = cmd.getChanNo();
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return null;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
 
-        Map<String, String> map = new HashMap<>();
+        Map<String, Object> map = new HashMap<>();
         NET_DVR_COMPRESSIONCFG_V30 compressioncfg = new NET_DVR_COMPRESSIONCFG_V30();
         compressioncfg.write();
         Pointer pioint = compressioncfg.getPointer();
@@ -617,85 +605,85 @@
                         videoBitrate = "淇濈暀";
                         break;
                     case 1:
-                        videoBitrate = "16K(淇濈暀)";
+                        videoBitrate = "16(淇濈暀)";
                         break;
                     case 2:
-                        videoBitrate = "32K";
+                        videoBitrate = "32";
                         break;
                     case 3:
-                        videoBitrate = "48k";
+                        videoBitrate = "48";
                         break;
                     case 4:
-                        videoBitrate = "64k";
+                        videoBitrate = "64";
                         break;
                     case 5:
-                        videoBitrate = "80k";
+                        videoBitrate = "80";
                         break;
                     case 6:
-                        videoBitrate = "96k";
+                        videoBitrate = "96";
                         break;
                     case 7:
-                        videoBitrate = "128k";
+                        videoBitrate = "128";
                         break;
                     case 8:
-                        videoBitrate = "160k";
+                        videoBitrate = "160";
                         break;
                     case 9:
-                        videoBitrate = "192k";
+                        videoBitrate = "192";
                         break;
                     case 10:
-                        videoBitrate = "224k";
+                        videoBitrate = "224";
                         break;
                     case 11:
-                        videoBitrate = "256K";
+                        videoBitrate = "256";
                         break;
                     case 12:
-                        videoBitrate = "320K";
+                        videoBitrate = "320";
                         break;
                     case 13:
-                        videoBitrate = "384K";
+                        videoBitrate = "384";
                         break;
                     case 14:
-                        videoBitrate = "448K";
+                        videoBitrate = "448";
                         break;
                     case 15:
-                        videoBitrate = "512K";
+                        videoBitrate = "512";
                         break;
                     case 16:
-                        videoBitrate = "640K";
+                        videoBitrate = "640";
                         break;
                     case 17:
-                        videoBitrate = "768K";
+                        videoBitrate = "768";
                         break;
                     case 18:
-                        videoBitrate = "896K";
+                        videoBitrate = "896";
                         break;
                     case 19:
-                        videoBitrate = "1024K";
+                        videoBitrate = "1024";
                         break;
                     case 20:
-                        videoBitrate = "1280K";
+                        videoBitrate = "1280";
                         break;
                     case 21:
-                        videoBitrate = "1536K";
+                        videoBitrate = "1536";
                         break;
                     case 22:
-                        videoBitrate = "1792K";
+                        videoBitrate = "1792";
                         break;
                     case 23:
                         videoBitrate = "2048K";
                         break;
                     case 24:
-                        videoBitrate = "3072K";
+                        videoBitrate = "3072";
                         break;
                     case 25:
-                        videoBitrate = "4096K";
+                        videoBitrate = "4096";
                         break;
                     case 26:
-                        videoBitrate = "8192K";
+                        videoBitrate = "8192";
                         break;
                     case 27:
-                        videoBitrate = "16384K";
+                        videoBitrate = "16384";
                         break;
                     default:
                         videoBitrate = "鍏朵粬";
@@ -705,43 +693,43 @@
                 String resolution = "";
                 switch (compressioncfg.struNormHighRecordPara.byResolution) {
                     case 0:
-                        resolution = "DCIF(528*384/528*320)";
+                        resolution = "528*384/528*320";
                         break;
                     case 1:
-                        resolution = "CIF(352*288/352*240)";
+                        resolution = "352*288/352*240";
                         break;
                     case 2:
-                        resolution = "QCIF(176*144/176*120)";
+                        resolution = "176*144/176*120";
                         break;
                     case 3:
-                        resolution = "4CIF(704*576/704*480)";
+                        resolution = "704*576/704*480";
                         break;
                     case 4:
-                        resolution = "2CIF(704*288/704*240)";
+                        resolution = "704*288/704*240";
                         break;
                     case 6:
-                        resolution = "QVGA(320*240)";
+                        resolution = "320*240";
                         break;
                     case 7:
-                        resolution = "QQVGA(160*120)";
+                        resolution = "160*120";
                         break;
                     case 16:
-                        resolution = "VGA(640*480)";
+                        resolution = "640*480";
                         break;
                     case 17:
-                        resolution = "UXGA(1600*1200)";
+                        resolution = "1600*1200";
                         break;
                     case 18:
-                        resolution = "SVGA(800*600)";
+                        resolution = "800*600";
                         break;
                     case 19:
-                        resolution = "HD720P(1280*720)";
+                        resolution = "1280*720";
                         break;
                     case 20:
-                        resolution = "XVGA(1280*960)";
+                        resolution = "1280*960";
                         break;
                     case 21:
-                        resolution = "HD900P(1600*900)";
+                        resolution = "1600*900";
                         break;
                     case 22:
                         resolution = "1360*1024";
@@ -753,7 +741,7 @@
                         resolution = "1920*1920";
                         break;
                     case 27:
-                        resolution = "1920*1080p";
+                        resolution = "1920*1080";
                         break;
                     case 28:
                         resolution = "2560*1920";
@@ -768,10 +756,80 @@
                         resolution = "涓嶅湪褰撳墠鍒嗚鲸鐜囩储寮曪紝璇疯仈绯荤鐞嗗憳娣诲姞";
                         break;
                 }
-                map.put("resolution", resolution);
-                map.put("videoBitrate", videoBitrate);
-                map.put("videoEncType", videoEncType);
-                map.put("streamType", streamType);
+                //甯х巼
+                String nFrameRate = "";
+                switch (compressioncfg.struNormHighRecordPara.dwVideoFrameRate) {
+                    case 0:
+                        nFrameRate = "0";
+                        break;
+                    case 1:
+                        nFrameRate = "1/16";
+                        break;
+                    case 2:
+                        nFrameRate = "1/8";
+                        break;
+                    case 3:
+                        nFrameRate = "1/4";
+                        break;
+                    case 4:
+                        nFrameRate = "1/2";
+                        break;
+                    case 5:
+                        nFrameRate = "1";
+                        break;
+                    case 6:
+                        nFrameRate = "2";
+                        break;
+                    case 7:
+                        nFrameRate = "4";
+                        break;
+                    case 8:
+                        nFrameRate = "6";
+                        break;
+                    case 9:
+                        nFrameRate = "8";
+                        break;
+                    case 10:
+                        nFrameRate = "10";
+                        break;
+                    case 11:
+                        nFrameRate = "12";
+                        break;
+                    case 12:
+                        nFrameRate = "16";
+                        break;
+                    case 13:
+                        nFrameRate = "20";
+                        break;
+                    case 14:
+                        nFrameRate = "15";
+                        break;
+                    case 15:
+                        nFrameRate = "18";
+                        break;
+                    case 16:
+                        nFrameRate = "22";
+                        break;
+                    case 17:
+                        nFrameRate = "25";
+                        break;
+                    case 18:
+                        nFrameRate = "30";
+                        break;
+                    case 19:
+                        nFrameRate = "35";
+                        break;
+                    case 20:
+                        nFrameRate = "40";
+                        break;
+                    default:
+                        nFrameRate = "鏈煡";
+                        break;
+                }
+                map.put("resolution", resolution);//鍒嗚鲸鐜�
+                map.put("videoBitrate", videoBitrate);//姣旂壒鐜�
+                map.put("videoEncType", videoEncType);//缂栫爜
+                map.put("nFrameRate", nFrameRate);//甯х巼
 
             } else {
                 int code = hCNetSDK.NET_DVR_GetLastError();
@@ -798,7 +856,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return new HashMap<>();
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
 
         NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
         Pointer pioint = m_ptzPosCurrent.getPointer();
@@ -842,7 +900,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃�
      */
     @Override
-    @SdkOperate
     public boolean setPtz(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer channelNum = cmd.getChanNo();
@@ -850,13 +907,13 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
         m_ptzPosCurrent.wAction = 1;
         try {
-            String p = String.valueOf((int)(ptz.get("p") * 10));
-            String t = String.valueOf((int)(ptz.get("t") * 10));
-            String z = String.valueOf((int)(ptz.get("z") * 10));
+            String p = String.valueOf((int) (ptz.get("p") * 10));
+            String t = String.valueOf((int) (ptz.get("t") * 10));
+            String z = String.valueOf((int) (ptz.get("z") * 10));
             m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16));
             m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16));
             m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16));
@@ -875,14 +932,13 @@
     }
 
     @Override
-    @SdkOperate
     public boolean guideTargetPosition(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer channelNum = cmd.getChanNo();
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
         m_ptzPosCurrent.wAction = 1;
         try {
@@ -910,49 +966,6 @@
         }
     }
 
-    /**
-     * @鎻忚堪 鎿嶆帶閿佸畾
-     * @鍙傛暟 [userId, channelNum]
-     * @杩斿洖鍊� boolean
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/1/17 16:36
-     * @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾
-     */
-    @Override
-    @SdkOperate
-    public boolean controlLock(CameraCmd cmd) {
-        String cameraId = cmd.getCameraId();//鐢宠閿佺殑鐩告満
-        ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
-        Date now = new Date();
-        now.setTime(now.getTime() + cmd.getExpired() * 1000);
-        ardCameras.setOperatorExpired(now);//璁剧疆褰撳墠杩囨湡鏃堕棿
-        ardCamerasService.updateArdCameras(ardCameras);
-        return true;
-    }
-
-    /**
-     * @鎻忚堪 鎿嶆帶瑙i攣
-     * @鍙傛暟 [userId, channelNum]
-     * @杩斿洖鍊� boolean
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/6/30 15:36
-     * @淇敼浜哄拰鍏跺畠淇℃伅
-     */
-    @Override
-    public boolean controlUnLock(CameraCmd cmd) {
-        String cameraId = cmd.getCameraId();//鐢宠瑙i攣鐨勭浉鏈�
-        String operator = cmd.getOperator();//鐢宠鑰�
-        ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
-        if (ardCameras.getOperatorId().equals(operator)) {
-            //濡傛灉瑙i攣鐩告満鐨勫綋鍓嶇敤鎴锋槸鐢宠鑰咃紝鍒欐竻绌鸿鐩告満鐨勮繃鏈熸椂闂�
-            ardCameras.setOperatorExpired(null);
-            int i = ardCamerasService.updateArdCameras(ardCameras);
-            if (i > 0) {
-                log.debug(cameraId + "--瑙i攣鎴愬姛");
-            }
-        }
-        return true;
-    }
 
     /**
      * @鎻忚堪 鑾峰彇ptz閿佸畾淇℃伅
@@ -969,7 +982,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return -1;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         NET_DVR_PTZ_LOCKCFG netDvrPtzLockcfg = new NET_DVR_PTZ_LOCKCFG();
         Pointer point = netDvrPtzLockcfg.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1001,7 +1014,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         NET_DVR_INITIALPOSITIONCTRL initialpositionctrl = new NET_DVR_INITIALPOSITIONCTRL();
 
         initialpositionctrl.dwSize = initialpositionctrl.size();
@@ -1033,7 +1046,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return new HashMap<>();
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         NET_DVR_PTZSCOPE m_ptzPosCurrent = new NET_DVR_PTZSCOPE();
         Pointer point = m_ptzPosCurrent.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1082,7 +1095,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new NET_DVR_CAMERAPARAMCFG_EX();
         Pointer point = struCameraParam.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1128,7 +1141,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         NET_DVR_CAMERAPARAMCFG_EX struDayNigh = new NET_DVR_CAMERAPARAMCFG_EX();
         Pointer point = struDayNigh.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1176,7 +1189,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG();
         Pointer point = struFocusMode.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1219,7 +1232,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return "";
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG();
         Pointer point = struFocusMode.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1249,7 +1262,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         int dwStop;
         if (enable) {
             dwStop = 0;//寮�鍚�
@@ -1282,7 +1295,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         NET_DVR_DEVSERVER_CFG struDeicing = new NET_DVR_DEVSERVER_CFG();
         Pointer point = struDeicing.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1319,7 +1332,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return "";
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30();
         if (!hCNetSDK.NET_DVR_GetDVRWorkState_V30(userId, devwork)) {
             // 杩斿洖Boolean鍊硷紝鍒ゆ柇鏄惁鑾峰彇璁惧鑳藉姏
@@ -1362,7 +1375,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return "";
         }
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         //鍥剧墖淇℃伅
         NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA();
         //璁剧疆鍥剧墖鍒嗚鲸鐜�
@@ -1426,7 +1439,7 @@
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return "";
             }
-            Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+            Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
             //寮哄埗I甯х粨鏋勪綋瀵硅薄
             HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //鏂板缓缁撴瀯浣撳璞�
             netDvrIFrame.read();
@@ -1472,7 +1485,7 @@
                 log.debug("褰曞儚鍋滄");
                 //瀛樺叆minio
                 String BucketName = "record";
-                String ObjectName =IdUtils.simpleUUID() + ".mp4";
+                String ObjectName = IdUtils.simpleUUID() + ".mp4";
                 FileInputStream stream = new FileInputStream(path);
                 boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4");
                 if (b) {
@@ -1496,7 +1509,7 @@
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return false;
             }
-            Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+            Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
             //寮哄埗I甯х粨鏋勪綋瀵硅薄
             HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //鏂板缓缁撴瀯浣撳璞�
             netDvrIFrame.read();
@@ -1553,7 +1566,7 @@
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return "";
             }
-            Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+            Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
             //region 寮哄埗I甯�
             HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //鏂板缓缁撴瀯浣撳璞�
             netDvrIFrame.read();
@@ -1599,14 +1612,15 @@
     }
 
     @Override
-    public void recordStopNotToMinio(CameraCmd cmd) {
+    public boolean recordStopNotToMinio(CameraCmd cmd) {
+        boolean result = false;
         try {
             String cameraId = cmd.getCameraId();
             Integer channelNum = cmd.getChanNo();
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
-                return;
+                return false;
             }
-            Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+            Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
             //寮哄埗I甯х粨鏋勪綋瀵硅薄
             HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //鏂板缓缁撴瀯浣撳璞�
             netDvrIFrame.read();
@@ -1633,9 +1647,12 @@
                 GlobalVariable.previewMap.remove(cameraId);
             }
             log.debug("褰曞儚鍋滄");
+            result = true;
         } catch (Exception ex) {
             log.error("褰曞儚鍋滄寮傚父" + ex.getMessage());
+            result = false;
         }
+        return result;
     }
 
     //鑾峰彇IP閫氶亾
@@ -1691,7 +1708,7 @@
             return new HashMap<>();
         }
         // 鑾峰彇鍙傛暟
-        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
         HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG();
         HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO();
         struStdCfg.read();
diff --git a/ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java b/ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java
index e24e4e6..4dd8d3b 100644
--- a/ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java
+++ b/ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java
@@ -85,7 +85,9 @@
         vtdu.setRtspUrl(map.get("rtspUrl"));
         vtdu.setRtmpUrl(map.get("rtmpUrl"));
         vtdu.setWebrtcUrl(map.get("webrtcUrl"));
-        vtduService.updateVtdu(vtdu);
+        //vtduService.updateVtdu(vtdu);
+        vtduService.deleteVtduByName(vtdu.getName());
+        vtduService.insertVtdu(vtdu);
         return AjaxResult.success(map);
     }
 
diff --git a/ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java b/ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java
index 5ea0a2d..afbbf20 100644
--- a/ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java
+++ b/ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java
@@ -6,6 +6,8 @@
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.camera.service.ICameraSdkService;
 import com.ruoyi.media.service.IMediaService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,7 +40,8 @@
 {
     @Autowired
     private IVtduService vtduService;
-
+    @Resource
+    private ICameraSdkService cameraSdkService;
     /**
      * 鏌ヨ娴佸獟浣撶鐞嗗垪琛�
      */
@@ -71,6 +74,27 @@
     @GetMapping(value = "/{name}")
     public AjaxResult getInfo(@PathVariable("name") String name)
     {
+        //region 鑷姩杞爜
+        String[] nameArray = name.split("_");
+        String cameraId=nameArray[0];
+        Integer chanNo=Integer.valueOf(nameArray[1]);
+        CameraCmd cmd=new CameraCmd();
+        cmd.setCameraId(cameraId);
+        cmd.setChanNo(chanNo);
+        Map<String, Object> videoCompressionCfg = cameraSdkService.getVideoCompressionCfg(cmd);
+        String videoEncType = (String)videoCompressionCfg.get("videoEncType");
+        Vtdu vtdu = vtduService.selectVtduByName(name);
+        if(!videoEncType.equals("鏍囧噯h264"))
+        {
+             vtdu.setIsCode("1");
+        }
+        else
+        {
+            vtdu.setIsCode("0");
+        }
+        vtduService.deleteVtduByName(name);
+        vtduService.insertVtdu(vtdu);
+        //endregion
         return success(vtduService.selectVtduByName(name));
     }
 
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java b/ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java
index 5d04ef0..9f35a32 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java
@@ -40,6 +40,8 @@
 
     List<String> getNameList();
 
+    boolean checkNameExist(String name);
+
     RtspSession getRtspSessionById(String sessionId);
 
     WebrtcSession getWebrtcSessionById(String sessionId);
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java
index 5d84867..bbd910c 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java
@@ -84,14 +84,14 @@
         mediaInfo.setMaxReaders(100);
         mediaInfo.setSourceprotocol("tcp");
 
-        List<String> nameList=new ArrayList<>();
+        List<String> nameList = new ArrayList<>();
         String paths = mediaClient.paths();
         JsonsRoot jsonsRoot = JSONObject.parseObject(paths, JsonsRoot.class);
         List<Items> items = jsonsRoot.getItems();
         for (Items item : items) {
             nameList.add(item.getName());
         }
-        if(!nameList.contains(name)) {
+        if (!nameList.contains(name)) {
             mediaClient.addPath(name, mediaInfo);
         }
         Map<String, String> map = new HashMap<>();
@@ -127,9 +127,10 @@
             mediaInfo.setMaxReaders(100);
             mediaInfo.setSourceprotocol("tcp");
 
-            mediaClient.editPath(name, mediaInfo);
+            if (checkNameExist(name)) {
+                mediaClient.editPath(name, mediaInfo);
+            }
 
-            // Map<String,String> map=new HashMap<>();
             map.put("rtspUrl", rtspUrl);
             map.put("rtmpUrl", rtmpUrl);
             map.put("webrtcUrl", webrtcUrl);
@@ -169,13 +170,16 @@
     @Override
     public void removePath(String[] names) {
         for (String name : names) {
-            mediaClient.removePath(name);
+            if(checkNameExist(name)) {
+            mediaClient.removePath(name);}
         }
     }
 
     @Override
     public void removePath(String name) {
-        mediaClient.removePath(name);
+        if(checkNameExist(name)) {
+            mediaClient.removePath(name);
+        }
     }
 
     @Override
@@ -448,22 +452,45 @@
             return false;
         }
     }
+
     /**
-     *  鑾峰彇娴佸獟浣搉ame鍒楄〃
+     * 鑾峰彇娴佸獟浣搉ame鍒楄〃
      * 鍒樿嫃涔�
      * 2023/10/13 14:19:07
      */
     @Override
     public List<String> getNameList() {
-        List<String> nameList=new ArrayList<>();
-        String paths = mediaClient.paths();
-        JsonsRoot jsonsRoot = JSONObject.parseObject(paths, JsonsRoot.class);
-        List<Items> items = jsonsRoot.getItems();
-        for (Items item : items) {
-            nameList.add(item.getName());
+        List<String> nameList = new ArrayList<>();
+        try {
+            String paths = mediaClient.paths();
+            JsonsRoot jsonsRoot = JSONObject.parseObject(paths, JsonsRoot.class);
+            List<Items> items = jsonsRoot.getItems();
+            for (Items item : items) {
+                nameList.add(item.getName());
+            }
+        }
+        catch (Exception ex)
+        {
+            log.error(ex.getMessage());
         }
         return nameList;
     }
+
+    /**
+     * 妫�鏌ュ悕绉版槸鍚﹀瓨鍦�
+     * 鍒樿嫃涔�
+     * 2023/10/19 15:18:45
+     */
+    @Override
+    public boolean checkNameExist(String name) {
+        boolean result = false;
+        List<String> nameList = getNameList();
+        if (nameList.contains(name)) {
+            result = true;
+        }
+        return result;
+    }
+
     /**
      * 閰嶇疆娴佸獟浣撳弬鏁�
      */
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/VtduServiceImpl.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/VtduServiceImpl.java
index 05cc175..aac11e5 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/impl/VtduServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/VtduServiceImpl.java
@@ -9,6 +9,8 @@
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.camera.service.ICameraSdkService;
 import com.ruoyi.media.service.IMediaService;
 import com.ruoyi.utils.forest.MediaClient;
 import lombok.extern.slf4j.Slf4j;
@@ -43,6 +45,7 @@
      */
     @Override
     public Vtdu selectVtduByName(String name) {
+
         return vtduMapper.selectVtduByName(name);
     }
 
@@ -121,6 +124,7 @@
      */
     @Override
     public int deleteVtduByName(String name) {
+        mediaService.removePath(name);
         return vtduMapper.deleteVtduByName(name);
     }
 
diff --git a/ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java b/ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java
index ded00ce..6c3522b 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java
@@ -1,9 +1,7 @@
 package com.ruoyi.utils.tools;
 
-import com.ruoyi.common.core.redis.RedisCache;
 import lombok.extern.slf4j.Slf4j;
 
-import javax.annotation.Resource;
 import java.lang.reflect.Field;
 import java.text.DecimalFormat;
 import java.time.LocalTime;
@@ -121,4 +119,18 @@
         int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
         return new DecimalFormat("#,###.##").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
     }
+
+    /**
+     * byte鏁扮粍杞瓧绗︿覆
+     * 鍒樿嫃涔�
+     * 2023/10/18 8:42:59
+     * @param byteArray
+     */
+    public static String byteArrayToString(byte[] byteArray) {
+        StringBuilder stringBuilder = new StringBuilder();
+        for (byte b : byteArray) {
+            stringBuilder.append(String.valueOf(b));
+        }
+        return stringBuilder.toString();
+    }
 }
diff --git a/ard-work/src/main/resources/templates/test.html b/ard-work/src/main/resources/templates/test.html
index 5b3d7d9..8c81faf 100644
--- a/ard-work/src/main/resources/templates/test.html
+++ b/ard-work/src/main/resources/templates/test.html
@@ -136,7 +136,7 @@
     window.onload = function () {
         console.log(RTCRtpReceiver.getCapabilities('video').codecs)
         $.ajax({
-            url: "../hik/list",
+            url: "../cameraSdk/list",
             type: "get",
             success: function (data) {
                 console.log(data);
@@ -144,7 +144,8 @@
                 for (var i = 0; i < arr.length; i++) {
                     console.log(arr[i].id);
                     var camera = {
-                        type: arr[i].gdtype,
+                        name: arr[i].name,
+                        factory: arr[i].factory,
                         ipaddr: arr[i].ip,
                         username: arr[i].username,
                         password: arr[i].password,
@@ -183,125 +184,125 @@
     }
     //浜戝彴涓婁笅宸﹀彸
     $("#up").mousedown(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 2;
         var enable = true;
         commondMethod(url, code, enable);
 
     })
     $("#up").mouseup(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 2;
         var enable = false;
         commondMethod(url, code, enable);
     })
     $("#down").mousedown(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 8;
         var enable = true;
         commondMethod(url, code, enable);
     })
     $("#down").mouseup(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 8;
         var enable = false;
         commondMethod(url, code, enable);
     })
     $("#left").mousedown(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 4;
         var enable = true;
         commondMethod(url, code, enable);
     })
     $("#left").mouseup(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 4;
         var enable = false;
         commondMethod(url, code, enable);
     })
     $("#right").mousedown(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 6;
         var enable = true;
         commondMethod(url, code, enable);
     })
     $("#right").mouseup(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 6;
         var enable = false;
         commondMethod(url, code, enable);
     })
     //鍙樺��
     $("#controlZoomIn").mousedown(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 10;
         var enable = true;
         commondMethod(url, code, enable);
     })
     $("#controlZoomIn").mouseup(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 10;
         var enable = false;
         commondMethod(url, code, enable);
     })
     $("#controlZoomOut").mousedown(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 11;
         var enable = true;
         commondMethod(url, code, enable);
     })
     $("#controlZoomOut").mouseup(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 11;
         var enable = false;
         commondMethod(url, code, enable);
     })
     //鍙樼劍
     $("#controlFocusNear").mousedown(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 12;
         var enable = true;
         commondMethod(url, code, enable);
     })
     $("#controlFocusNear").mouseup(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 12;
         var enable = false;
         commondMethod(url, code, enable);
     })
     $("#controlFocusFar").mousedown(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 13;
         var enable = true;
         commondMethod(url, code, enable);
     })
     $("#controlFocusFar").mouseup(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 13;
         var enable = false;
         commondMethod(url, code, enable);
     })
     //鍏夊湀
     $("#controlIrisOpen").mousedown(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 14;
         var enable = true;
         commondMethod(url, code, enable);
     })
     $("#controlIrisOpen").mouseup(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 14;
         var enable = false;
         commondMethod(url, code, enable);
     })
     $("#controlIrisClose").mousedown(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 15;
         var enable = true;
         commondMethod(url, code, enable);
     })
     $("#controlIrisClose").mouseup(function () {
-        var url = "../hik/PTZControlWithSpeed";
+        var url = "../cameraSdk/PTZControlWithSpeed";
         var code = 15;
         var enable = false;
         commondMethod(url, code, enable);
@@ -316,7 +317,7 @@
                 'Content-Type': 'application/json',
                 'Authorization': token
             },
-            url: "../hik/setPreset",
+            url: "../cameraSdk/setPreset",
             type: "post",
             dataType: "json",
             data: JSON.stringify(opt),
@@ -334,7 +335,7 @@
                 'Content-Type': 'application/json',
                 'Authorization': token
             },
-            url: "../hik/gotoPreset",
+            url: "../cameraSdk/gotoPreset",
             type: "post",
             dataType: "json",
             data: JSON.stringify(opt),
@@ -352,7 +353,7 @@
                 'Content-Type': 'application/json',
                 'Authorization': token
             },
-            url: "../hik/getPTZ",
+            url: "../cameraSdk/getPTZ",
             type: "post",
             dataType: "json",
             data: JSON.stringify(opt),
@@ -386,7 +387,7 @@
                 'Content-Type': 'application/json',
                 'Authorization': token
             },
-            url: "../hik/setPTZ",
+            url: "../cameraSdk/setPTZ",
             type: "post",
             dataType: "json",
             data: JSON.stringify(myEntity),
@@ -414,7 +415,7 @@
                 'Content-Type': 'application/json',
                 'Authorization': token
             },
-            url: "../hik/setTargetPosition",
+            url: "../cameraSdk/setTargetPosition",
             type: "post",
             dataType: "json",
             data: JSON.stringify(myEntity),
@@ -432,7 +433,7 @@
                 'Content-Type': 'application/json',
                 'Authorization': token
             },
-            url: "../hik/setZeroPTZ",
+            url: "../cameraSdk/setZeroPTZ",
             type: "post",
             dataType: "json",
             data: JSON.stringify(opt),
@@ -450,7 +451,7 @@
                 'Content-Type': 'application/json',
                 'Authorization': token
             },
-            url: "../hik/PTZControlWithSpeed",
+            url: "../cameraSdk/PTZControlWithSpeed",
             type: "post",
             dataType: "json",
             data: JSON.stringify(opt),
@@ -473,7 +474,7 @@
                     'Content-Type': 'application/json',
                     'Authorization': token
                 },
-                url: "../hik/defogcfg",
+                url: "../cameraSdk/defogcfg",
                 type: "post",
                 dataType: "json",
                 data: JSON.stringify(optOpen),
@@ -490,7 +491,7 @@
                     'Content-Type': 'application/json',
                     'Authorization': token
                 },
-                url: "../hik/defogcfg",
+                url: "../cameraSdk/defogcfg",
                 type: "post",
                 dataType: "json",
                 data: JSON.stringify(optClose),
@@ -515,7 +516,7 @@
                     'Content-Type': 'application/json',
                     'Authorization': token
                 },
-                url: "../hik/infrarecfg",
+                url: "../cameraSdk/infrarecfg",
                 type: "post",
                 dataType: "json",
                 data: JSON.stringify(optOpen),
@@ -533,7 +534,7 @@
                     'Content-Type': 'application/json',
                     'Authorization': token
                 },
-                url: "../hik/infrarecfg",
+                url: "../cameraSdk/infrarecfg",
                 type: "post",
                 dataType: "json",
                 data: JSON.stringify(optClose),
@@ -557,7 +558,7 @@
                     'Content-Type': 'application/json',
                     'Authorization': token
                 },
-                url: "../hik/focusMode",
+                url: "../cameraSdk/focusMode",
                 type: "post",
                 dataType: "json",
                 data: JSON.stringify(optOpen),
@@ -574,7 +575,7 @@
                     'Content-Type': 'application/json',
                     'Authorization': token
                 },
-                url: "../hik/focusMode",
+                url: "../cameraSdk/focusMode",
                 type: "post",
                 dataType: "json",
                 data: JSON.stringify(optClose),
@@ -593,13 +594,13 @@
                     'Content-Type': 'application/json',
                     'Authorization': token
                 },
-                url: "../hik/getFocusPos",
+                url: "../cameraSdk/getFocusPos",
                 type: "post",
                 dataType: "json",
                 data: JSON.stringify(opt),
                 success: function (datas) {
                     console.log(datas);
-                    $("#focus").val(datas.data.dwFocus);
+                    $("#focus").val(datas.data);
                 }
             })
     })
@@ -617,7 +618,7 @@
                     'Content-Type': 'application/json',
                     'Authorization': token
                 },
-                url: "../hik/heateRpwron",
+                url: "../cameraSdk/heateRpwron",
                 type: "post",
                 dataType: "json",
                 data: JSON.stringify(optOpen),
@@ -634,7 +635,7 @@
                     'Content-Type': 'application/json',
                     'Authorization': token
                 },
-                url: "../hik/heateRpwron",
+                url: "../cameraSdk/heateRpwron",
                 type: "post",
                 dataType: "json",
                 data: JSON.stringify(optClose),
@@ -657,7 +658,7 @@
                     'Accept': 'application/json',
                     'Content-Type': 'application/json'
                 },
-                url: "../hik/cameraDeicing",
+                url: "../cameraSdk/cameraDeicing",
                 type: "post",
                 dataType: "json",
                 data: JSON.stringify(optOpen),
@@ -674,7 +675,7 @@
                     'Content-Type': 'application/json',
                     'Authorization': token
                 },
-                url: "../hik/cameraDeicing",
+                url: "../cameraSdk/cameraDeicing",
                 type: "post",
                 dataType: "json",
                 data: JSON.stringify(optClose),
@@ -693,7 +694,7 @@
                 'Content-Type': 'application/json',
                 'Authorization': token
             },
-            url: "../hik/captureJPEGPicture",
+            url: "../cameraSdk/captureJPEGPicture",
             type: "post",
             dataType: "json",
             data: JSON.stringify(opt),
@@ -712,13 +713,16 @@
                 'Content-Type': 'application/json',
                 'Authorization': token
             },
-            url: "../hik/picCutCate",
+            url: "../cameraSdk/picCutCate",
             type: "post",
             dataType: "json",
             data: JSON.stringify(opt),
             success: function (data) {
                 console.log(data.data);
-                $('#imgContainer').attr('src', data.data);
+                setTimeout(() => {
+                    $('#imgContainer').attr('src', data.data);
+                }, 1000 )
+
             }
         })
     })
@@ -736,7 +740,7 @@
                     'Content-Type': 'application/json',
                     'Authorization': token
                 },
-                url: "../hik/record",
+                url: "../cameraSdk/record",
                 type: "post",
                 dataType: "json",
                 data: JSON.stringify(optOpen),
@@ -753,7 +757,7 @@
                     'Content-Type': 'application/json',
                     'Authorization': token
                 },
-                url: "../hik/record",
+                url: "../cameraSdk/record",
                 dataType: "json",
                 data: JSON.stringify(optClose),
                 type: "post",
@@ -769,7 +773,7 @@
     /*浜戝彴鍏叡鏂规硶*/
     function commondMethod(url, code, enable) {
         cameraId = $('#select option:selected').val();
-        opt = {"cameraId": cameraId, "chanNo": 1, "speed": 8, "enable": enable, "code": code};
+        opt = {"cameraId": cameraId, "chanNo": 1, "speed": 4, "enable": enable, "code": code};
         $.ajax({
             headers: {
                 'Accept': 'application/json',
@@ -797,9 +801,9 @@
             var cameraId = $('#select option:selected').val();
             let camera = cameraMap.get(cameraId);
             console.log(camera);
-            if (camera.type == "ys") {
+            if (camera.factory == "3") {
                 realViewYs("127.0.0.1", ID, camera.username, camera.password, camera.ipaddr, camera.port);
-            } else if (camera.type == "dh") {
+            } else if (camera.factory == "2") {
                 realViewDh("127.0.0.1", ID, camera.username, camera.password, camera.ipaddr, camera.port);
             } else {
                 realViewHik("127.0.0.1", ID, camera.username, camera.password, camera.ipaddr, camera.port);
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 c2fee6a..ad26400 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
@@ -6,6 +6,7 @@
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.service.IArdCamerasService;
 import com.ruoyi.device.channel.domain.ArdChannel;
+import com.ruoyi.device.dhsdk.service.IDhClientService;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
 import com.ruoyi.media.domain.Items;
 import com.ruoyi.media.domain.JsonsRoot;
@@ -37,7 +38,9 @@
     @Resource
     IArdCamerasService iArdCamerasService;
     @Resource
-    IHikClientService iHikClientService;
+    IHikClientService hikClientService;
+    @Resource
+    IDhClientService dhClientService;
     @Resource
     IVtduService vtduService;
     @Resource
@@ -50,15 +53,20 @@
      */
     public void cameraState() {
         try {
-            ArdCameras ardCamera = new ArdCameras();
-            ardCamera.setFactory("1");
+           ArdCameras ardCamera = new ArdCameras();
+            //璋冪敤鏌ヨ鏂规硶
             List<ArdCameras> ardCameras = iArdCamerasService.selectArdCamerasListNoDataScope(ardCamera);
             for (ArdCameras camera : ardCameras) {
                 CameraCmd cmd = new CameraCmd();
                 cmd.setCameraId(camera.getId());
-                boolean onLineNew = iHikClientService.isOnLine(cmd);//鐩告満瀹炴椂鐘舵��
-                boolean onLineOld = "1".equals(camera.getState());//鐩告満鍘嗗彶鐘舵��
-                //褰撶姸鎬佸彂鐢熷彉鍖栨椂锛屾洿鏂板疄鏃剁姸鎬�
+                boolean onLineNew = false;
+                // 鍒ゆ柇鏄�1杩樻槸2
+                if (camera.getFactory().equals("1")) {
+                    onLineNew = hikClientService.isOnLine(cmd);
+                } else if (camera.getFactory().equals("2")) {
+                    onLineNew = dhClientService.isOnLine(cmd);
+                }
+                boolean onLineOld = "1".equals(camera.getState());
                 if (onLineNew != onLineOld) {
                     if (onLineNew) {
                         camera.setState("1");
@@ -67,7 +75,6 @@
                     }
                     iArdCamerasService.updateArdCameras(camera);
                 }
-
             }
         } catch (Exception ex) {
             log.error("鍚屾鐩告満鍦ㄧ嚎鐘舵�佸紓甯�:" + ex.getMessage());
@@ -107,10 +114,11 @@
      * 2023/10/13 14:13:53
      */
     public void vtdu() {
-        List<String> nameList = mediaService.getNameList();
+
         List<Vtdu> vtdus = vtduService.selectVtduList(new Vtdu());
         for (Vtdu vtdu : vtdus) {
-            if (!nameList.contains(vtdu.getName())) {
+            boolean nameExist = mediaService.checkNameExist(vtdu.getName());
+            if (!nameExist) {
                 mediaService.addPath(vtdu.getName(), vtdu.getRtspSource(), vtdu.getMode(), vtdu.getIsCode());
             }
         }

--
Gitblit v1.9.3