From af8474ee7e0f6ad3c6139b72304cdcb286a5c60e Mon Sep 17 00:00:00 2001 From: liusuyi <1951119284@qq.com> Date: 星期四, 15 八月 2024 14:40:50 +0800 Subject: [PATCH] 优化:修改高精度setPtz转动角速度为最大值 --- ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 824 +++++++++++++++++++++++++++++++++------------------------- 1 files changed, 466 insertions(+), 358 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java index 82a6c1d..9a205a6 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java @@ -4,21 +4,24 @@ import com.ruoyi.alarm.global.domain.GuideTask; import com.ruoyi.alarm.global.service.impl.QueueHandler; import com.ruoyi.common.annotation.SdkOperate; +import com.ruoyi.common.config.ARDConfig; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.AjaxResult; 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.service.IArdCamerasService; -import com.ruoyi.device.camera.factory.CameraSDK; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; +import com.ruoyi.device.camera.factory.CameraSDK; +import com.ruoyi.device.camera.service.IArdCamerasService; +import com.ruoyi.device.camera.service.ICameraSdkService; import com.ruoyi.device.channel.domain.ArdChannel; import com.ruoyi.device.channel.service.IArdChannelService; -import com.ruoyi.media.domain.Vtdu; import com.ruoyi.media.service.IVtduService; import com.ruoyi.utils.gis.GisUtil; import com.ruoyi.utils.minio.MinioUtil; import com.ruoyi.utils.sdk.common.GlobalVariable; +import com.ruoyi.utils.sdk.common.SdkErrorCodeEnum; import com.ruoyi.utils.sdk.hiksdk.lib.ExceptionCallBack; import com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK; import com.sun.jna.NativeLong; @@ -29,16 +32,18 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.io.*; import java.math.BigDecimal; import java.nio.ByteBuffer; +import java.nio.file.Files; +import java.nio.file.Paths; import java.text.DecimalFormat; import java.util.*; import java.util.concurrent.PriorityBlockingQueue; import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.*; -import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.NET_DVR_GET_GISINFO; /** * @Description: 娴峰悍sdk绛栫暐 @@ -57,10 +62,39 @@ private IVtduService vtduService; @Resource private QueueHandler queueHandler; + @Resource + ICameraSdkService cameraSdkService; - public Object _lock = new Object(); public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟 + + @PostConstruct + public void initSdk() { + log.info("鍒濆鍖栨捣搴穝dk"); + // 鍒濆鍖� + if (!hCNetSDK.NET_DVR_Init()) { + log.debug("SDK鍒濆鍖栧け璐�"); + } + //鎵撳嵃娴峰悍sdk鏃ュ織 + if (Platform.isWindows()) { + String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; + hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); + } else { + hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); + } + if (fExceptionCallBack == null) { + fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟 + //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑) + if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { + log.debug("Set fExceptionCallBack function fail"); + } else { + log.debug("Set fExceptionCallBack function successfully!"); + } + } + //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂� + hCNetSDK.NET_DVR_SetConnectTime(2000, 1); + hCNetSDK.NET_DVR_SetReconnect(5000, true); + } /** * @鎻忚堪 娉ㄥ唽鐧诲綍 鍙敮鎸佸悓姝ョ櫥闄嗭紝涓斿畼鏂逛笉寤鸿鐩存帴鍦ㄦ鎺ュ彛涓嬪啓鑰楁椂鎿嶄綔 @@ -71,26 +105,13 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - public boolean login(ArdCameras camera) { + public AjaxResult login(ArdCameras camera) { try { - // 鍒濆鍖� - if (!hCNetSDK.NET_DVR_Init()) { - log.error("SDK鍒濆鍖栧け璐�"); - } - //鎵撳嵃娴峰悍sdk鏃ュ織 - if (Platform.isWindows()) { - String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; - hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); - } else { - hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); - } String m_sDeviceIP = camera.getIp(); String m_sUsername = camera.getUsername(); String m_sPassword = camera.getPassword(); short m_sPort = camera.getPort().shortValue(); - //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂� - hCNetSDK.NET_DVR_SetConnectTime(2000, 1); - hCNetSDK.NET_DVR_SetReconnect(5000, true); + //璁惧淇℃伅, 杈撳嚭鍙傛暟 HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); @@ -108,66 +129,57 @@ //鏄惁寮傛鐧诲綍锛�0- 鍚︼紝1- 鏄� windowsSDK閲屾槸true鍜宖alse m_strLoginInfo.bUseAsynLogin = false; m_strLoginInfo.write(); + //鍚屾鐧诲綍 int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (lUserID < 0) { - log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],閿欒鐮侊細" + hCNetSDK.NET_DVR_GetLastError()); + int errorCode = hCNetSDK.NET_DVR_GetLastError(); camera.setChanNum(0); - camera.setLoginId(-1); + camera.setLoginId(-1l); camera.setState("0"); //鍒犻櫎绠$悊閫氶亾 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); ardCamerasService.updateArdCameras(camera); - return false; + log.warn("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触: " + SdkErrorCodeEnum.getDescByCode(errorCode) + "(" + errorCode + ")"); + return AjaxResult.warn("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触: " + SdkErrorCodeEnum.getDescByCode(errorCode) + "(" + errorCode + ")"); } log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]"); - if (fExceptionCallBack == null) { - fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟 - //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑) - if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { - log.debug("Set fExceptionCallBack function fail"); - return false; - } else { - log.debug("Set fExceptionCallBack function successfully!"); - } - } - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } - - //鍒犻櫎绠$悊閫氶亾 - ardChannelService.deleteArdChannelByDeviceId(camera.getId()); GlobalVariable.loginMap.put(camera.getId(), lUserID); GlobalVariable.loginCameraMap.put(lUserID, camera); - - camera.setLoginId(lUserID); + camera.setLoginId((long) lUserID); camera.setState("1"); - camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum); - camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan); - //鑾峰彇鏈�鏂伴�氶亾 - List<ArdChannel> cameraChannelList = getIPChannelInfo(camera); - if (cameraChannelList.size() > 0) { - camera.setChannelList(cameraChannelList); - for (ArdChannel channel : cameraChannelList) { - channel.setId(IdUtils.simpleUUID()); - ardChannelService.insertArdChannel(channel); - } - //娣诲姞鍒版祦濯掍綋 - addVtdu(camera); + int chanNum = m_strDeviceInfo.struDeviceV30.byChanNum; + int startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan + 1; + if (camera.getGdtype().equals("2")) { + chanNum = m_strDeviceInfo.struDeviceV30.byIPChanNum; + startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan; } - //鍒涘缓寮曞闃熷垪 - if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { - Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); - PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); - GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); + camera.setChanNum(chanNum); + camera.setStartChan(startDchan); + //鑾峰彇鏈�鏂伴�氶亾 + List<ArdChannel> cameraChannelList = getChannels(camera); + if (cameraChannelList.size() > 0) { + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + cameraChannelList.stream().forEach(channel -> { + ardChannelService.insertArdChannel(channel); + }); + camera.setChannelList(cameraChannelList); + //camera.setChanNum(cameraChannelList.size()); + //閫氶亾鎵归噺娣诲姞鍒版祦濯掍綋 + batchAddVtdu(camera); } ardCamerasService.updateArdCameras(camera); + //鍒涘缓寮曞闃熷垪 + createGuideQueue(camera); + //鍔犲叆宸茬櫥褰曡澶囬泦鍚� + GlobalVariable.loginedSet.add(camera); + return AjaxResult.success("璁惧鐧诲綍鎴愬姛"); } catch (Exception ex) { - log.error("娉ㄥ唽璁惧寮傚父", ex); + log.error("璁惧鐧诲綍寮傚父", ex); + return AjaxResult.error("璁惧鐧诲綍寮傚父" + ex.getMessage()); } - return true; } /** @@ -179,31 +191,16 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - @Async("loginExecutor") - public void asyncLogin(ArdCameras camera) { + @Async("globalExecutor") + public AjaxResult asyncLogin(ArdCameras camera) { try { - // 鍒濆鍖� - if (!hCNetSDK.NET_DVR_Init()) { - log.error("SDK鍒濆鍖栧け璐�"); - } - //鎵撳嵃娴峰悍sdk鏃ュ織 - if (Platform.isWindows()) { - String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; - hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); - } else { - hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); - } String m_sDeviceIP = camera.getIp(); String m_sUsername = camera.getUsername(); String m_sPassword = camera.getPassword(); short m_sPort = camera.getPort().shortValue(); - //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂� - hCNetSDK.NET_DVR_SetConnectTime(2000, 1); - hCNetSDK.NET_DVR_SetReconnect(5000, true); //璁惧淇℃伅, 杈撳嚭鍙傛暟 HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); - // 娉ㄥ唽璁惧-鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑 m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); @@ -220,108 +217,79 @@ //鍚屾鐧诲綍 int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (lUserID < 0) { - log.debug("Login Failed 銆� " + camera.getIp() + ":" + camera.getPort() + " 銆�,Error Code锛�" + hCNetSDK.NET_DVR_GetLastError()); + int errorCode = hCNetSDK.NET_DVR_GetLastError(); camera.setChanNum(0); - camera.setLoginId(-1); + camera.setLoginId(-1l); camera.setState("0"); //鍒犻櫎绠$悊閫氶亾 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); ardCamerasService.updateArdCameras(camera); - return; + log.warn("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触: " + SdkErrorCodeEnum.getDescByCode(errorCode) + "(" + errorCode + ")"); + return AjaxResult.warn("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触: " + SdkErrorCodeEnum.getDescByCode(errorCode) + "(" + errorCode + ")"); } - log.debug("Login Success 銆� " + camera.getIp() + ":" + camera.getPort() + " 銆�"); - synchronized (_lock) { - if (fExceptionCallBack == null) { - fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟 - //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑) - if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { - log.debug("Set fExceptionCallBack function fail"); - return; - } else { - log.debug("Set fExceptionCallBack function successfully!"); - } - } - } - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } - //鍒犻櫎绠$悊閫氶亾 - ardChannelService.deleteArdChannelByDeviceId(camera.getId()); GlobalVariable.loginMap.put(camera.getId(), lUserID); GlobalVariable.loginCameraMap.put(lUserID, camera); - - camera.setLoginId(lUserID); + camera.setLoginId((long) lUserID); camera.setState("1"); - camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum); - camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan); - + int chanNum = m_strDeviceInfo.struDeviceV30.byChanNum; + int startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan + 1; + if (camera.getGdtype().equals("2")) { + chanNum = m_strDeviceInfo.struDeviceV30.byIPChanNum; + startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan; + } + camera.setChanNum(chanNum); + camera.setStartChan(startDchan); //鑾峰彇鏈�鏂伴�氶亾 - List<ArdChannel> cameraChannelList = getIPChannelInfo(camera); + List<ArdChannel> cameraChannelList = getChannels(camera); if (cameraChannelList.size() > 0) { - camera.setChannelList(cameraChannelList); - camera.setChanNum(cameraChannelList.size()); - for (ArdChannel channel : cameraChannelList) { - channel.setId(IdUtils.simpleUUID()); + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + cameraChannelList.stream().forEach(channel -> { ardChannelService.insertArdChannel(channel); - } + }); + camera.setChannelList(cameraChannelList); + //camera.setChanNum(cameraChannelList.size()); + //閫氶亾鎵归噺娣诲姞鍒版祦濯掍綋 + batchAddVtdu(camera); } ardCamerasService.updateArdCameras(camera); - //娣诲姞鍒版祦濯掍綋 - addVtdu(camera); //鍒涘缓寮曞闃熷垪 createGuideQueue(camera); + //鍔犲叆宸茬櫥褰曡澶囬泦鍚� + GlobalVariable.loginedSet.add(camera); + return AjaxResult.success("璁惧鐧诲綍鎴愬姛"); } catch (Exception ex) { log.error("娉ㄥ唽璁惧寮傚父", ex); + return AjaxResult.error("娉ㄥ唽璁惧寮傚父" + ex.getMessage()); } } //鍒涘缓寮曞闃熷垪 private void createGuideQueue(ArdCameras camera) { - if (camera.getCamAlarmGuideEnable() != null) { - if (camera.getCamAlarmGuideEnable() == 1) { - if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { - Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); - PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); - GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); - //鍚姩闃熷垪澶勭悊鍣� - queueHandler.process(camera.getId()); - } + if (camera.getGdtype().equals("1")) { + if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { + Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); + PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); + GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); + //鍚姩闃熷垪澶勭悊鍣� + queueHandler.process(camera.getId()); } } } - //娣诲姞鍒版祦濯掍綋 - private void addVtdu(ArdCameras camera) { + //閫氶亾鎵归噺娣诲姞鍒版祦濯掍綋 + public void batchAddVtdu(ArdCameras camera) { try { - for (ArdChannel channel : camera.getChannelList()) { - String name = camera.getId() + "_" + channel.getChanNo(); - String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream"; - Vtdu vtdu = vtduService.selectVtduByName(name); - if (vtdu != null) { - vtduService.deleteVtduByName(name); - } - //娣诲姞鍒版祦濯掍綋 - vtdu = new Vtdu(); - vtdu.setRtspSource(rtspSource); - vtdu.setName(camera.getId() + "_" + channel.getChanNo()); - CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo()); - Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); - if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) { - vtdu.setIsCode("0");//榛樿涓嶈浆鐮� - } else { - vtdu.setIsCode("1");//榛樿杞爜 - } - vtdu.setMode("1");//榛樿CPU杞В鐮� - vtdu.setCameraId(camera.getId()); - vtduService.insertVtdu(vtdu); - } + camera.getChannelList().stream().forEach(channel -> { + vtduService.addChanToVtdu(camera, channel); + }); } catch (Exception ex) { log.error("閫氶亾娣诲姞鍒版祦濯掍綋寮傚父锛�" + ex.getMessage()); } } + /** * @鎻忚堪 娉ㄩ攢鐧诲綍 @@ -376,14 +344,14 @@ */ @Override @SdkOperate - public boolean pTZControl(CameraCmd cmd) { + public AjaxResult pTZControl(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer channelNum = cmd.getChanNo(); Integer speed = cmd.getSpeed(); Integer code = cmd.getCode(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.warn("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); int dwStop; @@ -451,9 +419,10 @@ boolean bool = hCNetSDK.NET_DVR_PTZControlWithSpeed_Other(userId, channelNum, dwPTZCommand, dwStop, speed); if (!bool) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + errorCode); + log.error("鎺у埗澶辫触: errorCode:" + errorCode + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode)); + return AjaxResult.warn("鎺у埗澶辫触:" + SdkErrorCodeEnum.getDescByCode(errorCode) + "(" + errorCode + ")"); } - return bool; + return AjaxResult.success("鎺у埗鎴愬姛"); } /** @@ -462,12 +431,12 @@ * @param cmd 鐩告満鍛戒护 */ @Override - public boolean setFocusPos(CameraCmd cmd) { + public AjaxResult setFocusPos(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); Integer dwFocusPos = cmd.getDwFocusPos(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.warn("璁惧鏈櫥褰�"); } // 鑾峰彇鍙傛暟 Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); @@ -485,10 +454,9 @@ if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); log.error("璁剧疆GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); - return false; - } else { - return true; + return AjaxResult.warn("璁剧疆GIS淇℃伅鏁版嵁澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } + return AjaxResult.success("璁剧疆GIS淇℃伅鏁版嵁鎴愬姛"); } /** @@ -497,12 +465,11 @@ * @param cmd 鐩告満鍛戒护 */ @Override - public int getFocusPos(CameraCmd cmd) { - int result = 0; + public AjaxResult getFocusPos(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return result; + return AjaxResult.error("璁惧鏈櫥褰�"); } // 鑾峰彇鍙傛暟 Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); @@ -518,13 +485,12 @@ boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); - return result; - } else { - struGisInfo.read(); - result = struGisInfo.struPtzPosEx.dwFocus; + log.error("鑾峰彇鑱氱劍鍊煎け璐�: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鑾峰彇鑱氱劍鍊煎け璐�:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } - return result; + struGisInfo.read(); + int result = struGisInfo.struPtzPosEx.dwFocus; + return AjaxResult.success(result); } /** @@ -533,20 +499,21 @@ * @param cmd 鐩告満鍛戒护 */ @Override - public boolean setPreset(CameraCmd cmd) { + public AjaxResult setPreset(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); Integer PresetIndex = cmd.getPresetIndex(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.error("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, SET_PRESET, PresetIndex); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); + log.error("棰勭疆鐐硅缃け璐�: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("棰勭疆鐐硅缃け璐�:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } - return bool; + return AjaxResult.success("棰勭疆鐐硅缃垚鍔�"); } /** @@ -555,20 +522,21 @@ * @param cmd 鐩告満鍛戒护 */ @Override - public boolean gotoPreset(CameraCmd cmd) { + public AjaxResult gotoPreset(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); Integer PresetIndex = cmd.getPresetIndex(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.error("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, GOTO_PRESET, PresetIndex); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); + log.error("璋冪敤棰勭疆鐐瑰け璐�: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("璋冪敤棰勭疆鐐瑰け璐�:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } - return bool; + return AjaxResult.success("璋冪敤棰勭疆鐐规垚鍔�"); } /** @@ -891,11 +859,11 @@ * @鍒涘缓鏃堕棿 2023/1/17 16:36 * @淇敼浜哄拰鍏跺畠淇℃伅 */ - public Map<String, Object> getPtz1(CameraCmd cmd) { + public AjaxResult getPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return new HashMap<>(); + return AjaxResult.warn("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); @@ -904,31 +872,30 @@ IntByReference ibrBytesReturned = new IntByReference(0); m_ptzPosCurrent.write(); boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_PTZPOS, channelNum, pioint, m_ptzPosCurrent.size(), ibrBytesReturned); - if (bool) { - m_ptzPosCurrent.read(); - // DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 - //16杩涘埗杞琁nteger鍚庨櫎10锛屼繚鐣欏皬鏁扮偣1浣� - //瀹為檯鏄剧ず鐨凱TZ鍊兼槸鑾峰彇鍒扮殑鍗佸叚杩涘埗鍊肩殑鍗佸垎涔嬩竴锛� - //濡傝幏鍙栫殑姘村钩鍙傛暟P鐨勫�兼槸0x1750锛屽疄闄呮樉绀虹殑P鍊间负175搴︼紱 - //鑾峰彇鍒扮殑鍨傜洿鍙傛暟T鐨勫�兼槸0x0789锛屽疄闄呮樉绀虹殑T鍊间负78.9搴︼紱 - //鑾峰彇鍒扮殑鍙樺�嶅弬鏁癦鐨勫�兼槸0x1100锛屽疄闄呮樉绀虹殑Z鍊间负110鍊嶃�� - BigDecimal b = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wPanPos)) / 10); - BigDecimal c = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPos)) / 10); - BigDecimal d = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPos)) / 10); - double p = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); - double t = c.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); - double z = d.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); - //log.debug("T鍨傜洿鍙傛暟涓�: " + p + "P姘村钩鍙傛暟涓�: " + t + "Z鍙樺�嶅弬鏁颁负: " + z); - Map<String, Object> ptzMap = new HashMap<>(); - ptzMap.put("p", p); - ptzMap.put("t", t); - ptzMap.put("z", z); - return ptzMap; - } else { + if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); - return new HashMap<>(); + log.error("鑾峰彇ptz澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鑾峰彇ptz澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } + m_ptzPosCurrent.read(); + // DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 + //16杩涘埗杞琁nteger鍚庨櫎10锛屼繚鐣欏皬鏁扮偣1浣� + //瀹為檯鏄剧ず鐨凱TZ鍊兼槸鑾峰彇鍒扮殑鍗佸叚杩涘埗鍊肩殑鍗佸垎涔嬩竴锛� + //濡傝幏鍙栫殑姘村钩鍙傛暟P鐨勫�兼槸0x1750锛屽疄闄呮樉绀虹殑P鍊间负175搴︼紱 + //鑾峰彇鍒扮殑鍨傜洿鍙傛暟T鐨勫�兼槸0x0789锛屽疄闄呮樉绀虹殑T鍊间负78.9搴︼紱 + //鑾峰彇鍒扮殑鍙樺�嶅弬鏁癦鐨勫�兼槸0x1100锛屽疄闄呮樉绀虹殑Z鍊间负110鍊嶃�� + BigDecimal b = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wPanPos)) / 10); + BigDecimal c = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPos)) / 10); + BigDecimal d = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPos)) / 10); + double p = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); + double t = c.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); + double z = d.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); + //log.debug("T鍨傜洿鍙傛暟涓�: " + p + "P姘村钩鍙傛暟涓�: " + t + "Z鍙樺�嶅弬鏁颁负: " + z); + Map<String, Object> ptzMap = new HashMap<>(); + ptzMap.put("p", p); + ptzMap.put("t", t); + ptzMap.put("z", z); + return AjaxResult.success(ptzMap); } /** @@ -940,13 +907,13 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - public Map<String, Object> getPtz(CameraCmd cmd) { + public AjaxResult getPtzHigh(CameraCmd cmd) { Map<String, Object> ptzMap = new HashMap<>(); try { String cameraId = cmd.getCameraId(); Integer chanNo = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return new HashMap<>(); + return AjaxResult.warn("璁惧鏈櫥褰�"); } IntByReference pchannel = new IntByReference(chanNo); Pointer pChannelNum = pchannel.getPointer(); @@ -962,24 +929,26 @@ lpConfigParam6696.write(); boolean res = hCNetSDK.NET_DVR_GetSTDConfig(lUserID, HCNetSDK.NET_DVR_GET_PTZABSOLUTEEX, lpConfigParam6696); if (!res) { - log.error("鑾峰彇楂樼簿搴TZ缁濆浣嶇疆閰嶇疆澶辫触锛岄敊璇彿锛�" + hCNetSDK.NET_DVR_GetLastError()); - } else { - lpPTZAbsoluteEX_cfg.read(); - //log.debug("P锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fPan + " T锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt + " Z锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom - // + " 鑱氱劍鍙傛暟锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.dwFocus + " 鑱氱劍鑼冨洿锛�" + lpPTZAbsoluteEX_cfg.dwFocalLen + " 姘村钩杞姩閫熷害锛�" + lpPTZAbsoluteEX_cfg.fHorizontalSpeed - // + " 鍨傜洿杞姩閫熷害锛�" + lpPTZAbsoluteEX_cfg.fVerticalSpeed + " 闀滃ご鍙樺�嶉厤缃被鍨嬶細" + lpPTZAbsoluteEX_cfg.byZoomType); - float p = lpPTZAbsoluteEX_cfg.struPTZCtrl.fPan; - float fTilt = lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt; - float t = fTilt < 0 ? fTilt + 360 : fTilt; - float z = lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom; - ptzMap.put("p", p); - ptzMap.put("t", t); - ptzMap.put("z", z); + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鑾峰彇楂樼簿搴TZ澶辫触: errorCode" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鑾峰彇楂樼簿搴TZ澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } + lpPTZAbsoluteEX_cfg.read(); + //log.debug("P锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fPan + " T锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt + " Z锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom + // + " 鑱氱劍鍙傛暟锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.dwFocus + " 鑱氱劍鑼冨洿锛�" + lpPTZAbsoluteEX_cfg.dwFocalLen + " 姘村钩杞姩閫熷害锛�" + lpPTZAbsoluteEX_cfg.fHorizontalSpeed + // + " 鍨傜洿杞姩閫熷害锛�" + lpPTZAbsoluteEX_cfg.fVerticalSpeed + " 闀滃ご鍙樺�嶉厤缃被鍨嬶細" + lpPTZAbsoluteEX_cfg.byZoomType); + float p = lpPTZAbsoluteEX_cfg.struPTZCtrl.fPan; + float fTilt = lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt; + float t = fTilt < 0 ? fTilt + 360 : fTilt; + float z = lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom; + ptzMap.put("p", p); + ptzMap.put("t", t); + ptzMap.put("z", z); + return AjaxResult.success(ptzMap); } catch (Exception ex) { log.error("鑾峰彇楂樼簿搴TZ缁濆浣嶇疆寮傚父:" + ex.getMessage()); + return AjaxResult.error("鑾峰彇楂樼簿搴TZ缁濆浣嶇疆寮傚父:" + ex.getMessage()); } - return ptzMap; } /** @@ -992,12 +961,12 @@ */ @Override @SdkOperate - public boolean setPtz1(CameraCmd cmd) { + public AjaxResult setPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); Map<String, Double> ptz = cmd.getPtzMap(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.warn("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); @@ -1014,12 +983,13 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆PTZ鍙傛暟澶辫触,璇风◢鍚庨噸璇�:" + code); + log.error("璁剧疆PTZ鍙傛暟澶辫触: errorCode" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("璁剧疆PTZ鍙傛暟澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } - return bool; + return AjaxResult.success("璁剧疆PTZ鍙傛暟鎴愬姛"); } catch (Exception ex) { log.error(ex.getMessage()); - return false; + return AjaxResult.error("璁剧疆PTZ鍙傛暟寮傚父:" + ex.getMessage()); } } @@ -1033,13 +1003,13 @@ */ @Override @SdkOperate - public boolean setPtz(CameraCmd cmd) { + public AjaxResult setPtzHigh(CameraCmd cmd) { try { String cameraId = cmd.getCameraId(); Integer chanNo = cmd.getChanNo(); Map<String, Double> ptz = cmd.getPtzMap(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.warn("璁惧鏈櫥褰�"); } Integer lUserID = (Integer) GlobalVariable.loginMap.get(cameraId); IntByReference pchannel = new IntByReference(chanNo); @@ -1062,8 +1032,8 @@ lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.fZoom = new Double(ptz.get("z")).floatValue(); lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.dwFocus = 399; lpPTZAbsoluteEX_cfgInfo.dwFocalLen = 1250; - lpPTZAbsoluteEX_cfgInfo.fHorizontalSpeed = (float) 10; - lpPTZAbsoluteEX_cfgInfo.fVerticalSpeed = (float) 10; + lpPTZAbsoluteEX_cfgInfo.fHorizontalSpeed = (float) 1000; + lpPTZAbsoluteEX_cfgInfo.fVerticalSpeed = (float) 1000; lpPTZAbsoluteEX_cfgInfo.byZoomType = 0; lpPTZAbsoluteEX_cfgInfo.write(); lpConfigParam6697.lpInBuffer = lpPTZAbsoluteEX_cfgInfo.getPointer(); @@ -1072,23 +1042,24 @@ boolean bool = hCNetSDK.NET_DVR_SetSTDConfig(lUserID, NET_DVR_SET_PTZABSOLUTEEX, lpConfigParam6697); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆楂樼簿搴TZ鍙傛暟澶辫触,璇风◢鍚庨噸璇�:" + code); + log.error("璁剧疆楂樼簿搴TZ澶辫触:" + code); + return AjaxResult.warn("璁剧疆楂樼簿搴TZ澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } - return bool; + return AjaxResult.success("璁剧疆楂樼簿搴TZ鍙傛暟鎴愬姛"); } catch (Exception ex) { log.error("璁剧疆楂樼簿搴TZ鍙傛暟寮傚父", ex); - return false; + return AjaxResult.error("璁剧疆楂樼簿搴TZ鍙傛暟寮傚父:" + ex); } } @Override @SdkOperate - public boolean guideTargetPosition(CameraCmd cmd) { + public AjaxResult guideTargetPosition(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer chanNo = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.warn("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); @@ -1099,7 +1070,10 @@ double[] targetPositions = cmd.getTargetPosition(); double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150); String p = String.valueOf((int) (cameraPTZ[0] * 10)); - String t = String.valueOf((int) (cameraPTZ[1] * 10)); + //淇淇话 + double correctPitch = cameraSdkService.correctPitch(cmd); + double newt = cameraPTZ[1] + correctPitch; + String t = String.valueOf((int) (newt * 10)); String z = String.valueOf((int) (cameraPTZ[2] * 10)); m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16)); m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16)); @@ -1110,11 +1084,12 @@ if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); + return AjaxResult.warn("璁剧疆ptz澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } - return bool; + return AjaxResult.success("寮曞鍧愭爣鎴愬姛", correctPitch); } catch (Exception ex) { - log.error("寮曞寮傚父:" + ex.getMessage()); - return false; + log.error("寮曞鍧愭爣寮傚父:" + ex.getMessage()); + return AjaxResult.error("寮曞鍧愭爣寮傚父:" + ex.getMessage()); } } @@ -1127,11 +1102,11 @@ * @鍒涘缓鏃堕棿 2023/1/17 16:36 * @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾 */ - public int getPTZLockInfo(CameraCmd cmd) { + public AjaxResult getPTZLockInfo(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return -1; + return AjaxResult.warn("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_PTZ_LOCKCFG netDvrPtzLockcfg = new NET_DVR_PTZ_LOCKCFG(); @@ -1141,11 +1116,12 @@ boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZLOCKCFG, channelNum, point, netDvrPtzLockcfg.size(), ibrBytesReturned); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("鑾峰彇ptz閿佸畾淇℃伅澶辫触,璇风◢鍚庨噸璇�" + code); - return -1; + log.error("鑾峰彇ptz閿佸畾澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鑾峰彇ptz閿佸畾澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } else { netDvrPtzLockcfg.read(); - return netDvrPtzLockcfg.byWorkMode; + int byWorkMode = netDvrPtzLockcfg.byWorkMode; + return AjaxResult.success(byWorkMode); } } @@ -1159,11 +1135,11 @@ */ @Override @SdkOperate - public boolean setZeroPtz(CameraCmd cmd) { + public AjaxResult setZeroPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.error("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_INITIALPOSITIONCTRL initialpositionctrl = new NET_DVR_INITIALPOSITIONCTRL(); @@ -1176,10 +1152,11 @@ initialpositionctrl.write(); boolean bool = hCNetSDK.NET_DVR_RemoteControl(userId, NET_DVR_PTZ_INITIALPOSITIONCTRL, point, initialpositionctrl.size()); if (!bool) { - int i = hCNetSDK.NET_DVR_GetLastError(); - log.error("閿欒鐮侊細" + i); + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("璁剧疆闆舵柟浣嶈澶辫触:" + code); + return AjaxResult.warn("璁剧疆闆舵柟浣嶈澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } - return bool; + return AjaxResult.success(); } /** @@ -1191,11 +1168,11 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - public Map<String, Object> getPtzScope(CameraCmd cmd) { + public AjaxResult getPtzScope(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return new HashMap<>(); + return AjaxResult.error("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_PTZSCOPE m_ptzPosCurrent = new NET_DVR_PTZSCOPE(); @@ -1205,8 +1182,8 @@ boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZSCOPE, channelNum, point, m_ptzPosCurrent.size(), ibrBytesReturned); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); - return new HashMap<>(); + log.error("鑾峰彇ptz鑼冨洿澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鑾峰彇ptz鑼冨洿澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } else { m_ptzPosCurrent.read(); DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 @@ -1224,13 +1201,12 @@ ptzScopeMap.put("tMin", wTiltPosMin); ptzScopeMap.put("zMax", wZoomPosMax); ptzScopeMap.put("zMin", wZoomPosMin); - return ptzScopeMap; + return AjaxResult.success(ptzScopeMap); } - } /** - * @鎻忚堪 閫忛浘寮�鍏� + * @鎻忚堪 鍒囨崲閫忛浘 * @鍙傛暟 [userId, channelNum, enable] * @杩斿洖鍊� boolean * @鍒涘缓浜� 鍒樿嫃涔� @@ -1238,20 +1214,22 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - public boolean controlDefogcfg(CameraCmd cmd) { + public AjaxResult controlDefogcfg(CameraCmd cmd) { String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); boolean enable = cmd.isEnable(); - Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.warn("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new NET_DVR_CAMERAPARAMCFG_EX(); Pointer point = struCameraParam.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); - boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size(), ibrBytesReturned); + boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, chanNo, point, struCameraParam.size(), ibrBytesReturned); if (!b_GetCameraParam) { - log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鑾峰彇鍓嶇鍙傛暟澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } struCameraParam.read(); log.debug("鏄惁寮�鍚�忛浘锛�" + struCameraParam.struDefogCfg.byMode); @@ -1265,17 +1243,18 @@ } struCameraParam.struDefogCfg = defogcfg; struCameraParam.write(); - boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size()); + boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, chanNo, point, struCameraParam.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆閫忛浘澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("鍒囨崲閫忛浘澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鍒囨崲閫忛浘澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } - log.debug("璁剧疆閫忛浘鎴愬姛"); - return bool; + log.debug("鍒囨崲閫忛浘鎴愬姛"); + return AjaxResult.success("鍒囨崲閫忛浘鎴愬姛"); } /** - * @鎻忚堪 绾㈠寮�鍏� + * @鎻忚堪 鍒囨崲绾㈠ * @鍙傛暟 [userId, channelNum, enable] * @杩斿洖鍊� boolean * @鍒涘缓浜� 鍒樿嫃涔� @@ -1283,20 +1262,22 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - public boolean controlInfrarecfg(CameraCmd cmd) { + public AjaxResult controlInfrarecfg(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer chanNo = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.warn("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_CAMERAPARAMCFG_EX struDayNigh = new NET_DVR_CAMERAPARAMCFG_EX(); Pointer point = struDayNigh.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); - boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, chanNo, point, struDayNigh.size(), ibrBytesReturned); + boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG, chanNo, point, struDayNigh.size(), ibrBytesReturned); if (!b_GetCameraParam) { - log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鑾峰彇鍓嶇鍙傛暟澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } struDayNigh.read(); String current = struDayNigh.struDayNight.byDayNightFilterType == 1 ? "寮�鍚�" : "鍏抽棴"; @@ -1312,15 +1293,14 @@ daynight.byDayNightFilterTime = 60; struDayNigh.struDayNight = daynight; struDayNigh.write(); - boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, chanNo, point, struDayNigh.size()); + boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG, chanNo, point, struDayNigh.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆澶滆澶辫触,璇风◢鍚庨噸璇�" + code); - } else { - log.debug("璁剧疆澶滆鎴愬姛"); + log.error("鍒囨崲绾㈠澶辫触 ErrorCode:{},ErrorInfo:{}", code, SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鍒囨崲绾㈠澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } - - return bool; + log.debug("鍒囨崲绾㈠鎴愬姛"); + return AjaxResult.success("鍒囨崲绾㈠鎴愬姛"); } /** @@ -1332,12 +1312,12 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - public boolean controlFocusMode(CameraCmd cmd) { + public AjaxResult controlFocusMode(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.warn("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG(); @@ -1345,7 +1325,9 @@ IntByReference ibrBytesReturned = new IntByReference(0); boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned); if (!b_GetCameraParam) { - log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鑾峰彇鍓嶇鍙傛暟澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } struFocusMode.read(); log.debug("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); @@ -1362,10 +1344,11 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_FOCUSMODECFG, channelNum, point, struFocusMode.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆鑱氱劍妯″紡澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆鑱氱劍妯″紡澶辫触: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("璁剧疆鑱氱劍妯″紡澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } log.debug("璁剧疆鑱氱劍妯″紡鎴愬姛"); - return bool; + return AjaxResult.success("璁剧疆鑱氱劍妯″紡鎴愬姛"); } /** @@ -1376,11 +1359,11 @@ * @鍒涘缓鏃堕棿 2023/1/18 13:07 * @淇敼浜哄拰鍏跺畠淇℃伅 */ - public String getFocusMode(CameraCmd cmd) { + public AjaxResult getFocusMode(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return ""; + return AjaxResult.warn("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG(); @@ -1388,11 +1371,13 @@ IntByReference ibrBytesReturned = new IntByReference(0); boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned); if (!b_GetCameraParam) { - log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鑾峰彇鑱氱劍妯″紡澶辫触: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鑾峰彇鑱氱劍妯″紡澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } struFocusMode.read(); log.debug("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); - return String.valueOf(struFocusMode.byFocusMode); + return AjaxResult.success(struFocusMode.byFocusMode); } /** @@ -1404,12 +1389,12 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - public boolean controlPTHeateRpwron(CameraCmd cmd) { + public AjaxResult controlPTHeateRpwron(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.warn("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); int dwStop; @@ -1421,10 +1406,11 @@ boolean bool = hCNetSDK.NET_DVR_PTZControl_Other(userId, channelNum, HEATER_PWRON, dwStop); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆浜戝彴鍔犵儹澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆浜戝彴鍔犵儹澶辫触: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("璁剧疆浜戝彴鍔犵儹澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } log.debug("璁剧疆浜戝彴鍔犵儹鎴愬姛"); - return bool; + return AjaxResult.success("璁剧疆浜戝彴鍔犵儹鎴愬姛"); } /** @@ -1436,12 +1422,12 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - public boolean controlCameraDeicing(CameraCmd cmd) { + public AjaxResult controlCameraDeicing(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; + return AjaxResult.warn("璁惧鏈櫥褰�"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_DEVSERVER_CFG struDeicing = new NET_DVR_DEVSERVER_CFG(); @@ -1449,7 +1435,9 @@ IntByReference ibrBytesReturned = new IntByReference(0); boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_DEVSERVER_CFG, channelNum, point, struDeicing.size(), ibrBytesReturned); if (!b_GetCameraParam) { - log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鑾峰彇鍓嶇鍙傛暟澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } struDeicing.read(); log.debug("鏄惁寮�鍚櫎鍐帮細" + struDeicing.byEnableDeicing); @@ -1463,10 +1451,11 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_DEVSERVER_CFG, channelNum, point, struDeicing.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("璁剧疆闀滃ご闄ゅ啺澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆闀滃ご闄ゅ啺澶辫触: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("璁剧疆闀滃ご闄ゅ啺澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } log.debug("璁剧疆闀滃ご闄ゅ啺鎴愬姛"); - return bool; + return AjaxResult.success("璁剧疆闀滃ご闄ゅ啺鎴愬姛"); } /** @@ -1474,37 +1463,45 @@ * * @param cmd 鐩告満鍛戒护 */ - public String captureJPEGPicture(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return ""; + @Override + public AjaxResult localCapture(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return AjaxResult.warn("璁惧鏈櫥褰�"); + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30(); + if (!hCNetSDK.NET_DVR_GetDVRWorkState_V30(userId, devwork)) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鑾峰彇璁惧宸ヤ綔鐘舵�佸け璐�: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鑾峰彇璁惧宸ヤ綔鐘舵�佸け璐�:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); + } + //鍥剧墖璐ㄩ噺 + NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA(); + //璁剧疆鍥剧墖鍒嗚鲸鐜� + jpeg.wPicSize = 0; + //璁剧疆鍥剧墖璐ㄩ噺 + jpeg.wPicQuality = 0; + IntByReference a = new IntByReference(); + //璁剧疆鍥剧墖澶у皬 + ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024); + // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓� + boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); + //log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); + // OutputStream outputStream = response.getOutputStream(); + //outputStream.write(jpegBuffer.array()); + //Base64.Encoder decoder = Base64.getEncoder(); + // BASE64Encoder encoder = new BASE64Encoder(); + //String png_base64 = decoder.encodeToString(jpegBuffer.array());//杞崲鎴恇ase64涓� + // png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//鍒犻櫎 \r\n + //log.debug("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------"); + return AjaxResult.success(jpegBuffer.array()); + } catch (Exception ex) { + log.error("-----------鎴浘澶辫触----------"); + return AjaxResult.error(ex.getMessage()); } - Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30(); - if (!hCNetSDK.NET_DVR_GetDVRWorkState_V30(userId, devwork)) { - // 杩斿洖Boolean鍊硷紝鍒ゆ柇鏄惁鑾峰彇璁惧鑳藉姏 - log.error("鎶撳浘澶辫触锛岃绋嶅悗閲嶈瘯"); - } - //鍥剧墖璐ㄩ噺 - NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA(); - //璁剧疆鍥剧墖鍒嗚鲸鐜� - jpeg.wPicSize = 0; - //璁剧疆鍥剧墖璐ㄩ噺 - jpeg.wPicQuality = 0; - IntByReference a = new IntByReference(); - //璁剧疆鍥剧墖澶у皬 - ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024); - // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓� - boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); - log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); - - Base64.Encoder decoder = Base64.getEncoder(); - // BASE64Encoder encoder = new BASE64Encoder(); - String png_base64 = decoder.encodeToString(jpegBuffer.array());//杞崲鎴恇ase64涓� - png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//鍒犻櫎 \r\n - log.debug("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------"); - return png_base64; } /** @@ -1580,8 +1577,10 @@ public String record(CameraCmd cmd) { try { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + Integer chanNo = cmd.getChanNo(); + // 鏈湴涓存椂褰曞儚鍦板潃 + String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; + String path = FileUtils.createFile(tempPath + "/" + cameraId + ".mp4"); boolean enable = cmd.isEnable(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; @@ -1590,7 +1589,7 @@ //寮哄埗I甯х粨鏋勪綋瀵硅薄 HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� netDvrIFrame.read(); - netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 + netDvrIFrame.dwChannel = chanNo;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 netDvrIFrame.byStreamType = 0; netDvrIFrame.dwSize = netDvrIFrame.size(); netDvrIFrame.write(); @@ -1600,7 +1599,7 @@ //棰勮鍙傛暟 NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); previewinfo.read(); - previewinfo.lChannel = channelNum; + previewinfo.lChannel = chanNo; previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� @@ -1623,6 +1622,7 @@ return ""; } log.debug("褰曞儚寮�濮�"); + } else { if (GlobalVariable.previewMap.containsKey(cameraId)) { Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); @@ -1652,7 +1652,9 @@ try { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); - String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + // 鏈湴涓存椂褰曞儚鍦板潃 + String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; + String path = FileUtils.createFile(tempPath + "/" + cameraId + ".mp4"); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } @@ -1665,7 +1667,8 @@ netDvrIFrame.dwSize = netDvrIFrame.size(); netDvrIFrame.write(); if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { - log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("璁剧疆寮哄埗I甯ч敊璇�:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } //棰勮鍙傛暟 NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); @@ -1709,7 +1712,9 @@ try { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); - String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + // 鏈湴涓存椂褰曞儚鍦板潃 + String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; + String path = FileUtils.createFile(tempPath + "/" + cameraId + ".mp4"); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } @@ -1803,34 +1808,28 @@ } //鑾峰彇IP閫氶亾 - public List<ArdChannel> getIPChannelInfo(ArdCameras camera) { - + public List<ArdChannel> getChannels(ArdCameras camera) { //鑾峰彇閫氶亾 List<ArdChannel> channelList = new ArrayList<>(); try { - if (camera.getGdtype().equals("3")) { - camera.setChanNum(64);//瓒呰剳鑾峰彇鍦ㄧ嚎閫氶亾鏁� - camera.setStartDChan(0);//瓒呰剳鍒濆閫氶亾涓�0 - } IntByReference ibrBytesReturned = new IntByReference(0);//鑾峰彇IP鎺ュ叆閰嶇疆鍙傛暟 HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40(); m_strIpparaCfg.write(); //lpIpParaConfig 鎺ユ敹鏁版嵁鐨勭紦鍐叉寚閽� Pointer lpIpParaConfig = m_strIpparaCfg.getPointer(); - boolean bRet = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_IPPARACFG_V40, 0, lpIpParaConfig, m_strIpparaCfg.size(), ibrBytesReturned); + boolean bRet = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId().intValue(), HCNetSDK.NET_DVR_GET_IPPARACFG_V40, 0, lpIpParaConfig, m_strIpparaCfg.size(), ibrBytesReturned); m_strIpparaCfg.read(); //log.debug("璧峰鏁板瓧閫氶亾鍙凤細" + m_strIpparaCfg.dwStartDChan);//m_strIpparaCfg.dwDChanNum for (int iChannum = 0; iChannum < camera.getChanNum(); iChannum++) { - ArdChannel ardChannel = new ArdChannel(); - int channum = iChannum + camera.getStartDChan() + 1; + ArdChannel channel = new ArdChannel(); + int chanNo = iChannum + camera.getStartChan(); HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40(); strPicCfg.dwSize = strPicCfg.size(); strPicCfg.write(); Pointer pStrPicCfg = strPicCfg.getPointer(); - NativeLong lChannel = new NativeLong(channum); + NativeLong lChannel = new NativeLong(chanNo); IntByReference pInt = new IntByReference(0); - boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), - pStrPicCfg, strPicCfg.size(), pInt); + boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId().intValue(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), pStrPicCfg, strPicCfg.size(), pInt); if (!b_GetPicCfg) { // log.error("鑾峰彇鍥惧儚鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); } @@ -1839,20 +1838,19 @@ if (m_strIpparaCfg.struStreamMode[iChannum].byGetStreamType == 0) { m_strIpparaCfg.struStreamMode[iChannum].uGetStream.setType(HCNetSDK.NET_DVR_IPCHANINFO.class); m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.read(); - int channel = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256; + int channelNo = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256; String channelName = new String(strPicCfg.sChanName, "GBK").trim(); - ardChannel.setDeviceId(camera.getId()); - ardChannel.setName(channelName); - ardChannel.setChanNo(channum); - if (camera.getGdtype().equals("3")) { - //瓒呰剳鍙幏鍙栧湪绾块�氶亾 - if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1) { - //log.debug("IP閫氶亾" + channum + "鍦ㄧ嚎"); - channelList.add(ardChannel); + channelName = channelName.equals("") ? "閫氶亾" + chanNo : channelName; + channel.setDeviceId(camera.getId()); + channel.setName(channelName); + channel.setChanNo(chanNo); + if (camera.getGdtype().equals("3") || camera.getGdtype().equals("2")) { + //NVR杩囨护绂荤嚎閫氶亾 + if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable != 1) { + continue; } - } else { - channelList.add(ardChannel); } + channelList.add(channel); } } } catch (Exception ex) { @@ -1870,11 +1868,11 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾 */ @Override - public Map<String, Object> getGisInfo(CameraCmd cmd) { + public AjaxResult getGisInfo(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return new HashMap<>(); + return AjaxResult.warn("璁惧鏈櫥褰�"); } // 鑾峰彇鍙傛暟 Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); @@ -1890,17 +1888,127 @@ boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); - return new HashMap<>(); - } else { - struGisInfo.read(); - Map<String, Object> map = new HashMap<>(); - map.put("p", struGisInfo.struPtzPos.fPanPos); - map.put("t", struGisInfo.struPtzPos.fTiltPos < 0 ? struGisInfo.struPtzPos.fTiltPos + 360 : struGisInfo.struPtzPos.fTiltPos); - map.put("z", struGisInfo.struPtzPos.fZoomPos); - map.put("fHorFieldAngle", struGisInfo.fHorizontalValue);// 姘村钩瑙嗗満瑙� - map.put("fVerFieldAngle", struGisInfo.fVerticalValue);// 鍨傜洿瑙嗗満瑙� - return map; + log.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + return AjaxResult.warn("鑾峰彇GIS淇℃伅鏁版嵁澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); + } + struGisInfo.read(); + Map<String, Object> map = new HashMap<>(); + map.put("p", struGisInfo.struPtzPos.fPanPos); + map.put("t", struGisInfo.struPtzPos.fTiltPos < 0 ? struGisInfo.struPtzPos.fTiltPos + 360 : struGisInfo.struPtzPos.fTiltPos); + map.put("z", struGisInfo.struPtzPos.fZoomPos); + map.put("fHorFieldAngle", struGisInfo.fHorizontalValue);// 姘村钩瑙嗗満瑙� + map.put("fVerFieldAngle", struGisInfo.fVerticalValue);// 鍨傜洿瑙嗗満瑙� + return AjaxResult.success(map); + + } + + //鏈湴褰曞儚寮�濮� + @Override + public AjaxResult localRecordStart(CameraCmd cmd) { + try { + String operator = cmd.getOperator(); + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + // 鏈湴涓存椂褰曞儚鍦板潃 + String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; + String path = FileUtils.createFile(tempPath + "/" + operator + "/" + cameraId + ".mp4"); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return AjaxResult.warn("璁惧鏈櫥褰�"); + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + //寮哄埗I甯х粨鏋勪綋瀵硅薄 + HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� + netDvrIFrame.read(); + netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 + netDvrIFrame.byStreamType = 0; + netDvrIFrame.dwSize = netDvrIFrame.size(); + netDvrIFrame.write(); + if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { + log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + } + //棰勮鍙傛暟 + NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); + previewinfo.read(); + previewinfo.lChannel = channelNum; + previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� + previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ + previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� + previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 + previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 + previewinfo.write(); + //if (GlobalVariable.previewMap.containsKey(cameraId)) { + // Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); + // hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + // GlobalVariable.previewMap.remove(cameraId); + // log.debug("鍋滄褰撳墠褰曞儚"); + //} + int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); + if (lRealHandle == -1) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鏈湴褰曞儚鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); + return AjaxResult.warn("鏈湴褰曞儚鍙栨祦澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); + } + log.debug("鏈湴褰曞儚鍙栨祦鎴愬姛"); + //GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName()); + //GlobalVariable.previewMap.put(cameraId, lRealHandle); + if (!hCNetSDK.NET_DVR_SaveRealData_V30(lRealHandle, 2, path)) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + return AjaxResult.warn("鏈湴褰曞儚鍙栨祦澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); + } + log.debug("鏈湴褰曞儚寮�濮�"); + return AjaxResult.success("褰曞儚寮�濮�", lRealHandle); + } catch (Exception ex) { + log.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage()); + return AjaxResult.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage()); + } + } + + //鏈湴褰曞儚鍋滄 + @Override + public AjaxResult localRecordStop(CameraCmd cmd) { + try { + String operator = cmd.getOperator(); + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + Integer lRealHandle = cmd.getRecordId().intValue(); + + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return AjaxResult.warn("璁惧鏈櫥褰�"); + } + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); + //region 寮哄埗I甯� + HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� + netDvrIFrame.read(); + netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 + netDvrIFrame.byStreamType = 0; + netDvrIFrame.dwSize = netDvrIFrame.size(); + netDvrIFrame.write(); + if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { + log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + } + //endregion + //region 棰勮鍙傛暟 + NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); + previewinfo.read(); + previewinfo.lChannel = channelNum; + previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� + previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ + previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� + previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 + previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 + previewinfo.write(); + //endregion + hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + log.debug("鏈湴褰曞儚鍋滄"); + // 鏈湴涓存椂褰曞儚鍦板潃 + String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; + String recordPath = FileUtils.createFile(tempPath + "/" + operator + "/" + cameraId + ".mp4"); + byte[] recordBytes = Files.readAllBytes(Paths.get(recordPath)); + return AjaxResult.success(recordBytes); + } catch (Exception ex) { + log.error("鏈湴褰曞儚鍋滄寮傚父" + ex.getMessage()); + return AjaxResult.error("鏈湴褰曞儚鍋滄寮傚父" + ex.getMessage()); } } } -- Gitblit v1.9.3