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