From b81192f7fc3c8050b17e68689062654c15a73ef9 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期四, 18 四月 2024 15:54:22 +0800 Subject: [PATCH] 维护海康sdk错误码 --- ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 202 +++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 158 insertions(+), 44 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 1193b37..b8dcd9c 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 @@ -32,9 +32,12 @@ 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; +import java.nio.file.Files; +import java.nio.file.Paths; import java.text.DecimalFormat; import java.util.*; import java.util.concurrent.PriorityBlockingQueue; @@ -121,7 +124,7 @@ ardChannelService.deleteArdChannelByDeviceId(camera.getId()); ardCamerasService.updateArdCameras(camera); log.error("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触: errorCode:" + errorCode + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode)); - return AjaxResult.error("鐧诲綍澶辫触: errorCode:" + errorCode + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode)); + return AjaxResult.error("璁惧鐧诲綍澶辫触: errorCode:" + errorCode + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode)); } log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]"); @@ -168,8 +171,8 @@ ardCamerasService.updateArdCameras(camera); return AjaxResult.success("璁惧鐧诲綍鎴愬姛"); } catch (Exception ex) { - log.error("娉ㄥ唽璁惧寮傚父", ex); - return AjaxResult.error("娉ㄥ唽璁惧寮傚父" + ex.getMessage()); + log.error("璁惧鐧诲綍寮傚父", ex); + return AjaxResult.error("璁惧鐧诲綍寮傚父" + ex.getMessage()); } } @@ -284,16 +287,12 @@ //鍒涘缓寮曞闃熷垪 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 (!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()); } } @@ -1497,38 +1496,45 @@ * * @param cmd 鐩告満鍛戒护 */ - public AjaxResult captureJPEGPicture(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChanNo(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return AjaxResult.error("璁惧鏈櫥褰�"); + @Override + public AjaxResult localCapture(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return AjaxResult.error("璁惧鏈櫥褰�"); + } + 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.error("鑾峰彇璁惧宸ヤ綔鐘舵�佸け璐�: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(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)) { - int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("鑾峰彇璁惧宸ヤ綔鐘舵�佸け璐�: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code)); - return AjaxResult.error("鑾峰彇璁惧宸ヤ綔鐘舵�佸け璐�: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(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); - - 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(png_base64); } /** @@ -1927,4 +1933,112 @@ return AjaxResult.success(map); } + + //鏈湴褰曞儚寮�濮� + @Override + public AjaxResult localRecordStart(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + String path = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4"); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return AjaxResult.error("璁惧鏈櫥褰�"); + } + 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.error("鏈湴褰曞儚鍙栨祦澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + } + 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)) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + return AjaxResult.error("鏈湴褰曞儚鍙栨祦澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code)); + } + log.debug("鏈湴褰曞儚寮�濮�"); + return AjaxResult.success("褰曞儚寮�濮�,褰曞儚ID:" + lRealHandle); + } catch (Exception ex) { + log.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage()); + return AjaxResult.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage()); + } + } + + //鏈湴褰曞儚鍋滄 + @Override + public AjaxResult localRecordStop(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + String recordPath = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4"); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return AjaxResult.error("璁惧鏈櫥褰�"); + } + 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 + if (GlobalVariable.previewMap.containsKey(cameraId)) { + Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); + hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + } + log.debug("鏈湴褰曞儚鍋滄"); + 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()); + return AjaxResult.error("鏈湴褰曞儚鍋滄寮傚父" +ex.getMessage()); + } + } } -- Gitblit v1.9.3