aijinhui
2023-10-17 49207386ea4a3d663628347eef443af9c7cc7f39
Merge remote-tracking branch 'origin/master'
已添加4个文件
已重命名1个文件
已修改9个文件
2505 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java 107 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java 584 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/dhsdk/controller/DhSdkController.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/CapturePictureModule.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/LoginModule.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java 309 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java 375 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/HikSdkController.java 659 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
@@ -10,6 +10,7 @@
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.dhsdk.service.IDhClientService;
import com.ruoyi.device.hiksdk.service.IHikClientService;
import io.swagger.annotations.Api;
@@ -58,26 +59,20 @@
public class CameraSdkController extends BaseController {
    @Resource
    private IHikClientService hikClientService;
    @Resource
    private IDhClientService dhClientService;
    private ICameraSdkService cameraSdkService;
    @Resource
    private IArdCamerasService ardCamerasService;
    /**
     * @描述 åˆå§‹åŠ è½½æµ·åº·åº“æ–‡ä»¶
     * @参数 []
     * @描述 åˆå§‹åŠ è½½SDK库文件
     * @返回值 void
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/1/17 16:13
     * @修改人和其它信息 if (Platform.isLinux())
     */
    @PostConstruct
    public void initHCNetSDK() {
        //初始化加载sdk库文件
        hikClientService.loadHCNetSDKLib();
        //登录所有相机
        hikClientService.loginAll();
    public void initSDK() {
        cameraSdkService.initSDK();
    }
    @RequestMapping("/preview")
@@ -103,7 +98,7 @@
    @Log(title = "获取码流压缩参数", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult getVideoCompressionCfg(@RequestBody CameraCmd cmd) {
        return AjaxResult.success(hikClientService.getVideoCompressionCfg(cmd));
        return AjaxResult.success(cameraSdkService.getVideoCompressionCfg(cmd));
    }
    @ApiOperation("在线状态")
@@ -113,7 +108,7 @@
    public @ResponseBody
    AjaxResult getOnlineState(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        boolean onLine = hikClientService.isOnLine(cmd);
        boolean onLine = cameraSdkService.isOnLine(cmd);
        return AjaxResult.success(onLine);
    }
@@ -125,7 +120,7 @@
    public @ResponseBody
    AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(hikClientService.pTZControlWithSpeed(cmd));
        return toAjax(cameraSdkService.pTZControl(cmd));
    }
    @ApiOperation("调用预置点")
@@ -135,7 +130,7 @@
    public @ResponseBody
    AjaxResult gotoPreset(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(hikClientService.gotoPreset(cmd));
        return toAjax(cameraSdkService.gotoPreset(cmd));
    }
    @ApiOperation("设置预置点")
@@ -145,7 +140,7 @@
    public @ResponseBody
    AjaxResult setPreset(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(hikClientService.setPreset(cmd));
        return toAjax(cameraSdkService.setPreset(cmd));
    }
    @ApiOperation("获取聚焦值")
@@ -155,7 +150,7 @@
    public @ResponseBody
    AjaxResult getFocusPos(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        Map<String, Object> Map = hikClientService.getFocusPos(cmd);
        Map<String, Object> Map = cameraSdkService.getFocusPos(cmd);
        return AjaxResult.success("获取聚焦值", Map);
    }
@@ -166,7 +161,7 @@
    public @ResponseBody
    AjaxResult setFocusPos(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(hikClientService.setFocusPos(cmd));
        return toAjax(cameraSdkService.setFocusPos(cmd));
    }
    @ApiOperation("获取PTZ")
@@ -176,7 +171,7 @@
    public @ResponseBody
    AjaxResult getPTZ(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        Map<String, Object> ptzMap = hikClientService.getPtz(cmd);
        Map<String, Object> ptzMap = cameraSdkService.getPtz(cmd);
        return AjaxResult.success("获取ptz", ptzMap);
    }
@@ -187,7 +182,7 @@
    public @ResponseBody
    AjaxResult getPTZScope(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        Map<String, Object> ptzMap = hikClientService.getPtzScope(cmd);
        Map<String, Object> ptzMap = cameraSdkService.getPtzScope(cmd);
        return AjaxResult.success("获取ptz范围", ptzMap);
    }
@@ -198,7 +193,7 @@
    public @ResponseBody
    AjaxResult setPTZ(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(hikClientService.setPtz(cmd));
        return toAjax(cameraSdkService.setPtz(cmd));
    }
    @ApiOperation("指向目标")
@@ -208,18 +203,18 @@
    public @ResponseBody
    AjaxResult setTargetPosition(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(hikClientService.guideTargetPosition(cmd));
        return toAjax(cameraSdkService.guideTargetPosition(cmd));
    }
    @ApiOperation("设置零方位角")
    @PostMapping("/setZeroPTZ")
    @Log(title = "设置零方位角", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.cmd.chanNo"})
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    public @ResponseBody
    AjaxResult setZeroPTZ(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(hikClientService.setZeroPtz(cmd));
        return toAjax(cameraSdkService.setZeroPtz(cmd));
    }
    @ApiOperation("设置锁定")
@@ -229,7 +224,7 @@
    public @ResponseBody
    AjaxResult setPTZLock(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return AjaxResult.success(hikClientService.controlLock(cmd));
        return AjaxResult.success(cameraSdkService.controlLock(cmd));
    }
    @ApiOperation("设置解锁")
@@ -239,7 +234,7 @@
    public @ResponseBody
    AjaxResult setPTZUnLock(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return AjaxResult.success(hikClientService.controlUnLock(cmd));
        return AjaxResult.success(cameraSdkService.controlUnLock(cmd));
    }
    @ApiOperation("获取云台锁定信息")
@@ -249,7 +244,7 @@
    public @ResponseBody
    AjaxResult getPTZLockInfo(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        int byWorkMode = hikClientService.getPTZLockInfo(cmd);
        int byWorkMode = cameraSdkService.getPTZLockInfo(cmd);
        if (byWorkMode == 0) {
            return AjaxResult.success("云台锁定状态:解锁");
        } else if (byWorkMode == 1) {
@@ -266,7 +261,7 @@
    public @ResponseBody
    AjaxResult defogcfg(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(hikClientService.controlDefogcfg(cmd));
        return toAjax(cameraSdkService.controlDefogcfg(cmd));
    }
    @ApiOperation("红外开关")
@@ -276,7 +271,7 @@
    public @ResponseBody
    AjaxResult infrarecfg(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(hikClientService.controlInfrarecfg(cmd));
        return toAjax(cameraSdkService.controlInfrarecfg(cmd));
    }
    @ApiOperation(value = "手动/自动聚焦", notes = "true手动flase自动")
@@ -286,7 +281,7 @@
    public @ResponseBody
    AjaxResult enableFocusMode(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(hikClientService.controlFocusMode(cmd));
        return toAjax(cameraSdkService.controlFocusMode(cmd));
    }
    @ApiOperation(value = "获取聚焦模式", notes = "1手动2自动")
@@ -294,7 +289,7 @@
    public @ResponseBody
    AjaxResult getFocusMode(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        String focusMode = hikClientService.getFocusMode(cmd);
        String focusMode = cameraSdkService.getFocusMode(cmd);
        return AjaxResult.success(focusMode);
    }
@@ -305,7 +300,7 @@
    public @ResponseBody
    AjaxResult heateRpwron(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(hikClientService.controlPTHeateRpwron(cmd));
        return toAjax(cameraSdkService.controlPTHeateRpwron(cmd));
    }
@@ -316,15 +311,7 @@
    public @ResponseBody
    AjaxResult cameraDeicing(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(hikClientService.controlCameraDeicing(cmd));
    }
    @PostMapping("/captureJPEGPicture")
    public @ResponseBody
    AjaxResult captureJPEGPicture(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        String base64Str = hikClientService.captureJPEGPicture(cmd);
        return toAjaxString(base64Str, "相机抓图");
        return toAjax(cameraSdkService.controlCameraDeicing(cmd));
    }
    @ApiOperation("相机抓图")
@@ -334,28 +321,38 @@
    public @ResponseBody
    AjaxResult picCutCate(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        String path = hikClientService.picCutCate(cmd);
        String path = cameraSdkService.picCutCate(cmd);
        return toAjaxString(path, "相机抓图");
    }
    @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 path = hikClientService.record(cmd);
        return toAjaxString(path, "手动录像");
    }
    @ApiOperation("获取相机架设参数")
    @PostMapping("/getCameraSetupCFG")
    @PostMapping("/getGisInfo")
    @Log(title = "获取相机架设参数", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult getCameraSetupCFG(@RequestBody CameraCmd cmd) {
    AjaxResult getGisInfo(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return AjaxResult.success(hikClientService.getGisInfo(cmd));
        return AjaxResult.success(cameraSdkService.getGisInfo(cmd));
    }
    @ApiOperation("手动录像开始")
    @PostMapping("/recordStart")
    @Log(title = "手动录像开始", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    public @ResponseBody
    AjaxResult recordStart(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        boolean b = cameraSdkService.recordStart(cmd);
        return toAjax(b);
    }
    @ApiOperation("手动录像停止")
    @PostMapping("/recordStop")
    @Log(title = "手动录像停止", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.recordBucketName", "cmd.recordObjectName"})
    public @ResponseBody
    AjaxResult recordStop(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        String url = cameraSdkService.recordStopToMinio(cmd);
        return AjaxResult.success(url);
    }
}
ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,106 @@
package com.ruoyi.device.camera.service;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.channel.domain.ArdChannel;
import java.util.List;
import java.util.Map;
public interface ICameraSdkService {
    //sdk初始化
    void initSDK();
    //同步登录
    void syncLogin(ArdCameras cameras);
    //异步登录
    void asyncLogin(ArdCameras cameras);
    //注销
    boolean logout(String cameraId);
    //在线状态
    boolean isOnLine(CameraCmd cmd);
    //云台控制
    boolean pTZControl(CameraCmd cmd);
    //设置聚焦值
    boolean setFocusPos(CameraCmd cmd);
    //获取聚焦值
    Map<String, Object> getFocusPos(CameraCmd cmd);
    //设置预置位
    boolean setPreset(CameraCmd cmd);
    //调用预置位
    boolean gotoPreset(CameraCmd cmd);
    //获取码流压缩参数
    Map<String, String> getVideoCompressionCfg(CameraCmd cmd);
    //透雾
    boolean controlDefogcfg(CameraCmd cmd);
    //红外?
    boolean controlInfrarecfg(CameraCmd cmd);
    //聚焦模式
    boolean controlFocusMode(CameraCmd cmd);
    //获取聚焦模式
    String getFocusMode(CameraCmd cmd);
    //云台加热
    boolean controlPTHeateRpwron(CameraCmd cmd);
    //镜头除冰
    boolean controlCameraDeicing(CameraCmd cmd);
    //配置锁定
    boolean controlLock(CameraCmd cmd);
    //配置解锁
    boolean controlUnLock(CameraCmd cmd);
    //获取云台锁定信息
    int getPTZLockInfo(CameraCmd cmd);
    //抓图-返给前端二进制流
    String captureJPEGPicture(CameraCmd cmd);
    //抓图
    String picCutCate(CameraCmd cmd);
    //ptz ä¸‰åæ ‡
    Map<String, Object> getPtz(CameraCmd cmd);
    //获取ptz范围
    Map<String, Object> getPtzScope(CameraCmd cmd);
    boolean setPtz(CameraCmd cmd);
    //设置零方位角
    boolean setZeroPtz(CameraCmd cmd);
    //引导目标位置
    boolean guideTargetPosition(CameraCmd cmd);
    //手动开始录像
    boolean recordStart(CameraCmd cmd);
    //手动停止录像-上传minio-返回录像url
    String recordStopToMinio(CameraCmd cmd);
    //停止录像-不上传minio
    void recordStopNotToMinio(CameraCmd cmd);
    //获取相机通道信息
    public List<ArdChannel> getCameraChannelList(ArdCameras camera);
    //获取GIS信息数据
    public Map<String, Object> getGisInfo(CameraCmd cmd);
}
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,584 @@
package com.ruoyi.device.camera.service.impl;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.service.ICameraSdkService;
import com.ruoyi.device.channel.domain.ArdChannel;
import com.ruoyi.device.dhsdk.service.IDhClientService;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
import com.ruoyi.device.hiksdk.service.IHikClientService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.NET_DVR_CHECK_USER_STATUS;
/**
 * @Description: ç›¸æœºsdk业务
 * @ClassName: CameraSdkServiceImpl
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´10月16日15:21:01
 **/
@Service
@Slf4j(topic = "SDK")
public class CameraSdkServiceImpl implements ICameraSdkService {
    @Resource
    IHikClientService hikClientService;
    @Resource
    IDhClientService dhClientService;
    @Resource
    RedisCache redisCache;
    @Override
    public void initSDK() {
        //初始化加载sdk库文件
        boolean initHIK = hikClientService.init();
        if (initHIK) {
            hikClientService.loginAll();//登录全部海康相机
        }
        Boolean initDH = dhClientService.init();
        if (initDH) {
            dhClientService.loginAll();//登录全部大华相机
        }
    }
    @Override
    public void syncLogin(ArdCameras cameras) {
    }
    @Override
    public void asyncLogin(ArdCameras cameras) {
    }
    @Override
    public boolean logout(String cameraId) {
        return false;
    }
    //在线检测
    @Override
    public boolean isOnLine(CameraCmd cmd) {
        try {
            boolean onLine = false;
            String cameraId = cmd.getCameraId();
            ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
            if (ardCamera != null) {
                String factory = ardCamera.getFactory();
                if (factory.equals("1")) {
                    onLine = hikClientService.isOnLine(cmd);
                } else if (factory.equals("2")) {
                    onLine = dhClientService.isOnLine(cmd);
                }
            }
            return onLine;
        } catch (Exception ex) {
            log.error("检测在线异常:" + ex.getMessage());
            return false;
        }
    }
    //云台控制
    @Override
    public boolean pTZControl(CameraCmd cmd) {
        try {
            boolean result = false;
            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.pTZControlWithSpeed(cmd);
                } else if (factory.equals("2")) {
                    result = dhClientService.pTZControl(cmd);
                }
            }
            return result;
        } catch (Exception ex) {
            log.error("ptz控制异常:" + ex.getMessage());
            return false;
        }
    }
    //设置聚焦值
    @Override
    public boolean setFocusPos(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.setFocusPos(cmd);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("设置聚焦值异常:" + ex.getMessage());
        }
        return result;
    }
    //获取聚焦值
    @Override
    public Map<String, Object> getFocusPos(CameraCmd cmd) {
        Map<String, Object> map = new HashMap<>();
        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);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("获取聚焦值异常:" + ex.getMessage());
        }
        return map;
    }
    //设置预置位
    @Override
    public boolean setPreset(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.setPreset(cmd);
                } else if (factory.equals("2")) {
                    result = dhClientService.setPreset(cmd);
                }
            }
        } catch (Exception ex) {
            log.error("设置预置位异常:" + ex.getMessage());
        }
        return result;
    }
    //调用预置位
    @Override
    public boolean gotoPreset(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.gotoPreset(cmd);
                } else if (factory.equals("2")) {
                    result = dhClientService.gotoPreset(cmd);
                }
            }
        } catch (Exception ex) {
            log.error("调用预置位异常:" + ex.getMessage());
        }
        return result;
    }
    //获取码流压缩参数
    @Override
    public Map<String, String> getVideoCompressionCfg(CameraCmd cmd) {
        Map<String, String> map = new HashMap<>();
        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.getVideoCompressionCfg(cmd);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("获取码流压缩参数异常:" + ex.getMessage());
        }
        return map;
    }
    //透雾开关
    @Override
    public boolean controlDefogcfg(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.controlDefogcfg(cmd);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("操控透雾异常:" + ex.getMessage());
        }
        return result;
    }
    //红外开关
    @Override
    public boolean controlInfrarecfg(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.controlInfrarecfg(cmd);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("操控红外异常:" + ex.getMessage());
        }
        return result;
    }
    //手动/自动聚焦
    @Override
    public boolean controlFocusMode(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.controlFocusMode(cmd);
                } else if (factory.equals("2")) {
                    result = dhClientService.controlFocusMode(cmd);
                }
            }
        } catch (Exception ex) {
            log.error("操控聚焦模式异常:" + ex.getMessage());
        }
        return result;
    }
    //获取聚焦模式
    @Override
    public String getFocusMode(CameraCmd cmd) {
        String result = "";
        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.getFocusMode(cmd);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("获取聚焦模式异常:" + ex.getMessage());
        }
        return result;
    }
    //云台加热
    @Override
    public boolean controlPTHeateRpwron(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.controlPTHeateRpwron(cmd);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("操控云台加热异常:" + ex.getMessage());
        }
        return result;
    }
    //镜头加热
    @Override
    public boolean controlCameraDeicing(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.controlCameraDeicing(cmd);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("操控云台加热异常:" + ex.getMessage());
        }
        return result;
    }
    //操控锁定
    @Override
    public boolean controlLock(CameraCmd cmd) {
        boolean result = false;
        try {
            String cameraId = cmd.getCameraId();
            ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
            if (ardCamera != null) {
                String factory = ardCamera.getFactory();
                if (factory.equals("1")) {
                    result = hikClientService.controlLock(cmd);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("操控锁定异常:" + ex.getMessage());
        }
        return result;
    }
    //设置解锁
    @Override
    public boolean controlUnLock(CameraCmd cmd) {
        boolean result = false;
        try {
            String cameraId = cmd.getCameraId();
            ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
            if (ardCamera != null) {
                String factory = ardCamera.getFactory();
                if (factory.equals("1")) {
                    result = hikClientService.controlUnLock(cmd);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("设置解锁异常:" + ex.getMessage());
        }
        return result;
    }
    //获取云台锁定信息
    @Override
    public int getPTZLockInfo(CameraCmd cmd) {
        int result = 99;
        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.getPTZLockInfo(cmd);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("获取云台锁定信息异常:" + ex.getMessage());
        }
        return result;
    }
    @Override
    public String captureJPEGPicture(CameraCmd cmd) {
        return null;
    }
    //抓图
    @Override
    public String picCutCate(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.picCutCate(cmd);
                } else if (factory.equals("2")) {
                    url = dhClientService.picCutCate(cmd);
                }
            }
        } catch (Exception ex) {
            log.error("抓图异常:" + ex.getMessage());
        }
        return url;
    }
    //获取ptz
    @Override
    public Map<String, Object> getPtz(CameraCmd cmd) {
        Map<String, Object> map = new HashMap<>();
        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.getPtz(cmd);
                } else if (factory.equals("2")) {
                    map = dhClientService.getPtz(cmd);
                }
            }
        } catch (Exception ex) {
            log.error("获取ptz异常:" + ex.getMessage());
        }
        return map;
    }
    //获取ptz范围
    @Override
    public Map<String, Object> getPtzScope(CameraCmd cmd) {
        Map<String, Object> map = new HashMap<>();
        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.getPtzScope(cmd);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("获取ptz范围异常:" + ex.getMessage());
        }
        return map;
    }
    //设置ptz
    @Override
    public boolean setPtz(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.setPtz(cmd);
                } else if (factory.equals("2")) {
                    result = dhClientService.setPtz(cmd);
                }
            }
        } catch (Exception ex) {
            log.error("设置ptz异常:" + ex.getMessage());
        }
        return result;
    }
    //设置零方位角
    @Override
    public boolean setZeroPtz(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.setZeroPtz(cmd);
                } else if (factory.equals("2")) {
                    result = dhClientService.setZeroPtz(cmd);
                }
            }
        } catch (Exception ex) {
            log.error("设置零方位角异常:" + ex.getMessage());
        }
        return result;
    }
    //引导指向目标
    @Override
    public boolean guideTargetPosition(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.guideTargetPosition(cmd);
                } else if (factory.equals("2")) {
                    result = dhClientService.guideTargetPosition(cmd);
                }
            }
        } catch (Exception ex) {
            log.error("引导指向目标异常:" + ex.getMessage());
        }
        return result;
    }
    //开始录像
    @Override
    public boolean recordStart(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.recordStart(cmd);
                } else if (factory.equals("2")) {
                    result = dhClientService.recordStart(cmd);
                }
            }
        } catch (Exception ex) {
            log.error("开始录像异常:" + ex.getMessage());
        }
        return result;
    }
    //停止录像并存入minio
    @Override
    public String recordStopToMinio(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.recordStopToMinio(cmd);
                } else if (factory.equals("2")) {
                    url = dhClientService.recordStopToMinio(cmd);
                }
            }
        } catch (Exception ex) {
            log.error("停止录像异常:" + ex.getMessage());
        }
        return url;
    }
    //停止录像并不存入minio
    @Override
    public void recordStopNotToMinio(CameraCmd cmd) {
    }
    @Override
    public List<ArdChannel> getCameraChannelList(ArdCameras camera) {
        return null;
    }
    //获取相机架设参数
    @Override
    public Map<String, Object> getGisInfo(CameraCmd cmd) {
        Map<String, Object> map = new HashMap<>();
        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.getGisInfo(cmd);
                } else if (factory.equals("2")) {
                }
            }
        } catch (Exception ex) {
            log.error("获取相机架设参数异常:" + ex.getMessage());
        }
        return map;
    }
}
ard-work/src/main/java/com/ruoyi/device/dhsdk/controller/DhSdkController.java
@@ -37,23 +37,6 @@
    @Resource
    private IDhClientService sdk;
    /**
     * @描述 åˆå§‹åŠ è½½å¤§åŽåº“æ–‡ä»¶
     * @参数 []
     * @返回值 void
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/1/17 16:13
     * @修改人和其它信息 if (Platform.isLinux())
     */
    @PostConstruct
    public void initDHSDK() {
        //初始化加载sdk库文件
        if (sdk.init())
        {
            //登录所有相机
            sdk.loginAll();
        }
    }
    @ApiOperation(value = "云台控制", notes = "Code:1-左上 2-上 3-右上 4-å·¦ 5-巡航 6-右 7-左下 8-下 9-右下 10-焦距变大 11-焦距变小\n" +
            "12-焦点前调 13-焦点后调 14-光圈扩大 15-光圈缩小 ")
@@ -104,4 +87,34 @@
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.setZeroPtz(cmd));
    }
    @ApiOperation("相机抓图")
    @PostMapping("/picCutCate")
    @Log(title = "相机抓图", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    public @ResponseBody
    AjaxResult picCutCate(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        String url = sdk.picCutCate(cmd);
        return toAjaxString(url, "相机抓图");
    }
    @ApiOperation("手动录像开始")
    @PostMapping("/recordStart")
    @Log(title = "手动录像开始", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    public @ResponseBody
    AjaxResult recordStart(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        boolean b = sdk.recordStart(cmd);
        return toAjax(b);
    }
    @ApiOperation("手动录像停止")
    @PostMapping("/recordStop")
    @Log(title = "手动录像停止", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.recordBucketName", "cmd.recordObjectName"})
    public @ResponseBody
    AjaxResult recordStop(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        String url = sdk.recordStopToMinio(cmd);
        return AjaxResult.success(url);
    }
}
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/CapturePictureModule.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,106 @@
package com.ruoyi.device.dhsdk.module;
import com.ruoyi.device.dhsdk.lib.NetSDKLib;
import com.ruoyi.device.dhsdk.lib.ToolKits;
import com.sun.jna.ptr.IntByReference;
/**
 * \if ENGLISH_LANG
 * Capture Picture Interface
 * contains:local、remote、timer and stop capture picture
 * \else
 * æŠ“图接口实现
 * åŒ…含: æœ¬åœ°ã€è¿œç¨‹ã€å®šæ—¶å’Œåœæ­¢æŠ“图
 * \endif
 */
public class CapturePictureModule {
    public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
    /**
     * \if ENGLISH_LANG
     * Local Capture Picture
     * \else
     * æœ¬åœ°æŠ“图
     * \endif
     */
    public static boolean localCapturePicture(NetSDKLib.LLong hPlayHandle, String picFileName) {
        if (!netsdk.CLIENT_CapturePictureEx(hPlayHandle, picFileName, NetSDKLib.NET_CAPTURE_FORMATS.NET_CAPTURE_JPEG)) {
            System.err.printf("CLIENT_CapturePicture Failed!" + ToolKits.getErrorCodePrint());
            return false;
        } else {
            System.out.println("CLIENT_CapturePicture success");
        }
        return true;
    }
    /**
     * \if ENGLISH_LANG
     * Remote Capture Picture
     * \else
     * è¿œç¨‹æŠ“图
     * \endif
     */
    public static boolean remoteCapturePicture(NetSDKLib.LLong m_hLoginHandle,int chn) {
        return snapPicture(m_hLoginHandle,chn, 0, 0);
    }
    /**
     * \if ENGLISH_LANG
     * Timer Capture Picture
     * \else
     * å®šæ—¶æŠ“图
     * \endif
     */
    public static boolean timerCapturePicture(NetSDKLib.LLong m_hLoginHandle,int chn) {
        return snapPicture(m_hLoginHandle,chn, 1, 2);
    }
    /**
     * \if ENGLISH_LANG
     * Stop Timer Capture Picture
     * \else
     * åœæ­¢å®šæ—¶æŠ“图
     * \endif
     */
    public static boolean stopCapturePicture(NetSDKLib.LLong m_hLoginHandle,int chn) {
        return snapPicture(m_hLoginHandle,chn, -1, 0);
    }
    /**
     * \if ENGLISH_LANG
     * Capture Picture (except local capture picture, others all call this interface)
     * \else
     * æŠ“图 (除本地抓图外, å…¶ä»–全部调用此接口)
     * \endif
     */
    private static boolean snapPicture(NetSDKLib.LLong m_hLoginHandle,int chn, int mode, int interval) {
        // send caputre picture command to device
        NetSDKLib.SNAP_PARAMS stuSnapParams = new NetSDKLib.SNAP_PARAMS();
        stuSnapParams.Channel = chn;              // channel
        stuSnapParams.mode = mode;                // capture picture mode
        stuSnapParams.Quality = 3;                // picture quality
        stuSnapParams.InterSnap = interval;     // timer capture picture time interval
        stuSnapParams.CmdSerial = 0;              // request serial
        IntByReference reserved = new IntByReference(0);
        if (!LoginModule.netsdk.CLIENT_SnapPictureEx(m_hLoginHandle, stuSnapParams, reserved)) {
            System.err.printf("CLIENT_SnapPictureEx Failed!" + ToolKits.getErrorCodePrint());
            return false;
        } else {
            System.out.println("CLIENT_SnapPictureEx success");
        }
        return true;
    }
    /**
     * \if ENGLISH_LANG
     * Set Capture Picture Callback
     * \else
     * è®¾ç½®æŠ“图回调函数
     * \endif
     */
    public static void setSnapRevCallBack(NetSDKLib.fSnapRev cbSnapReceive){
        LoginModule.netsdk.CLIENT_SetSnapRevCallBack(cbSnapReceive, null);
    }
}
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java
@@ -3,6 +3,7 @@
import com.ruoyi.device.dhsdk.lib.NetSDKLib;
import com.sun.jna.Structure;
import com.sun.jna.ptr.IntByReference;
import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint;
/**
 * @Description:
@@ -12,6 +13,7 @@
 **/
public class ConfigModule {
    public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
    public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE;
    /**
     * æŸ¥è¯¢è®¾å¤‡çŠ¶æ€
     */
@@ -19,10 +21,42 @@
        IntByReference intRetLen = new IntByReference();
        stuInfo.write();
        if (!LoginModule.netsdk.CLIENT_QueryDevState(hLoginHandle, nType, stuInfo.getPointer(), stuInfo.size(), intRetLen, 3000)) {
        if (!netsdk.CLIENT_QueryDevState(hLoginHandle, nType, stuInfo.getPointer(), stuInfo.size(), intRetLen, 3000)) {
            return false;
        }
        stuInfo.read();
        return true;
    }
    /**
     * è®¾ç½®å•个配置
     * @param hLoginHandle ç™»é™†å¥æŸ„
     * @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;
        byte szBuffer[] = new byte[nBufferLen];
        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)) {
                result = true;
            } else {
                System.err.printf("Set %s Config Failed! Last Error = %s\n" , strCmd , getErrorCodePrint());
                result = false;
            }
        } else {
            System.err.println("Packet " + strCmd + " Config Failed!" + getErrorCodePrint());
            result = false;
        }
        return result;
    }
}
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/LoginModule.java
@@ -4,13 +4,8 @@
import com.ruoyi.device.dhsdk.lib.NetSDKLib.LLong;
import com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY;
import com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY;
import com.ruoyi.device.dhsdk.lib.ToolKits;
import com.sun.jna.Structure;
import com.sun.jna.ptr.IntByReference;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint;
/**
@@ -21,7 +16,6 @@
public class LoginModule {
    public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
    public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE;
    // è®¾å¤‡ä¿¡æ¯
    public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java
@@ -7,200 +7,215 @@
 * ä¸»è¦æœ‰ ï¼šå…«ä¸ªæ–¹å‘控制、变倍、变焦、光圈功能
 */
public class PtzControlModule {
    public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
    /**
     * å‘上
     */
    public static boolean ptzControlUpStart(NetSDKLib.LLong lLoginID,int nChannelID, int lParam1, int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                    NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
                                    lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlUpEnd(int nChannelID) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                     NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
                                     0, 0, 0, 1);
    }
    /**
     * å‘下
     */
    public static boolean ptzControlDownStart(int nChannelID, int lParam1, int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                            NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
                                            lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlDownEnd(int nChannelID) {
        return     LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                             NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
                                             0, 0, 0, 1);
    }
    /**
     * å‘å·¦
     */
    public static boolean ptzControlLeftStart(int nChannelID, int lParam1, int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                            NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
                                            lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlLeftEnd(int nChannelID) {
        return    LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                             NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
                                             0, 0, 0, 1);
    }
    /**
     * å‘右
     */
    public static boolean ptzControlRightStart(int nChannelID, int lParam1,int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                            NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
                                            lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlRightEnd(int nChannelID) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                             NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
                                             0, 0, 0, 1);
    }
    /**
     * å‘左上
     */
    public static boolean ptzControlLeftUpStart(int nChannelID, int lParam1, int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                            NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
                                            lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlLeftUpEnd(int nChannelID) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                             NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
                                             0, 0, 0, 1);
    }
    /**
     * å‘右上
     */
    public static boolean ptzControlRightUpStart(int nChannelID, int lParam1, int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                            NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
                                            lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlRightUpEnd(int nChannelID) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                             NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
                                             0, 0, 0, 1);
    }
    /**
     * å‘上
     */
    public static boolean ptzControlUpStart(NetSDKLib.LLong lLoginID, int nChannelID, int lParam1, int lParam2) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
                lParam1, lParam2, 0, 0);
    }
    /**
     * å‘左下
     */
    public static boolean ptzControlLeftDownStart(int nChannelID, int lParam1, int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                                    NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
                                                    lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlLeftDownEnd(int nChannelID) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                         NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
                                         0, 0, 0, 1);
    }
    /**
     * å‘右下
     */
    public static boolean ptzControlRightDownStart(int nChannelID, int lParam1, int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                                    NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
                                                    lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlRightDownEnd(int nChannelID) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                         NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
                                         0, 0, 0, 1);
    }
    public static boolean ptzControlUpEnd(int nChannelID) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
                0, 0, 0, 1);
    }
    /**
     * å‘下
     */
    public static boolean ptzControlDownStart(int nChannelID, int lParam1, int lParam2) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
                lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlDownEnd(int nChannelID) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
                0, 0, 0, 1);
    }
    /**
     * å‘å·¦
     */
    public static boolean ptzControlLeftStart(int nChannelID, int lParam1, int lParam2) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
                lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlLeftEnd(int nChannelID) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
                0, 0, 0, 1);
    }
    /**
     * å‘右
     */
    public static boolean ptzControlRightStart(int nChannelID, int lParam1, int lParam2) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
                lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlRightEnd(int nChannelID) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
                0, 0, 0, 1);
    }
    /**
     * å‘左上
     */
    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,
                lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlLeftUpEnd(int nChannelID) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
                0, 0, 0, 1);
    }
    /**
     * å‘右上
     */
    public static boolean ptzControlRightUpStart(int nChannelID, int lParam1, int lParam2) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
                lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlRightUpEnd(int nChannelID) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
                0, 0, 0, 1);
    }
    /**
     * å‘左下
     */
    public static boolean ptzControlLeftDownStart(int nChannelID, int lParam1, int lParam2) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
                lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlLeftDownEnd(int nChannelID) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
                0, 0, 0, 1);
    }
    /**
     * å‘右下
     */
    public static boolean ptzControlRightDownStart(int nChannelID, int lParam1, int lParam2) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
                lParam1, lParam2, 0, 0);
    }
    public static boolean ptzControlRightDownEnd(int nChannelID) {
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
                0, 0, 0, 1);
    }
    /**
     * å˜å€+
     */
    public static boolean ptzControlZoomAddStart(int nChannelID, int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                           NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
                                           0, lParam2, 0, 0);
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
                0, lParam2, 0, 0);
    }
    public static boolean ptzControlZoomAddEnd(int nChannelID) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                            NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
                                            0, 0, 0, 1);
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
                0, 0, 0, 1);
    }
    /**
     * å˜å€-
     */
    public static boolean ptzControlZoomDecStart(int nChannelID, int lParam2) {
       return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                            NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
                                            0, lParam2, 0, 0);
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
                0, lParam2, 0, 0);
    }
    public static boolean ptzControlZoomDecEnd(int nChannelID) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                             NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
                                             0, 0, 0, 1);
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
                0, 0, 0, 1);
    }
    /**
     * å˜ç„¦+
     */
    public static boolean ptzControlFocusAddStart(int nChannelID, int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                                    NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
                                                    0, lParam2, 0, 0);
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
                0, lParam2, 0, 0);
    }
    public static boolean ptzControlFocusAddEnd(int nChannelID) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                         NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
                                         0, 0, 0, 1);
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
                0, 0, 0, 1);
    }
    /**
     * å˜ç„¦-
     */
    public static boolean ptzControlFocusDecStart(int nChannelID, int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                            NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
                                            0, lParam2, 0, 0);
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
                0, lParam2, 0, 0);
    }
    public static boolean ptzControlFocusDecEnd(int nChannelID) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                             NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
                                             0, 0, 0, 1);
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
                0, 0, 0, 1);
    }
    /**
     * å…‰åœˆ+
     */
    public static boolean ptzControlIrisAddStart(int nChannelID, int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                            NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
                                            0, lParam2, 0, 0);
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
                0, lParam2, 0, 0);
    }
    public static boolean ptzControlIrisAddEnd(int nChannelID) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                             NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
                                             0, 0, 0, 1);
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
                0, 0, 0, 1);
    }
    /**
     * å…‰åœˆ-
     */
    public static boolean ptzControlIrisDecStart(int nChannelID, int lParam2) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                                    NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
                                                    0, lParam2, 0, 0);
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
                0, lParam2, 0, 0);
    }
    public static boolean ptzControlIrisDecEnd(int nChannelID) {
        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                                             NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
                                             0, 0, 0, 1);
        return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
                0, 0, 0, 1);
    }
}
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
package com.ruoyi.device.dhsdk.module;
import com.ruoyi.device.dhsdk.lib.NetSDKLib;
import com.ruoyi.device.dhsdk.lib.ToolKits;
import com.sun.jna.Pointer;
import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk;
/**
 * å®žæ—¶é¢„览接口实现
 * ä¸»è¦æœ‰ ï¼šå¼€å§‹æ‹‰æµã€åœæ­¢æ‹‰æµåŠŸèƒ½
 */
public class RealPlayModule {
    /**
     * \if ENGLISH_LANG
     * Start RealPlay
     * \else
     * å¼€å§‹é¢„览
     * \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) {
        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) {
            System.err.println("开始实时预览失败,错误码" + ToolKits.getErrorCodePrint());
        } else {
            System.out.println("Success to start realplay");
        }
        return m_hPlayHandle;
    }
    /**
     * \if ENGLISH_LANG
     * Start RealPlay
     * \else
     * åœæ­¢é¢„览
     * \endif
     */
    public static void stopRealPlay(NetSDKLib.LLong m_hPlayHandle) {
        if (m_hPlayHandle.longValue() == 0) {
            return;
        }
        boolean bRet = netsdk.CLIENT_StopRealPlayEx(m_hPlayHandle);
        if (bRet) {
            m_hPlayHandle.setValue(0);
        }
    }
    /**
     * å®žæ—¶é¢„览数据回调函数--扩展(pBuffer内存由SDK内部申请释放)
     */
    private static class CbfRealDataCallBackEx implements NetSDKLib.fRealDataCallBackEx {
        private CbfRealDataCallBackEx() {
        }
        private static class CallBackHolder {
            private static CbfRealDataCallBackEx instance = new CbfRealDataCallBackEx();
        }
        public static CbfRealDataCallBackEx getInstance() {
            return CallBackHolder.instance;
        }
        @Override
        public void invoke(NetSDKLib.LLong lRealHandle, int dwDataType, Pointer pBuffer,
                           int dwBufSize, int param, Pointer dwUser) {
            int bInput = 0;
            if (0 != lRealHandle.longValue()) {
                switch (dwDataType) {
                    case 0:
                        System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为原始音视频混合数据");
                        break;
                    case 1:
                        //标准视频数据
                        System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为标准视频数据");
                        break;
                    case 2:
                        //yuv æ•°æ®
                        System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为yuv数据");
                        break;
                    case 3:
                        //pcm éŸ³é¢‘数据
                        System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为音频数据");
                        break;
                    case 4:
                        //原始音频数据
                        System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为原始音频数据");
                        break;
                    default:
                        break;
                }
            }
        }
    }
}
ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java
@@ -40,6 +40,25 @@
    //设置PTZ
    boolean setPtz(CameraCmd cmd);
    //设置零方位角
    boolean setZeroPtz(CameraCmd cmd);
    //抓图
    String picCutCate(CameraCmd cmd);
    //短时录像
    String record(CameraCmd cmd);
    boolean recordStart(CameraCmd cmd);
    String recordStopToMinio(CameraCmd cmd);
    //引导目标位置
    boolean guideTargetPosition(CameraCmd cmd);
    //调用预置位
    boolean gotoPreset(CameraCmd cmd);
    //设置预置位
    boolean setPreset(CameraCmd cmd);
    //聚焦模式
    boolean controlFocusMode(CameraCmd cmd);
}
ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
@@ -1,6 +1,9 @@
package com.ruoyi.device.dhsdk.service.impl;
import com.ruoyi.common.annotation.SdkOperate;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.file.MimeTypeUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
@@ -10,27 +13,39 @@
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.ToolKits;
import com.ruoyi.device.dhsdk.lib.enumeration.EM_NEW_QUERY_SYSTEM_INFO;
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.PtzControlModule;
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.sdk.HCNetSDK;
import com.ruoyi.utils.gis.GisUtil;
import com.ruoyi.utils.minio.MinioUtil;
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
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.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.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.hiksdk.sdk.HCNetSDK.*;
import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk;
import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.NET_DVR_SET_PTZPOS;
/**
 * @ClassName DhSdkServiceImpl
@@ -46,6 +61,8 @@
    private IArdCamerasService ardCamerasService;
    @Resource
    private IArdChannelService ardChannelService;
    @Value("${minio.endpoint}")
    private String minioEndPoint;
    private Vector<String> chnlist = new Vector<String>();
    // è®¾å¤‡æ–­çº¿é€šçŸ¥å›žè°ƒ
@@ -53,7 +70,11 @@
    // ç½‘络连接恢复
    private static HaveReConnect haveReConnect = new HaveReConnect();
    /**
     * ç™»å½•所有相机
     * åˆ˜è‹ä¹‰
     * 2023/10/17 8:28:13
     */
    @Override
    public void loginAll() {
        try {
@@ -70,11 +91,21 @@
        }
    }
    /**
     * sdk初始化
     * åˆ˜è‹ä¹‰
     * 2023/10/17 8:28:13
     */
    @Override
    public Boolean init() {
        return LoginModule.init(disConnect, haveReConnect);   // æ‰“开工程,初始化
    }
    /**
     * ç™»å½•
     * åˆ˜è‹ä¹‰
     * 2023/10/17 8:28:13
     */
    @Override
    @Async
    public Boolean login(ArdCameras camera) {
@@ -114,6 +145,11 @@
        return true;
    }
    /**
     * æ³¨é”€
     * åˆ˜è‹ä¹‰
     * 2023/10/17 8:28:13
     */
    @Override
    public Boolean logout(String cameraId) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
@@ -123,6 +159,11 @@
        return LoginModule.logout(loginId);
    }
    /**
     * æ˜¯å¦åœ¨çº¿æ£€æµ‹
     * åˆ˜è‹ä¹‰
     * 2023/10/17 8:28:13
     */
    @Override
    public boolean isOnLine(CameraCmd cmd) {
        try {
@@ -143,6 +184,11 @@
        return true;
    }
    /**
     * äº‘台控制
     * åˆ˜è‹ä¹‰
     * 2023/10/17 8:28:13
     */
    @Override
    public boolean pTZControl(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
@@ -176,7 +222,7 @@
                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL;
                break;
            case 5:
                dwPTZCommand = HCNetSDK.RUN_SEQ;
                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_LOOP_CONTROL;
                break;
            case 6:
                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL;
@@ -211,14 +257,22 @@
            case 15:
                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL;
                break;
            case 16:
                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LAMP_CONTROL;
                break;
        }
        boolean bool = LoginModule.netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop);
        boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop);
        if (!bool) {
            log.error("控制失败,请稍后重试" + getErrorCodePrint());
        }
        return bool;
    }
    /**
     * èŽ·å–PTZ值
     * åˆ˜è‹ä¹‰
     * 2023/10/17 8:28:13
     */
    @Override
    public Map<String, Object> getPtz(CameraCmd cmd) {
        Map<String, Object> ptzMap = new HashMap<>();
@@ -240,6 +294,7 @@
        }
        return ptzMap;
    }
    /**
     * @描述 è®¾ç½®ptz信息
     * @参数 [userId, channelNum]
@@ -257,12 +312,15 @@
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        LLong loginId = (LLong)GlobalVariable.loginMap.get(cameraId);
        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
        try {
            int p = (int)(ptz.get("p") * 10);
            int t = (int)(ptz.get("t") * 10);
            int p = (int) (ptz.get("p") * 10);
            int t = (int) (ptz.get("t") * 10);
            int z = ptz.get("z").intValue();
            boolean bool = LoginModule.netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0 );
            if (z == 0) {
                z = 1;
            }
            boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0);
            if (!bool) {
                log.error("控制失败,请稍后重试" + getErrorCodePrint());
            }
@@ -289,7 +347,7 @@
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        LLong loginId = (LLong)GlobalVariable.loginMap.get(cameraId);
        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
        boolean bool = NetSDKLib.NETSDK_INSTANCE.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RESETZERO, 0, 0, 0, 0);
        if (!bool) {
            log.error("控制失败,请稍后重试" + getErrorCodePrint());
@@ -297,21 +355,308 @@
        return bool;
    }
    /**
     * @描述 æˆªå›¾ å­˜æœåС噍
     * @参数 [cameraId, channelNum]
     * @返回值 java.lang.String
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/2/2 14:59
     * @修改人和其它信息
     */
    @Override
    @SdkOperate
    public String picCutCate(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer chanNo = cmd.getChanNo();
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return "";
        }
        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
        String bucketName = "pic";
        String picUrl = "";
        String bucketObject = "/capture/" + IdUtils.simpleUUID() + ".jpeg";
        fCaptureReceiveCB m_CaptureReceiveCB = new fCaptureReceiveCB(minioEndPoint, bucketName, bucketObject);
        CapturePictureModule.setSnapRevCallBack(m_CaptureReceiveCB);
        boolean b = CapturePictureModule.remoteCapturePicture(loginId, chanNo - 1);
        if (b) {
            picUrl = minioEndPoint + "/" + bucketName + bucketObject;
        }
        return picUrl;
    }
    // è®¾å¤‡æ–­çº¿å›žè°ƒ: é€šè¿‡ CLIENT_Init è®¾ç½®è¯¥å›žè°ƒå‡½æ•°ï¼Œå½“设备出现断线时,SDK会调用该函数
    /**
     * @描述 çŸ­æ—¶å½•像
     * @参数 [userId, channelNum, enable]
     * @返回值 void
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/1/20 11:18
     * @修改人和其它信息
     */
    @Override
    public String record(CameraCmd cmd) {
        try {
            String url = "";
            String cameraId = cmd.getCameraId();
            Integer chanNo = cmd.getChanNo();
            String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
            boolean enable = cmd.isEnable();
            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                return "";
            }
            LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
            if (enable) {
                LLong lRealHandle = new LLong(0);
                if (!GlobalVariable.previewMap.containsKey(cameraId)) {
                    lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo, 0);
                    if (lRealHandle.longValue() <= 0) {
                        log.error("取流失败" + getErrorCodePrint());
                        return "";
                    }
                    log.debug("取流成功");
                    GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue());
                }
                if (!netsdk.CLIENT_SaveRealData(lRealHandle, path)) {
                    log.error("保存视频文件到临时文件夹失败 é”™è¯¯ç ä¸º:  " + getErrorCodePrint());
                    return "";
                }
                log.debug("录像开始");
            } else {
                if (GlobalVariable.previewMap.containsKey(cameraId)) {
                    LLong lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
                    boolean b = netsdk.CLIENT_StopSaveRealData(lRealHandle);
                    GlobalVariable.previewMap.remove(cameraId);
                }
                log.debug("录像停止");
            }
            return url;
        } catch (Exception ex) {
            log.error("录像异常" + ex.getMessage());
            return "";
        }
    }
    @Override
    public boolean recordStart(CameraCmd cmd) {
        try {
            String cameraId = cmd.getCameraId();
            Integer chanNo = cmd.getChanNo();
            String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                return false;
            }
            LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
            LLong lRealHandle;
            if (GlobalVariable.previewMap.containsKey(cameraId)) {
                lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
                netsdk.CLIENT_StopRealPlayEx(lRealHandle);
                GlobalVariable.previewMap.remove(cameraId);
                log.debug("停止当前录像");
            }
            lRealHandle = RealPlayModule.startRealPlay1(loginId, chanNo - 1, path);
            if (lRealHandle.longValue() <= 0) {
                log.error("取流失败" + getErrorCodePrint());
            }
            log.debug("取流成功");
            GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue());
            GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
            //if (!netsdk.CLIENT_SaveRealData(lRealHandle, path)) {
            //    log.error("保存视频文件到临时文件夹失败 é”™è¯¯ç ä¸º:  " +getErrorCodePrint());
            //    return false;
            //}
            log.debug("录像开始");
            return true;
        } catch (Exception ex) {
            log.error("开始录像异常" + ex.getMessage());
            return false;
        }
    }
    @Override
    public String recordStopToMinio(CameraCmd cmd) {
        String url = "";
        try {
            String cameraId = cmd.getCameraId();
            String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                return "";
            }
            LLong lRealHandle;
            if (GlobalVariable.previewMap.containsKey(cameraId)) {
                lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
                netsdk.CLIENT_StopRealPlayEx(lRealHandle);
                GlobalVariable.previewMap.remove(cameraId);
                log.debug("停止当前录像");
            }
            //存入minio
            String BucketName = cmd.getRecordBucketName();
            String ObjectName = cmd.getRecordObjectName() + ".mp4";
            FileInputStream stream = new FileInputStream(path);
            boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4");
            if (b) {
                url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName);
                log.debug("上传文件成功!" + url);
            }
            return url;
        } catch (Exception ex) {
            log.error("录像异常" + ex.getMessage());
            return "";
        }
    }
    /**
     * å¼•导目标位置
     * åˆ˜è‹ä¹‰
     * 2023/10/17 8:27:48
     */
    @Override
    public boolean guideTargetPosition(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer chanNo = cmd.getChanNo();
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
        try {
            ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId);
            double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()};
            double[] targetPositions = cmd.getTargetPosition();
            double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150);
            int p = (int) (cameraPTZ[0] * 10);
            int t = (int) (cameraPTZ[1] * 10);
            int z = (int) (cameraPTZ[2]);
            boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0);
            if (!bool) {
                log.error("控制失败,请稍后重试" + getErrorCodePrint());
            }
            return bool;
        } catch (Exception ex) {
            log.error("引导异常:" + ex.getMessage());
            return false;
        }
    }
    //转至预置点
    @Override
    public boolean gotoPreset(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer chanNo = cmd.getChanNo();
        Integer PresetIndex = cmd.getPresetIndex();
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
        try {
            boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NET_PTZ_POINT_MOVE_CONTROL, 0, PresetIndex, 0, 0);
            if (!bool) {
                log.error("控制失败,请稍后重试" + getErrorCodePrint());
            }
            return bool;
        } catch (Exception ex) {
            log.error("转至预置点异常:" + ex.getMessage());
            return false;
        }
    }
    @Override
    //设置预置位
    public boolean setPreset(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer chanNo = cmd.getChanNo();
        Integer PresetIndex = cmd.getPresetIndex();
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
        try {
            boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NET_PTZ_POINT_SET_CONTROL, 0, PresetIndex, 0, 0);
            if (!bool) {
                log.error("控制失败,请稍后重试" + getErrorCodePrint());
            }
            return bool;
        } catch (Exception ex) {
            log.error("设置预置点异常:" + ex.getMessage());
            return false;
        }
    }
    //切换聚焦模式
    @Override
    public boolean controlFocusMode(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer chanNo = cmd.getChanNo();
        boolean enable = cmd.isEnable();
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
        try {
            CFG_VIDEO_IN_FOCUS cfg_video_in_focus = new CFG_VIDEO_IN_FOCUS();
            CFG_VIDEO_IN_FOCUS_UNIT[] stVideoInFocusUnit = new CFG_VIDEO_IN_FOCUS_UNIT[32];
            if (enable) {
                stVideoInFocusUnit[0].nMode = 4;//手动聚焦
            } else {
                stVideoInFocusUnit[0].nMode = 2;//手动聚焦
            }
            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());
            }
            return bool;
        } catch (Exception ex) {
            log.error("切换聚焦模式异常:" + ex.getMessage());
            return false;
        }
    }
    // è®¾å¤‡æ–­çº¿å›žè°ƒ: å½“设备出现断线时,SDK会调用该函数
    private static class DisConnect implements NetSDKLib.fDisConnect {
        public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
            System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
        }
    }
    // ç½‘络连接恢复,设备重连成功回调
    // é€šè¿‡ CLIENT_SetAutoReconnect è®¾ç½®è¯¥å›žè°ƒå‡½æ•°ï¼Œå½“已断线的设备重连成功时,SDK会调用该函数
    // ç½‘络连接恢复回调:设备重连成功回调,当已断线的设备重连成功时,SDK会调用该函数
    private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
        @Override
        public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
            System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
        }
    }
    // æŠ“图接收回调:当抓图成功,sdk会调用该函数
    public static class fCaptureReceiveCB implements NetSDKLib.fSnapRev {
        private String minioEndPoint;
        private String ObjectName;
        private String bucketName;
        public fCaptureReceiveCB(String minioEndPoint, String bucketName, String ObjectName) {
            this.minioEndPoint = minioEndPoint;
            this.bucketName = bucketName;
            this.ObjectName = ObjectName;
        }
        public void invoke(LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) {
            if (pBuf != null && RevLen > 0) {
                byte[] buf = pBuf.getByteArray(0, RevLen);
                //存储到minio
                InputStream input = new ByteArrayInputStream(buf);
                try {
                    boolean b = MinioUtil.uploadObject(bucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG);
                    if (b) {
                        String url = minioEndPoint + "/" + bucketName + ObjectName;
                        log.debug("上传文件成功!" + url);
                    }
                } catch (IOException ex) {
                    log.error("上传文件异常:" + ex.getMessage());
                }
            }
        }
    }
}
ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/HikSdkController.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java ÐÞ¸Ä
@@ -1,338 +1,321 @@
package com.ruoyi.device.hiksdk.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
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.dhsdk.service.IDhClientService;
import com.ruoyi.device.hiksdk.service.IHikClientService;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * @ClassName: sdkController
 * @Description:
 * @Author: Administrator
 * @Date: 2023å¹´01月17日 12:04
 * @Version: 1.0
 **/
@Api(tags = "海康SDK接口")
@Controller
@RequestMapping("/hik")
@Anonymous
public class SdkController extends BaseController {
    @Resource
    private IHikClientService sdk;
    @Resource
    private IDhClientService ClientService;
    @Resource
    private IArdCamerasService ardCamerasService;
    /**
     * @描述 åˆå§‹åŠ è½½æµ·åº·åº“æ–‡ä»¶
     * @参数 []
     * @返回值 void
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/1/17 16:13
     * @修改人和其它信息 if (Platform.isLinux())
     */
    @PostConstruct
    public void initHCNetSDK() {
        //初始化加载sdk库文件
        sdk.loadHCNetSDKLib();
        //登录所有相机
        sdk.loginAll();
    }
    @RequestMapping("/preview")
    private String preview() {
        return "preview";
    }
    @RequestMapping("/index")
    private String index() {
        return "test";
    }
    @GetMapping("/list")
    public @ResponseBody
    AjaxResult list(ArdCameras ardCamera) {
        List<ArdCameras> list = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera);
        return AjaxResult.success("相机列表:", list);
    }
    @ApiOperation("获取码流压缩参数")
    @PostMapping("/getVideoCompressionCfg")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    @Log(title = "获取码流压缩参数", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult getVideoCompressionCfg(@RequestBody CameraCmd cmd) {
        return AjaxResult.success(sdk.getVideoCompressionCfg(cmd));
    }
    @ApiOperation("在线状态")
    @PostMapping("/state")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId"})
    @Log(title = "在线状态", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult getOnlineState(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        boolean onLine = sdk.isOnLine(cmd);
        return AjaxResult.success(onLine);
    }
    @ApiOperation(value = "云台控制", notes = "Code:1-左上 2-上 3-右上 4-å·¦ 5-巡航 6-右 7-左下 8-下 9-右下 10-焦距变大 11-焦距变小\n" +
            "12-焦点前调 13-焦点后调 14-光圈扩大 15-光圈缩小 16-雨刷开启")
    @PostMapping("/PTZControlWithSpeed")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.speed", "cmd.enable", "cmd.code"})
    @Log(title = "云台控制", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.pTZControlWithSpeed(cmd));
    }
    @ApiOperation("调用预置点")
    @PostMapping("/gotoPreset")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.presetIndex"})
    @Log(title = "调用预置点", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult gotoPreset(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.gotoPreset(cmd));
    }
    @ApiOperation("设置预置点")
    @PostMapping("/setPreset")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.presetIndex"})
    @Log(title = "设置预置点", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult setPreset(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.setPreset(cmd));
    }
    @ApiOperation("获取聚焦值")
    @PostMapping("/getFocusPos")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    @Log(title = "获取聚焦值", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult getFocusPos(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        Map<String, Object> Map = sdk.getFocusPos(cmd);
        return AjaxResult.success("获取聚焦值", Map);
    }
    @ApiOperation("设置聚焦值")
    @PostMapping("/setFocusPos")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.dwFocusPos"})
    @Log(title = "设置聚焦值", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult setFocusPos(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.setFocusPos(cmd));
    }
    @ApiOperation("获取PTZ")
    @PostMapping("/getPTZ")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    @Log(title = "获取PTZ", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult getPTZ(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        Map<String, Object> ptzMap = sdk.getPtz(cmd);
        return AjaxResult.success("获取ptz", ptzMap);
    }
    @ApiOperation("获取PTZ范围")
    @PostMapping("/getPTZScope")
    @Log(title = "获取PTZ范围", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    public @ResponseBody
    AjaxResult getPTZScope(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        Map<String, Object> ptzMap = sdk.getPtzScope(cmd);
        return AjaxResult.success("获取ptz范围", ptzMap);
    }
    @ApiOperation("设置PTZ")
    @PostMapping("/setPTZ")
    @Log(title = "设置PTZ", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.ptzMap"})
    public @ResponseBody
    AjaxResult setPTZ(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.setPtz(cmd));
    }
    @ApiOperation("指向目标")
    @PostMapping("/setTargetPosition")
    @Log(title = "指向目标", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.targetPosition"})
    public @ResponseBody
    AjaxResult setTargetPosition(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.guideTargetPosition(cmd));
    }
    @ApiOperation("设置零方位角")
    @PostMapping("/setZeroPTZ")
    @Log(title = "设置零方位角", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    public @ResponseBody
    AjaxResult setZeroPTZ(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.setZeroPtz(cmd));
    }
    @ApiOperation("设置锁定")
    @PostMapping("/setPTZLock")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.expired"})
    @Log(title = "设置锁定", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult setPTZLock(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return AjaxResult.success(sdk.controlLock(cmd));
    }
    @ApiOperation("设置解锁")
    @PostMapping("/setPTZUnLock")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId"})
    @Log(title = "设置解锁", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult setPTZUnLock(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return AjaxResult.success(sdk.controlUnLock(cmd));
    }
    @ApiOperation("获取云台锁定信息")
    @PostMapping("/getPTZLockInfo")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    @Log(title = "获取云台锁定信息", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult getPTZLockInfo(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        int byWorkMode = sdk.getPTZLockInfo(cmd);
        if (byWorkMode == 0) {
            return AjaxResult.success("云台锁定状态:解锁");
        } else if (byWorkMode == 1) {
            return AjaxResult.success("云台锁定状态:锁定");
        } else {
            return AjaxResult.error("云台锁定状态:失败");
        }
    }
    @ApiOperation("透雾开关")
    @PostMapping("/defogcfg")
    @Log(title = "透雾开关", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult defogcfg(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.controlDefogcfg(cmd));
    }
    @ApiOperation("红外开关")
    @PostMapping("/infrarecfg")
    @Log(title = "红外开关", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult infrarecfg(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.controlInfrarecfg(cmd));
    }
    @ApiOperation(value = "手动/自动聚焦", notes = "true手动flase自动")
    @PostMapping("/focusMode")
    @Log(title = "手动/自动聚焦", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult enableFocusMode(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.controlFocusMode(cmd));
    }
    @ApiOperation(value = "获取聚焦模式", notes = "1手动2自动")
    @PostMapping("/getFocusMode")
    public @ResponseBody
    AjaxResult getFocusMode(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        String focusMode = sdk.getFocusMode(cmd);
        return AjaxResult.success(focusMode);
    }
    @ApiOperation("云台加热")
    @PostMapping("/heateRpwron")
    @Log(title = "云台加热", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult heateRpwron(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.controlPTHeateRpwron(cmd));
    }
    @ApiOperation("镜头加热")
    @PostMapping("/cameraDeicing")
    @Log(title = "镜头加热", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult cameraDeicing(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.controlCameraDeicing(cmd));
    }
    @PostMapping("/captureJPEGPicture")
    public @ResponseBody
    AjaxResult captureJPEGPicture(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        String base64Str = sdk.captureJPEGPicture(cmd);
        return toAjaxString(base64Str, "相机抓图");
    }
    @ApiOperation("相机抓图")
    @PostMapping("/picCutCate")
    @Log(title = "相机抓图", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    public @ResponseBody
    AjaxResult picCutCate(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        String path = sdk.picCutCate(cmd);
        return toAjaxString(path, "相机抓图");
    }
    @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 path = sdk.record(cmd);
        return toAjaxString(path, "手动录像");
    }
    @ApiOperation("获取相机架设参数")
    @PostMapping("/getCameraSetupCFG")
    @Log(title = "获取相机架设参数", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult getCameraSetupCFG(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return AjaxResult.success(sdk.getGisInfo(cmd));
    }
}
package com.ruoyi.device.hiksdk.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
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.dhsdk.service.IDhClientService;
import com.ruoyi.device.hiksdk.service.IHikClientService;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * @ClassName: sdkController
 * @Description:
 * @Author: Administrator
 * @Date: 2023å¹´01月17日 12:04
 * @Version: 1.0
 **/
@Api(tags = "海康SDK接口")
@Controller
@RequestMapping("/hik")
@Anonymous
public class HikSdkController extends BaseController {
    @Resource
    private IHikClientService sdk;
    @Resource
    private IArdCamerasService ardCamerasService;
    @RequestMapping("/preview")
    private String preview() {
        return "preview";
    }
    @RequestMapping("/index")
    private String index() {
        return "test";
    }
    @GetMapping("/list")
    public @ResponseBody
    AjaxResult list(ArdCameras ardCamera) {
        List<ArdCameras> list = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera);
        return AjaxResult.success("相机列表:", list);
    }
    @ApiOperation("获取码流压缩参数")
    @PostMapping("/getVideoCompressionCfg")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    @Log(title = "获取码流压缩参数", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult getVideoCompressionCfg(@RequestBody CameraCmd cmd) {
        return AjaxResult.success(sdk.getVideoCompressionCfg(cmd));
    }
    @ApiOperation("在线状态")
    @PostMapping("/state")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId"})
    @Log(title = "在线状态", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult getOnlineState(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        boolean onLine = sdk.isOnLine(cmd);
        return AjaxResult.success(onLine);
    }
    @ApiOperation(value = "云台控制", notes = "Code:1-左上 2-上 3-右上 4-å·¦ 5-巡航 6-右 7-左下 8-下 9-右下 10-焦距变大 11-焦距变小\n" +
            "12-焦点前调 13-焦点后调 14-光圈扩大 15-光圈缩小 16-雨刷开启")
    @PostMapping("/PTZControlWithSpeed")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.speed", "cmd.enable", "cmd.code"})
    @Log(title = "云台控制", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.pTZControlWithSpeed(cmd));
    }
    @ApiOperation("调用预置点")
    @PostMapping("/gotoPreset")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.presetIndex"})
    @Log(title = "调用预置点", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult gotoPreset(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.gotoPreset(cmd));
    }
    @ApiOperation("设置预置点")
    @PostMapping("/setPreset")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.presetIndex"})
    @Log(title = "设置预置点", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult setPreset(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.setPreset(cmd));
    }
    @ApiOperation("获取聚焦值")
    @PostMapping("/getFocusPos")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    @Log(title = "获取聚焦值", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult getFocusPos(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        Map<String, Object> Map = sdk.getFocusPos(cmd);
        return AjaxResult.success("获取聚焦值", Map);
    }
    @ApiOperation("设置聚焦值")
    @PostMapping("/setFocusPos")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.dwFocusPos"})
    @Log(title = "设置聚焦值", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult setFocusPos(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.setFocusPos(cmd));
    }
    @ApiOperation("获取PTZ")
    @PostMapping("/getPTZ")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    @Log(title = "获取PTZ", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult getPTZ(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        Map<String, Object> ptzMap = sdk.getPtz(cmd);
        return AjaxResult.success("获取ptz", ptzMap);
    }
    @ApiOperation("获取PTZ范围")
    @PostMapping("/getPTZScope")
    @Log(title = "获取PTZ范围", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    public @ResponseBody
    AjaxResult getPTZScope(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        Map<String, Object> ptzMap = sdk.getPtzScope(cmd);
        return AjaxResult.success("获取ptz范围", ptzMap);
    }
    @ApiOperation("设置PTZ")
    @PostMapping("/setPTZ")
    @Log(title = "设置PTZ", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.ptzMap"})
    public @ResponseBody
    AjaxResult setPTZ(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.setPtz(cmd));
    }
    @ApiOperation("指向目标")
    @PostMapping("/setTargetPosition")
    @Log(title = "指向目标", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.targetPosition"})
    public @ResponseBody
    AjaxResult setTargetPosition(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.guideTargetPosition(cmd));
    }
    @ApiOperation("设置零方位角")
    @PostMapping("/setZeroPTZ")
    @Log(title = "设置零方位角", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    public @ResponseBody
    AjaxResult setZeroPTZ(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.setZeroPtz(cmd));
    }
    @ApiOperation("设置锁定")
    @PostMapping("/setPTZLock")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.expired"})
    @Log(title = "设置锁定", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult setPTZLock(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return AjaxResult.success(sdk.controlLock(cmd));
    }
    @ApiOperation("设置解锁")
    @PostMapping("/setPTZUnLock")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId"})
    @Log(title = "设置解锁", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult setPTZUnLock(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return AjaxResult.success(sdk.controlUnLock(cmd));
    }
    @ApiOperation("获取云台锁定信息")
    @PostMapping("/getPTZLockInfo")
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    @Log(title = "获取云台锁定信息", businessType = BusinessType.CONTROL)
    public @ResponseBody
    AjaxResult getPTZLockInfo(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        int byWorkMode = sdk.getPTZLockInfo(cmd);
        if (byWorkMode == 0) {
            return AjaxResult.success("云台锁定状态:解锁");
        } else if (byWorkMode == 1) {
            return AjaxResult.success("云台锁定状态:锁定");
        } else {
            return AjaxResult.error("云台锁定状态:失败");
        }
    }
    @ApiOperation("透雾开关")
    @PostMapping("/defogcfg")
    @Log(title = "透雾开关", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult defogcfg(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.controlDefogcfg(cmd));
    }
    @ApiOperation("红外开关")
    @PostMapping("/infrarecfg")
    @Log(title = "红外开关", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult infrarecfg(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.controlInfrarecfg(cmd));
    }
    @ApiOperation(value = "手动/自动聚焦", notes = "true手动flase自动")
    @PostMapping("/focusMode")
    @Log(title = "手动/自动聚焦", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult enableFocusMode(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.controlFocusMode(cmd));
    }
    @ApiOperation(value = "获取聚焦模式", notes = "1手动2自动")
    @PostMapping("/getFocusMode")
    public @ResponseBody
    AjaxResult getFocusMode(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        String focusMode = sdk.getFocusMode(cmd);
        return AjaxResult.success(focusMode);
    }
    @ApiOperation("云台加热")
    @PostMapping("/heateRpwron")
    @Log(title = "云台加热", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult heateRpwron(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.controlPTHeateRpwron(cmd));
    }
    @ApiOperation("镜头加热")
    @PostMapping("/cameraDeicing")
    @Log(title = "镜头加热", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult cameraDeicing(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.controlCameraDeicing(cmd));
    }
    @PostMapping("/captureJPEGPicture")
    public @ResponseBody
    AjaxResult captureJPEGPicture(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        String base64Str = sdk.captureJPEGPicture(cmd);
        return toAjaxString(base64Str, "相机抓图");
    }
    @ApiOperation("相机抓图")
    @PostMapping("/picCutCate")
    @Log(title = "相机抓图", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
    public @ResponseBody
    AjaxResult picCutCate(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        String path = sdk.picCutCate(cmd);
        return toAjaxString(path, "相机抓图");
    }
    @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 path = sdk.record(cmd);
        return toAjaxString(path, "手动录像");
    }
    @ApiOperation("获取相机架设参数")
    @PostMapping("/getCameraSetupCFG")
    @Log(title = "获取相机架设参数", businessType = BusinessType.CONTROL)
    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
    public @ResponseBody
    AjaxResult getCameraSetupCFG(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return AjaxResult.success(sdk.getGisInfo(cmd));
    }
}
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
@@ -8,14 +8,15 @@
import java.util.Map;
/**
 * @ClassName: sdkClinet
 * @ClassName: IHikClientService
 * @Description: æµ·åº·æ“ä½œå®¢æˆ·ç«¯æŽ¥å£ç±»
 * @Author: Administrator
 * @Date: 2023å¹´01月17日 15:59
 * @Version: 1.0
 **/
public interface IHikClientService {
    void loadHCNetSDKLib();
    //sdk初始化
    boolean init();
    //同步登录
    void syncLogin(ArdCameras cameras);
@@ -102,7 +103,7 @@
    boolean guideTargetPosition(CameraCmd cmd);
    //开始录像
    void recordStart(CameraCmd cmd);
    boolean recordStart(CameraCmd cmd);
    //停止录像-上传minio-返回录像url
    String recordStopToMinio(CameraCmd cmd);
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -61,7 +61,7 @@
    private static HCNetSDK hCNetSDK;
    @Override
    public void loadHCNetSDKLib() {
    public boolean init() {
        try {
            log.debug("开始加载sdk库文件路径");
            if (Platform.isWindows()) {
@@ -96,8 +96,10 @@
                ptrByteArraySsl.write();
                hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArraySsl.getPointer());
            }
            return true;
        } catch (Exception ex) {
            log.error("加载库文件异常:" + ex.getMessage());
            return false;
        }
    }
@@ -794,7 +796,7 @@
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChanNo();
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return null;
            return new HashMap<>();
        }
        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
@@ -852,9 +854,9 @@
        NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
        m_ptzPosCurrent.wAction = 1;
        try {
            String p = String.valueOf(ptz.get("p") * 10);
            String t = String.valueOf(ptz.get("t") * 10);
            String z = String.valueOf(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));
@@ -1468,6 +1470,15 @@
                    GlobalVariable.previewMap.remove(cameraId);
                }
                log.debug("录像停止");
                //存入minio
                String BucketName = "record";
                String ObjectName =IdUtils.simpleUUID() + ".mp4";
                FileInputStream stream = new FileInputStream(path);
                boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4");
                if (b) {
                    url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName);
                    log.debug("上传文件成功!" + url);
                }
            }
            return url;
        } catch (Exception ex) {
@@ -1477,13 +1488,13 @@
    }
    @Override
    public void recordStart(CameraCmd cmd) {
    public boolean recordStart(CameraCmd cmd) {
        try {
            String cameraId = cmd.getCameraId();
            Integer channelNum = cmd.getChanNo();
            String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                return;
                return false;
            }
            Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
            //强制I帧结构体对象
@@ -1515,18 +1526,20 @@
            int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
            if (lRealHandle == -1) {
                log.error("取流失败" + hCNetSDK.NET_DVR_GetLastError());
                return;
                return false;
            }
            log.debug("取流成功");
            GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
            GlobalVariable.previewMap.put(cameraId, lRealHandle);
            if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) {
                log.error("保存视频文件到临时文件夹失败 é”™è¯¯ç ä¸º:  " + hCNetSDK.NET_DVR_GetLastError());
                return;
                return false;
            }
            log.debug("录像开始");
            return true;
        } catch (Exception ex) {
            log.error("开始录像异常" + ex.getMessage());
            return false;
        }
    }