From cf4afcc8902efc85f1e71f26073404a0a7a4f204 Mon Sep 17 00:00:00 2001 From: liusuyi <1951119284@qq.com> Date: 星期三, 31 七月 2024 09:48:41 +0800 Subject: [PATCH] 修改:异步async指定线程池 --- ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 255 +++++++++++++++++++++++---------------------------- 1 files changed, 115 insertions(+), 140 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 5c9587f..e622d1c 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,18 +4,19 @@ 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; @@ -28,11 +29,12 @@ import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; import java.io.*; import java.math.BigDecimal; import java.nio.ByteBuffer; @@ -43,7 +45,6 @@ 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绛栫暐 @@ -62,7 +63,8 @@ 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;//寮傚父鍥炶皟 @@ -118,7 +120,7 @@ if (lUserID < 0) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); camera.setChanNum(0); - camera.setLoginId(-1); + camera.setLoginId(-1l); camera.setState("0"); //鍒犻櫎绠$悊閫氶亾 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); @@ -137,38 +139,35 @@ 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); @@ -185,7 +184,7 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - @Async("loginExecutor") + @Async("globalExecutor") public AjaxResult asyncLogin(ArdCameras camera) { try { // 鍒濆鍖� @@ -229,7 +228,7 @@ if (lUserID < 0) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); camera.setChanNum(0); - camera.setLoginId(-1); + camera.setLoginId(-1l); camera.setState("0"); //鍒犻櫎绠$悊閫氶亾 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); @@ -238,46 +237,36 @@ 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"); - } 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); @@ -287,45 +276,29 @@ //鍒涘缓寮曞闃熷垪 private void createGuideQueue(ArdCameras camera) { - 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()); } } + /** * @鎻忚堪 娉ㄩ攢鐧诲綍 @@ -1106,7 +1079,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)); @@ -1119,7 +1095,7 @@ log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); return AjaxResult.warn("璁剧疆ptz澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } - return AjaxResult.success("寮曞鍧愭爣鎴愬姛"); + return AjaxResult.success("寮曞鍧愭爣鎴愬姛", correctPitch); } catch (Exception ex) { log.error("寮曞鍧愭爣寮傚父:" + ex.getMessage()); return AjaxResult.error("寮曞鍧愭爣寮傚父:" + ex.getMessage()); @@ -1249,8 +1225,8 @@ @Override 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 AjaxResult.warn("璁惧鏈櫥褰�"); } @@ -1258,10 +1234,10 @@ 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) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("鑾峰彇鍓嶇鍙傛暟澶辫触: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code)); + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); return AjaxResult.warn("鑾峰彇鍓嶇鍙傛暟澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } struCameraParam.read(); @@ -1276,10 +1252,10 @@ } 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("鍒囨崲閫忛浘澶辫触: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code)); + log.error("鍒囨崲閫忛浘澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); return AjaxResult.warn("鍒囨崲閫忛浘澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } log.debug("鍒囨崲閫忛浘鎴愬姛"); @@ -1610,8 +1586,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 ""; @@ -1620,7 +1598,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(); @@ -1630,7 +1608,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琛ㄧず涓嶈В鐮佹樉绀恒�� @@ -1653,6 +1631,7 @@ return ""; } log.debug("褰曞儚寮�濮�"); + } else { if (GlobalVariable.previewMap.containsKey(cameraId)) { Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); @@ -1682,7 +1661,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; } @@ -1740,7 +1721,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 ""; } @@ -1834,34 +1817,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()); } @@ -1870,20 +1847,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) { @@ -1939,9 +1915,12 @@ @Override public AjaxResult localRecordStart(CameraCmd cmd) { try { + String operator = cmd.getOperator(); String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); - String path = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4"); + // 鏈湴涓存椂褰曞儚鍦板潃 + 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("璁惧鏈櫥褰�"); } @@ -1998,6 +1977,7 @@ @Override public AjaxResult localRecordStop(CameraCmd cmd) { try { + String operator = cmd.getOperator(); String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); Integer lRealHandle = cmd.getRecordId().intValue(); @@ -2028,17 +2008,12 @@ previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 previewinfo.write(); //endregion - //if (GlobalVariable.previewMap.containsKey(cameraId)) { - // Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); - // hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); - // GlobalVariable.previewMap.remove(cameraId); - //} hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); log.debug("鏈湴褰曞儚鍋滄"); - String recordPath = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4"); + // 鏈湴涓存椂褰曞儚鍦板潃 + String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; + String recordPath = FileUtils.createFile(tempPath + "/" + operator + "/" + cameraId + ".mp4"); byte[] recordBytes = Files.readAllBytes(Paths.get(recordPath)); - //OutputStream outputStream = response.getOutputStream(); - //outputStream.write(imageBytes); return AjaxResult.success(recordBytes); } catch (Exception ex) { log.error("鏈湴褰曞儚鍋滄寮傚父" + ex.getMessage()); -- Gitblit v1.9.3