From a17ac1c04c229294760d58825ac68dbe044e8278 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期六, 13 四月 2024 10:12:15 +0800 Subject: [PATCH] 增加本地抓图和录像 增加兴趣点引导上报 --- ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/controller/HikSdkController.java | 7 ard-work/src/main/java/com/ruoyi/utils/sdk/common/SdkErrorCodeEnum.java | 3 ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/RealPlayModule.java | 4 ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java | 11 ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java | 54 ++++ ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java | 60 +++++ ard-work/src/main/java/com/ruoyi/utils/qymqtt/oldM/PushCallback.java | 2 ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 180 +++++++++++++-- ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java | 10 ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/LoginModule.java | 2 ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java | 25 +- ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java | 9 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java | 110 +++++---- ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java | 139 +++++++++++ 14 files changed, 494 insertions(+), 122 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java index 05ebddc..0c705c4 100644 --- a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java +++ b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueHandler.java @@ -138,21 +138,11 @@ } if (guideRes) { log.debug("寮曞鎴愬姛"); - //region 閫氱煡鍓嶇 - Map<String, Object> message = new HashMap<>(); - Map<String, String> data = new HashMap<>(); - data.put("cameraId", cmd.getCameraId()); - data.put("chanNo", cmd.getChanNo().toString()); - data.put("alarmType", cmd.getOperator()); - data.put("alarmId", guideTask.getAlarmId()); - data.put("wellId", guideTask.getWellId()); - message.put("70000", data); - WebSocketUtils.sendMessageAll(message); - //endregion cameraSdkService.controlLock(cmd);//涓婇攣 cameraSdkService.recordStart(cmd);//寮�濮嬪綍鍍� recordFlag = true; Instant startTime = Instant.now(); + Instant startTime1 = startTime; while (recordFlag) { //鍒ゆ柇鏃堕棿 Instant currentTime = Instant.now(); @@ -172,6 +162,19 @@ recordFlag = false;//褰曞儚鍋滄 } } + //region 閫氱煡鍓嶇 + long seconds = Duration.between(startTime1, currentTime).getSeconds(); + // 鍒ゆ柇褰撳墠鏃堕棿涓庝笂娆″彂閫佹暟鎹殑鏃堕棿闂撮殧鏄惁瓒呰繃2绉� + if (seconds == 2) { + Map<String, Object> message = new HashMap<>(); + Map<String, String> data = new HashMap<>(); + data.put("cameraId", cmd.getCameraId()); + data.put("wellId", guideTask.getWellId()); + message.put("70000", data); + WebSocketUtils.sendMessageAll(message); + startTime1 = currentTime; // 鏇存柊涓婃鍙戦�佹暟鎹殑鏃堕棿鎴� + } + //endregion } if (StringUtils.isNotEmpty(url)) { switch (guideTask.getAlarmType()) { diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java b/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java index a2cefc6..1568ce7 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java +++ b/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java @@ -23,6 +23,10 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -333,6 +337,20 @@ return toAjaxString(path, "鐩告満鎶撳浘"); } + @ApiOperation("鏈湴鎶撳浘") + @PostMapping("/localCapture") + @Log(title = "鐩告満鎶撳浘", businessType = BusinessType.CONTROL) + @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) + public @ResponseBody + void localCapture(@RequestBody CameraCmd cmd, HttpServletResponse response) throws IOException { + cmd.setOperator(SecurityUtils.getUserId()); + response.setContentType("image/jpeg"); + AjaxResult result = cameraSdkService.localCapture(cmd); + OutputStream outputStream = response.getOutputStream(); + byte[] data = (byte[]) result.get("data"); + outputStream.write(data); + } + @ApiOperation("鑾峰彇鐩告満鏋惰鍙傛暟") @PostMapping("/getGisInfo") @Log(title = "鑾峰彇鐩告満鏋惰鍙傛暟", businessType = BusinessType.CONTROL) @@ -343,10 +361,10 @@ return cameraSdkService.getGisInfo(cmd); } - @ApiOperation("褰曞儚") + //@ApiOperation("褰曞儚") @PostMapping("/record") @Log(title = "鎵嬪姩褰曞儚寮�濮�", businessType = BusinessType.CONTROL) - @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"}) + //@ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"}) public @ResponseBody AjaxResult record(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); @@ -354,10 +372,10 @@ return AjaxResult.success(url); } - @ApiOperation("鎵嬪姩褰曞儚寮�濮�") + //@ApiOperation("鎵嬪姩褰曞儚寮�濮�") @PostMapping("/recordStart") @Log(title = "鎵嬪姩褰曞儚寮�濮�", businessType = BusinessType.CONTROL) - @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) + //@ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) public @ResponseBody AjaxResult recordStart(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); @@ -365,14 +383,38 @@ return toAjax(b); } - @ApiOperation("鎵嬪姩褰曞儚鍋滄") + //@ApiOperation("鎵嬪姩褰曞儚鍋滄") @PostMapping("/recordStop") @Log(title = "鎵嬪姩褰曞儚鍋滄", businessType = BusinessType.CONTROL) - @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.recordBucketName", "cmd.recordObjectName"}) + //@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); } + + @ApiOperation("鏈湴褰曞儚寮�濮�") + @PostMapping("/localRecordStart") + @Log(title = "鏈湴褰曞儚寮�濮�", businessType = BusinessType.CONTROL) + @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) + public @ResponseBody + AjaxResult localRecordStart(@RequestBody CameraCmd cmd) { + cmd.setOperator(SecurityUtils.getUserId()); + return cameraSdkService.localRecordStart(cmd); + } + + @ApiOperation("鏈湴褰曞儚鍋滄") + @PostMapping("/localRecordStop") + @Log(title = "鏈湴褰曞儚鍋滄", businessType = BusinessType.CONTROL) + @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) + public @ResponseBody + void localRecordStop(@RequestBody CameraCmd cmd, HttpServletResponse response) throws IOException { + cmd.setOperator(SecurityUtils.getUserId()); + response.setContentType("video/mp4"); + AjaxResult result = cameraSdkService.localRecordStop(cmd); + byte[] recordBytes = (byte[]) result.get("data"); + OutputStream outputStream = response.getOutputStream(); + outputStream.write(recordBytes); + } } diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java b/ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java index a978e5a..c1d51b5 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java +++ b/ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java @@ -4,6 +4,8 @@ import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.channel.domain.ArdChannel; + +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -65,8 +67,8 @@ //鑾峰彇浜戝彴閿佸畾淇℃伅 AjaxResult getPTZLockInfo(CameraCmd cmd); - //鎶撳浘-杩旂粰鍓嶇浜岃繘鍒舵祦 - AjaxResult captureJPEGPicture(CameraCmd cmd); + //鏈湴鎶撳浘 + AjaxResult localCapture(CameraCmd cmd); //鎶撳浘 String picCutCate(CameraCmd cmd); @@ -108,4 +110,9 @@ //鑾峰彇GIS淇℃伅鏁版嵁 AjaxResult getGisInfo(CameraCmd cmd); + + //鏈湴褰曞儚寮�濮� + AjaxResult localRecordStart(CameraCmd cmd); + //鏈湴褰曞儚鍋滄 + AjaxResult localRecordStop(CameraCmd cmd); } diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java index 8909eec..18f0cde 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java +++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java @@ -5,6 +5,7 @@ import com.ruoyi.device.camera.domain.CameraCmd; import org.springframework.scheduling.annotation.Async; +import javax.servlet.http.HttpServletResponse; import java.util.Map; public interface ICameraSdkService { @@ -66,8 +67,8 @@ //鑾峰彇浜戝彴閿佸畾淇℃伅 AjaxResult getPTZLockInfo(CameraCmd cmd); - //鎶撳浘-杩旂粰鍓嶇浜岃繘鍒舵祦 - String captureJPEGPicture(CameraCmd cmd); + //鏈湴鎶撳浘 + AjaxResult localCapture(CameraCmd cmd); //鎶撳浘 String picCutCate(CameraCmd cmd); @@ -104,4 +105,9 @@ //鑾峰彇GIS淇℃伅鏁版嵁 AjaxResult getGisInfo(CameraCmd cmd); + + //鏈湴褰曞儚寮�濮� + AjaxResult localRecordStart(CameraCmd cmd); + //鏈湴褰曞儚鍋滄 + AjaxResult localRecordStop(CameraCmd cmd); } diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java index de2805a..e3aac54 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java @@ -29,6 +29,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.util.*; @@ -384,9 +385,25 @@ } } + //鏈湴鎶撳浘 @Override - public String captureJPEGPicture(CameraCmd cmd) { - return null; + public AjaxResult localCapture(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); + if (ardCamera != null) { + String factory = ardCamera.getFactory(); + CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory); + return cameraSDK.localCapture(cmd); + } + else + { + return AjaxResult.error("鎽勫儚澶翠笉瀛樺湪"); + } + } catch (Exception ex) { + log.error("鎵嬪姩鎶撳浘寮傚父:" + ex.getMessage()); + return AjaxResult.error("鎵嬪姩鎶撳浘寮傚父:" + ex.getMessage()); + } } //鎶撳浘 @@ -829,4 +846,43 @@ return AjaxResult.error("鑾峰彇鐩告満鏋惰鍙傛暟寮傚父锛�" + ex.getMessage()); } } + + //鏈湴褰曞儚寮�濮� + @Override + public AjaxResult localRecordStart(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); + if (ardCamera != null) { + String factory = ardCamera.getFactory(); + CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory); + return cameraSDK.localRecordStart(cmd); + } else { + return AjaxResult.error("鐩告満涓嶅瓨鍦�"); + } + } catch (Exception ex) { + log.error("鏈湴褰曞儚寮�濮嬪紓甯革細" + ex.getMessage()); + return AjaxResult.error("鏈湴褰曞儚寮�濮嬪紓甯革細" + ex.getMessage()); + } + } + //鏈湴褰曞儚鍋滄 + @Override + public AjaxResult localRecordStop(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); + if (ardCamera != null) { + String factory = ardCamera.getFactory(); + CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory); + return cameraSDK.localRecordStop(cmd); + } + else + { + return AjaxResult.error("鐩告満涓嶅瓨鍦�"); + } + } catch (Exception ex) { + log.error("鏈湴褰曞儚鍋滄寮傚父锛�" + ex.getMessage()); + return AjaxResult.error("鏈湴褰曞儚鍋滄寮傚父锛�" + ex.getMessage()); + } + } } diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java index 097c4fa..8a93ee5 100644 --- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java @@ -14,6 +14,7 @@ import com.ruoyi.inspect.domain.ArdVideoInspectRecord; import com.ruoyi.inspect.mapper.ArdVideoInspectRecordMapper; import com.ruoyi.inspect.mapper.ArdVideoInspectTaskStepMapper; +import com.ruoyi.utils.websocket.util.WebSocketUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import com.ruoyi.common.utils.StringUtils; @@ -517,6 +518,14 @@ ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask); } else { log.debug("寮曞鎴愬姛!"); + //region 閫氱煡鍓嶇 + Map<String, Object> message = new HashMap<>(); + Map<String, String> data = new HashMap<>(); + data.put("cameraId", cmd.getCameraId()); + data.put("wellId", well.getWellId()); + message.put("70000", data); + WebSocketUtils.sendMessageAll(message); + //endregion } } } diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java index baa6568..4797f54 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java @@ -1317,62 +1317,68 @@ */ @Override public List<Map<String, Object>> getNearCar(SchedulingParam param) { - Double longitude = param.getLongitude(); - Double latitude = param.getLatitude(); - Integer radius = param.getSealingRadius(); - if (longitude == null && latitude == null) { - log.debug("鍘熺偣鍧愭爣涓虹┖"); - return null; - } - if (radius == null) { - log.debug("鍗婂緞璺濈涓虹┖"); - return null; - } - String userId = SecurityUtils.getUserId(); - ArdSyUser syUser = new ArdSyUser(); - syUser.setSysUserId(userId); - List<ArdSyUser> ardSyUserList = ardSyUserMapper.selectArdSyUserList(syUser); - if (ardSyUserList.size() == 0) { - log.debug("鐢ㄦ埛鏈寕鎺ヤ笁涓�杞﹁締"); - return null; - } - ArdSyUser ardSyUser = ardSyUserList.get(0); - String syUrl = redisCache.getCacheObject("sys_config:syCarPT"); - String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword()); - Map<String, Object> LogInResult = sYClient.logIn(syUrl, passwordMd5, ardSyUser.getUserId()); - String sessionId = (String) LogInResult.get("sessionId"); + try { + Double longitude = param.getLongitude(); + Double latitude = param.getLatitude(); + Integer radius = param.getSealingRadius(); + if (longitude == null && latitude == null) { + log.debug("鍘熺偣鍧愭爣涓虹┖"); + return null; + } + if (radius == null) { + log.debug("鍗婂緞璺濈涓虹┖"); + return null; + } + String userId = SecurityUtils.getUserId(); + ArdSyUser syUser = new ArdSyUser(); + syUser.setSysUserId(userId); + List<ArdSyUser> ardSyUserList = ardSyUserMapper.selectArdSyUserList(syUser); + if (ardSyUserList.size() == 0) { + log.debug("鐢ㄦ埛鏈寕鎺ヤ笁涓�杞﹁締"); + return null; + } + ArdSyUser ardSyUser = ardSyUserList.get(0); + String syUrl = redisCache.getCacheObject("sys_config:syCarPT"); + String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword()); + Map<String, Object> LogInResult = sYClient.logIn(syUrl, passwordMd5, ardSyUser.getUserId()); + String sessionId = (String) LogInResult.get("sessionId"); - Map<String, Object> teamList = sYClient.getTeamList(syUrl, ardSyUser.getUserId(), sessionId); - List<Map<String, Object>> listMap = (List<Map<String, Object>>) teamList.get("list"); - List<Map<String, Object>> allList = new ArrayList<>(); - for (Map<String, Object> team : listMap) { - String teamId = (String) team.get("teamId"); - Map<String, Object> carListMap = sYClient.getCarList1(syUrl, teamId, ardSyUser.getUserId(), sessionId); - if (((String) carListMap.get("rspCode")).equals("1")) { - List<Map<String, Object>> list = (List<Map<String, Object>>) carListMap.get("list"); - allList.addAll(list); + Map<String, Object> teamList = sYClient.getTeamList(syUrl, ardSyUser.getUserId(), sessionId); + List<Map<String, Object>> listMap = (List<Map<String, Object>>) teamList.get("list"); + List<Map<String, Object>> allList = new ArrayList<>(); + for (Map<String, Object> team : listMap) { + String teamId = (String) team.get("teamId"); + Map<String, Object> carListMap = sYClient.getCarList1(syUrl, teamId, ardSyUser.getUserId(), sessionId); + if (((String) carListMap.get("rspCode")).equals("1")) { + List<Map<String, Object>> list = (List<Map<String, Object>>) carListMap.get("list"); + allList.addAll(list); + } } - } - //杩囨护鍦ㄧ嚎杞﹁締 - List<Map<String, Object>> onlineList = allList.stream() - .filter(map -> !"绂荤嚎".equals(map.get("stateCn"))) - .collect(Collectors.toList()); - List<Map<String, Object>> filteredList = new ArrayList<>(); - //杩囨护鍗婂緞 - for (Map<String, Object> carMap : onlineList) { - String carId = (String) carMap.get("carId"); - Map<String, Object> carGPSTrack = sYClient.getCarNearPositionByCarId(syUrl, carId, ardSyUser.getUserId(), sessionId); - List<Map<String, Object>> carGPSMap = (List<Map<String, Object>>) carGPSTrack.get("list"); - Double lng = Double.valueOf((String) carGPSMap.get(0).get("lng")); - Double lat = Double.valueOf((String) carGPSMap.get(0).get("lat")); - double distance = GisUtil.getDistance( new double[]{longitude,latitude}, new double[]{lng, lat}); - if (distance <= radius) { - carMap.put("longitude",lng); - carMap.put("latitude",lat); - filteredList.add(carMap); // 灏嗘弧瓒虫潯浠剁殑杞﹁締娣诲姞鍒扮瓫閫夊垪琛ㄤ腑 + //杩囨护鍦ㄧ嚎杞﹁締 + List<Map<String, Object>> onlineList = allList.stream() + .filter(map -> !"绂荤嚎".equals(map.get("stateCn"))) + .collect(Collectors.toList()); + List<Map<String, Object>> filteredList = new ArrayList<>(); + //杩囨护鍗婂緞 + for (Map<String, Object> carMap : onlineList) { + String carId = (String) carMap.get("carId"); + Map<String, Object> carGPSTrack = sYClient.getCarNearPositionByCarId(syUrl, carId, ardSyUser.getUserId(), sessionId); + List<Map<String, Object>> carGPSMap = (List<Map<String, Object>>) carGPSTrack.get("list"); + Double lng = Double.valueOf((String) carGPSMap.get(0).get("lng")); + Double lat = Double.valueOf((String) carGPSMap.get(0).get("lat")); + double distance = GisUtil.getDistance(new double[]{longitude, latitude}, new double[]{lng, lat}); + if (distance <= radius) { + carMap.put("longitude", lng); + carMap.put("latitude", lat); + filteredList.add(carMap); // 灏嗘弧瓒虫潯浠剁殑杞﹁締娣诲姞鍒扮瓫閫夊垪琛ㄤ腑 + } } + return filteredList; + }catch (Exception e) + { + log.error("鑾峰彇闄勮繎鑼冨洿鍐呯殑杞﹁締淇℃伅寮傚父:"+e.getMessage()); + return null; } - return filteredList; } /** * 鑾峰彇鑼冨洿鍐呯殑杞﹁締淇℃伅(澶氳竟褰�) diff --git a/ard-work/src/main/java/com/ruoyi/utils/qymqtt/oldM/PushCallback.java b/ard-work/src/main/java/com/ruoyi/utils/qymqtt/oldM/PushCallback.java index a955c6a..37841aa 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/qymqtt/oldM/PushCallback.java +++ b/ard-work/src/main/java/com/ruoyi/utils/qymqtt/oldM/PushCallback.java @@ -39,7 +39,7 @@ @Override public void connectionLost(Throwable throwable) { if (client == null || !client.isConnected()) { - System.out.println("杩炴帴鏂紑锛屾鍦ㄩ噸杩�...."); + //log.error("杩炴帴鏂紑锛屾鍦ㄩ噸杩�...."); } } diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/common/SdkErrorCodeEnum.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/common/SdkErrorCodeEnum.java index 7cad149..64832aa 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/common/SdkErrorCodeEnum.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/common/SdkErrorCodeEnum.java @@ -15,7 +15,8 @@ NET_DVR_NETWORK_FAIL_CONNECT(7, "杩炴帴璁惧澶辫触銆傝澶囦笉鍦ㄧ嚎鎴栫綉缁滃師鍥犲紩璧风殑杩炴帴瓒呮椂绛�"), NET_DVR_NETWORK_RECV_TIMEOUT(10, "浠庤澶囨帴鏀舵暟鎹秴鏃�"), NET_DVR_NETWORK_ERRORDATA(11, "浼犻�佺殑鏁版嵁鏈夎銆傚彂閫佺粰璁惧鎴栬�呬粠璁惧鎺ユ敹鍒扮殑鏁版嵁閿欒锛屽杩滅▼鍙傛暟閰嶇疆鏃惰緭鍏ヨ澶囦笉鏀寔鐨勫��"), - NET_DVR_DVROPRATEFAILED(29, "璁惧鎿嶄綔澶辫触"); + NET_DVR_DVROPRATEFAILED(29, "璁惧鎿嶄綔澶辫触"), + NET_DVR_USERNOTEXIST(47, "鐢ㄦ埛涓嶅瓨鍦ㄣ�傛敞鍐岀殑鐢ㄦ埛ID宸叉敞閿�鎴栦笉鍙敤"); /** * 鏋氫妇鐮� */ diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/LoginModule.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/LoginModule.java index ff36514..ee3b54a 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/LoginModule.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/LoginModule.java @@ -19,7 +19,7 @@ public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE; // 璁惧淇℃伅 - // public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); + // public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); // 鐧婚檰鍙ユ焺 public static LLong m_hLoginHandle = new LLong(0);// diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/RealPlayModule.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/RealPlayModule.java index a1afd9f..76fb17b 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/RealPlayModule.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/RealPlayModule.java @@ -13,6 +13,8 @@ */ @Slf4j(topic = "dhSdk") public class RealPlayModule { + public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE; + public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE; /** * \if ENGLISH_LANG * Start RealPlay @@ -101,4 +103,4 @@ } } } -} \ No newline at end of file +} diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java index e7ce57e..74f78c8 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java @@ -23,12 +23,14 @@ import com.ruoyi.utils.sdk.common.SdkErrorCodeEnum; import com.ruoyi.utils.sdk.dhsdk.common.ErrorCode; import com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib; +import com.ruoyi.utils.sdk.dhsdk.lib.ToolKits; import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.EM_NEW_CONFIG; import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE; import com.ruoyi.utils.sdk.dhsdk.lib.structure.CFG_INFRARED_INFO; import com.ruoyi.utils.sdk.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS; import com.ruoyi.utils.sdk.dhsdk.lib.structure.DH_OUT_PTZ_VIEW_RANGE_STATUS; import com.ruoyi.utils.sdk.dhsdk.module.*; +import com.sun.jna.Native; import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -36,12 +38,14 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; import java.io.*; +import java.nio.ByteBuffer; +import java.nio.file.Files; +import java.nio.file.Paths; import java.text.DecimalFormat; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.PriorityBlockingQueue; import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.*; @@ -550,6 +554,101 @@ } + @Override + public AjaxResult localCapture(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return AjaxResult.error("璁惧鏈櫥褰�"); + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + String imagePath = FileUtils.createFile("D:/LocalCaptureTemp/" + cameraId + ".jpeg"); + fCaptureReceiveCB1 m_CaptureReceiveCB = new fCaptureReceiveCB1(imagePath); + CapturePictureModule.setSnapRevCallBack(m_CaptureReceiveCB); + boolean b = CapturePictureModule.remoteCapturePicture(loginId, chanNo - 1); + if (b) { + Thread.sleep(200); + byte[] imageBytes = Files.readAllBytes(Paths.get(imagePath)); + //OutputStream outputStream = response.getOutputStream(); + //outputStream.write(imageBytes); + // 鍒涘缓ByteBuffer骞跺皢瀛楄妭鏁扮粍鍐欏叆鍏朵腑 + //ByteBuffer jpegBuffer = ByteBuffer.wrap(imageBytes); + //Base64.Encoder decoder = Base64.getEncoder(); + //String png_base64 = decoder.encodeToString(jpegBuffer.array());//杞崲鎴恇ase64涓� + return AjaxResult.success(imageBytes); + } else { + return AjaxResult.error("鏈湴鎶撳浘澶辫触"); + } + } catch (Exception ex) { + return AjaxResult.error("鏈湴鎶撳浘寮傚父:" + ex); + } + } + + //鏈湴褰曞儚寮�濮� + @Override + public AjaxResult localRecordStart(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + String path = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4"); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return AjaxResult.error("璁惧鏈櫥褰�"); + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + LLong lRealHandle; + if (GlobalVariable.previewMap.containsKey(cameraId)) { + lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId)); + RealPlayModule.stopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + log.debug("鍋滄褰撳墠褰曞儚"); + } + lRealHandle = RealPlayModule.startRealPlay(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 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(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return AjaxResult.error("璁惧鏈櫥褰�"); + } + LLong lRealHandle; + if (GlobalVariable.previewMap.containsKey(cameraId)) { + lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId)); + RealPlayModule.stopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + log.debug("鏈湴褰曞儚鍋滄"); + String recordPath = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4"); + byte[] imageBytes = Files.readAllBytes(Paths.get(recordPath)); + // OutputStream outputStream = response.getOutputStream(); + // outputStream.write(imageBytes); + return AjaxResult.success(imageBytes); + } + else { + return AjaxResult.error("璁惧鏈紑濮嬪綍鍍�"); + } + } catch (Exception ex) { + log.error("鏈湴褰曞儚鍋滄寮傚父" + ex.getMessage()); + return AjaxResult.error("鏈湴褰曞儚鍋滄寮傚父" + ex.getMessage()); + } + } /** * @鎻忚堪 鐭椂褰曞儚 @@ -739,7 +838,6 @@ } 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()); @@ -875,10 +973,6 @@ return AjaxResult.success("璇ュ姛鑳芥湭瀹炵幇"); } - @Override - public AjaxResult captureJPEGPicture(CameraCmd cmd) { - return AjaxResult.success("璇ュ姛鑳芥湭瀹炵幇"); - } //鍒囨崲閫忛浘 @Override @@ -1125,4 +1219,31 @@ } } + // 鎶撳浘鎺ユ敹鍥炶皟:褰撴姄鍥炬垚鍔燂紝sdk浼氳皟鐢ㄨ鍑芥暟 + public static class fCaptureReceiveCB1 implements NetSDKLib.fSnapRev { + private String picPath; + public fCaptureReceiveCB1(String picPath) { + this.picPath = picPath; + } + 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); + //瀛樺偍鍒版湰鍦� + InputStream input = new ByteArrayInputStream(buf); + OutputStream output = null; + try { + output = new FileOutputStream(picPath); + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = input.read(buffer)) != -1) { + output.write(buffer, 0, bytesRead); + } + input.close(); + output.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } } diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/controller/HikSdkController.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/controller/HikSdkController.java index e92f0a2..0c3a555 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/controller/HikSdkController.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/controller/HikSdkController.java @@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -259,11 +260,11 @@ return sdk.controlCameraDeicing(cmd); } - @PostMapping("/captureJPEGPicture") + @PostMapping("/localCapture") public @ResponseBody - AjaxResult captureJPEGPicture(@RequestBody CameraCmd cmd) { + void localCapture(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); - return sdk.captureJPEGPicture(cmd); + sdk.localCapture(cmd); } @ApiOperation("鐩告満鎶撳浘") 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 3f8969b..2d56529 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; @@ -1497,38 +1500,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 +1937,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