From 5e4a673ecc95d6fb06aec6c5e2f3ec4ffb72584b Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 01 八月 2022 14:33:51 +0800
Subject: [PATCH] 修复视频播放点击音量报错 #557,修复编解码信息获取失败
---
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java | 181 +++++++++++++++++++++++++++++++++------------
1 files changed, 133 insertions(+), 48 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
index d6e614d..29f9d88 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
@@ -12,25 +12,33 @@
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
+import com.genersoft.iot.vmp.service.IDeviceChannelService;
import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
+import com.genersoft.iot.vmp.vmanager.bean.BaseTree;
import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
+import org.apache.commons.compress.utils.IOUtils;
+import org.apache.http.HttpResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.async.DeferredResult;
+import javax.servlet.http.HttpServletResponse;
import javax.sip.DialogState;
+import java.io.*;
+import java.nio.file.Files;
import java.util.*;
@Api(tags = "鍥芥爣璁惧鏌ヨ", value = "鍥芥爣璁惧鏌ヨ")
@@ -44,6 +52,9 @@
@Autowired
private IVideoManagerStorage storager;
+
+ @Autowired
+ private IDeviceChannelService deviceChannelService;
@Autowired
private IRedisCatchStorage redisCatchStorage;
@@ -200,6 +211,11 @@
Set<String> allKeys = dynamicTask.getAllKeys();
for (String key : allKeys) {
if (key.startsWith(deviceId)) {
+ Runnable runnable = dynamicTask.get(key);
+ if (runnable instanceof ISubscribeTask) {
+ ISubscribeTask subscribeTask = (ISubscribeTask) runnable;
+ subscribeTask.stop();
+ }
dynamicTask.stop(key);
}
}
@@ -268,7 +284,7 @@
})
@PostMapping("/channel/update/{deviceId}")
public ResponseEntity<PageInfo> updateChannel(@PathVariable String deviceId,DeviceChannel channel){
- storager.updateChannel(deviceId, channel);
+ deviceChannelService.updateChannel(deviceId, channel);
return new ResponseEntity<>(null,HttpStatus.OK);
}
@@ -288,7 +304,8 @@
public ResponseEntity<PageInfo> updateTransport(@PathVariable String deviceId, @PathVariable String streamMode){
Device device = storager.queryVideoDevice(deviceId);
device.setStreamMode(streamMode);
- storager.updateDevice(device);
+// storager.updateDevice(device);
+ deviceService.updateDevice(device);
return new ResponseEntity<>(null,HttpStatus.OK);
}
@@ -305,51 +322,7 @@
public ResponseEntity<WVPResult<String>> updateDevice(Device device){
if (device != null && device.getDeviceId() != null) {
- Device deviceInStore = storager.queryVideoDevice(device.getDeviceId());
- if (!StringUtils.isEmpty(device.getName())) {
- deviceInStore.setName(device.getName());
- }
- if (!StringUtils.isEmpty(device.getCharset())) {
- deviceInStore.setCharset(device.getCharset());
- }
- if (!StringUtils.isEmpty(device.getMediaServerId())) {
- deviceInStore.setMediaServerId(device.getMediaServerId());
- }
-
- // 鐩綍璁㈤槄鐩稿叧鐨勪俊鎭�
- if (device.getSubscribeCycleForCatalog() > 0) {
- if (deviceInStore.getSubscribeCycleForCatalog() == 0 || deviceInStore.getSubscribeCycleForCatalog() != device.getSubscribeCycleForCatalog()) {
- deviceInStore.setSubscribeCycleForCatalog(device.getSubscribeCycleForCatalog());
- // 寮�鍚闃�
- deviceService.addCatalogSubscribe(deviceInStore);
- }
- }else if (device.getSubscribeCycleForCatalog() == 0) {
- if (deviceInStore.getSubscribeCycleForCatalog() != 0) {
- deviceInStore.setSubscribeCycleForCatalog(device.getSubscribeCycleForCatalog());
- // 鍙栨秷璁㈤槄
- deviceService.removeCatalogSubscribe(deviceInStore);
- }
- }
-
- // 绉诲姩浣嶇疆璁㈤槄鐩稿叧鐨勪俊鎭�
- if (device.getSubscribeCycleForMobilePosition() > 0) {
- if (deviceInStore.getSubscribeCycleForMobilePosition() == 0 || deviceInStore.getSubscribeCycleForMobilePosition() != device.getSubscribeCycleForMobilePosition()) {
- deviceInStore.setMobilePositionSubmissionInterval(device.getMobilePositionSubmissionInterval());
- deviceInStore.setSubscribeCycleForMobilePosition(device.getSubscribeCycleForMobilePosition());
- // 寮�鍚闃�
- deviceService.addMobilePositionSubscribe(deviceInStore);
- }
- }else if (device.getSubscribeCycleForMobilePosition() == 0) {
- if (deviceInStore.getSubscribeCycleForMobilePosition() != 0) {
- // 鍙栨秷璁㈤槄
- deviceService.removeMobilePositionSubscribe(deviceInStore);
- }
- }
-
- // TODO 鎶ヨ璁㈤槄鐩稿叧鐨勪俊鎭�
-
- storager.updateDevice(device);
- cmder.deviceInfoQuery(device);
+ deviceService.updateDevice(device);
}
WVPResult<String> result = new WVPResult<>();
result.setCode(0);
@@ -374,6 +347,11 @@
Device device = storager.queryVideoDevice(deviceId);
String uuid = UUID.randomUUID().toString();
String key = DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId;
+ DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(2*1000L);
+ if(device == null) {
+ result.setResult(new ResponseEntity(String.format("璁惧%s涓嶅瓨鍦�", deviceId),HttpStatus.OK));
+ return result;
+ }
cmder.deviceStatusQuery(device, event -> {
RequestMessage msg = new RequestMessage();
msg.setId(uuid);
@@ -381,7 +359,6 @@
msg.setData(String.format("鑾峰彇璁惧鐘舵�佸け璐ワ紝閿欒鐮侊細 %s, %s", event.statusCode, event.msg));
resultHolder.invokeResult(msg);
});
- DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(2*1000L);
result.onTimeout(()->{
logger.warn(String.format("鑾峰彇璁惧鐘舵�佽秴鏃�"));
// 閲婃斁rtpserver
@@ -494,4 +471,112 @@
wvpResult.setData(dialogStateMap);
return wvpResult;
}
+
+ @GetMapping("/snap/{deviceId}/{channelId}")
+ @ApiOperation(value = "璇锋眰鎴浘", notes = "璇锋眰鎴浘")
+ public void getSnap(HttpServletResponse resp, @PathVariable String deviceId, @PathVariable String channelId) {
+
+ try {
+ final InputStream in = Files.newInputStream(new File("snap" + File.separator + deviceId + "_" + channelId + ".jpg").toPath());
+ resp.setContentType(MediaType.IMAGE_PNG_VALUE);
+ IOUtils.copy(in, resp.getOutputStream());
+ } catch (IOException e) {
+ resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ }
+ }
+
+ /**
+ * 鏌ヨ鍥芥爣鏍�
+ * @param deviceId 璁惧ID
+ * @param parentId 鐖禝D
+ * @param page 褰撳墠椤�
+ * @param count 姣忛〉鏉℃暟
+ * @return 鍥芥爣璁惧
+ */
+ @ApiOperation("鏌ヨ鍥芥爣鏍�")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceId", value = "璁惧ID", required = true, dataTypeClass = String.class),
+ @ApiImplicitParam(name = "parentId", value = "鐖禝D", required = false, dataTypeClass = String.class),
+ @ApiImplicitParam(name = "onlyCatalog", value = "鍙幏鍙栫洰褰�", required = false, dataTypeClass = Boolean.class),
+ @ApiImplicitParam(name="page", value = "褰撳墠椤�", required = true, dataTypeClass = Integer.class),
+ @ApiImplicitParam(name="count", value = "姣忛〉鏉℃暟", required = true, dataTypeClass = Integer.class),
+ })
+ @GetMapping("/tree/{deviceId}")
+ public ResponseEntity<PageInfo> getTree(@PathVariable String deviceId, @RequestParam(required = false) String parentId, @RequestParam(required = false) Boolean onlyCatalog, int page, int count){
+
+
+ if (page <= 0) {
+ page = 1;
+ }
+ if (onlyCatalog == null) {
+ onlyCatalog = false;
+ }
+
+ List<BaseTree<DeviceChannel>> treeData = deviceService.queryVideoDeviceTree(deviceId, parentId, onlyCatalog);
+ if (treeData == null || (page - 1) * count > treeData.size()) {
+ PageInfo<BaseTree<DeviceChannel>> pageInfo = new PageInfo<>();
+ pageInfo.setPageNum(page);
+ pageInfo.setTotal(treeData == null? 0 : treeData.size());
+ pageInfo.setSize(0);
+ pageInfo.setList(new ArrayList<>());
+ return new ResponseEntity<>(pageInfo,HttpStatus.OK);
+ }
+
+ int toIndex = Math.min(page * count, treeData.size());
+ // 澶勭悊鍒嗛〉
+ List<BaseTree<DeviceChannel>> trees = treeData.subList((page - 1) * count, toIndex);
+ PageInfo<BaseTree<DeviceChannel>> pageInfo = new PageInfo<>();
+ pageInfo.setPageNum(page);
+ pageInfo.setTotal(treeData.size());
+ pageInfo.setSize(trees.size());
+ pageInfo.setList(trees);
+
+ return new ResponseEntity<>(pageInfo,HttpStatus.OK);
+ }
+
+
+ /**
+ * 鏌ヨ鍥芥爣鏍戜笅鐨勯�氶亾
+ * @param deviceId 璁惧ID
+ * @param parentId 鐖禝D
+ * @param page 褰撳墠椤�
+ * @param count 姣忛〉鏉℃暟
+ * @return 鍥芥爣璁惧
+ */
+ @ApiOperation("鏌ヨ鍥芥爣鏍戜笅鐨勯�氶亾")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceId", value = "璁惧ID", required = true, dataTypeClass = String.class),
+ @ApiImplicitParam(name = "parentId", value = "鐖禝D", required = false, dataTypeClass = String.class),
+ @ApiImplicitParam(name="page", value = "褰撳墠椤�", required = true, dataTypeClass = Integer.class),
+ @ApiImplicitParam(name="count", value = "姣忛〉鏉℃暟", required = true, dataTypeClass = Integer.class),
+ })
+ @GetMapping("/tree/channel/{deviceId}")
+ public ResponseEntity<PageInfo> getChannelInTreeNode(@PathVariable String deviceId, @RequestParam(required = false) String parentId, int page, int count){
+
+
+ if (page <= 0) {
+ page = 1;
+ }
+
+ List<DeviceChannel> treeData = deviceService.queryVideoDeviceInTreeNode(deviceId, parentId);
+ if (treeData == null || (page - 1) * count > treeData.size()) {
+ PageInfo<BaseTree<DeviceChannel>> pageInfo = new PageInfo<>();
+ pageInfo.setPageNum(page);
+ pageInfo.setTotal(treeData == null? 0 : treeData.size());
+ pageInfo.setSize(0);
+ pageInfo.setList(new ArrayList<>());
+ return new ResponseEntity<>(pageInfo,HttpStatus.OK);
+ }
+
+ int toIndex = Math.min(page * count, treeData.size());
+ // 澶勭悊鍒嗛〉
+ List<DeviceChannel> trees = treeData.subList((page - 1) * count, toIndex);
+ PageInfo<DeviceChannel> pageInfo = new PageInfo<>();
+ pageInfo.setPageNum(page);
+ pageInfo.setTotal(treeData.size());
+ pageInfo.setSize(trees.size());
+ pageInfo.setList(trees);
+
+ return new ResponseEntity<>(pageInfo,HttpStatus.OK);
+ }
}
--
Gitblit v1.8.0