From 66ab09396cecb4caf3f1b6803fb97792132fffc6 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期二, 04 四月 2023 09:18:33 +0800
Subject: [PATCH] Merge branch 'wvp-28181-2.0' into main-dev
---
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java | 141 ++++++++++++++++++----------------------------
1 files changed, 56 insertions(+), 85 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
index 885f121..7727729 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
@@ -19,9 +19,7 @@
import com.genersoft.iot.vmp.service.IPlayService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
-import com.genersoft.iot.vmp.vmanager.bean.DeferredResultEx;
-import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
+import com.genersoft.iot.vmp.vmanager.bean.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -38,8 +36,12 @@
import java.util.List;
import java.util.UUID;
+
+/**
+ * @author lin
+ */
@Tag(name = "鍥芥爣璁惧鐐规挱")
-@CrossOrigin
+
@RestController
@RequestMapping("/api/play")
public class PlayController {
@@ -80,8 +82,8 @@
@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
@Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true)
@GetMapping("/start/{deviceId}/{channelId}")
- public DeferredResult<WVPResult<StreamInfo>> play(HttpServletRequest request, @PathVariable String deviceId,
- @PathVariable String channelId) {
+ public DeferredResult<WVPResult<StreamContent>> play(HttpServletRequest request, @PathVariable String deviceId,
+ @PathVariable String channelId) {
// 鑾峰彇鍙敤鐨剒lm
Device device = storager.queryVideoDevice(deviceId);
@@ -93,8 +95,8 @@
msg.setKey(key);
String uuid = UUID.randomUUID().toString();
msg.setId(uuid);
- DeferredResult<WVPResult<StreamInfo>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
- DeferredResultEx<WVPResult<StreamInfo>> deferredResultEx = new DeferredResultEx<>(result);
+ DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
+ DeferredResultEx<WVPResult<StreamContent>> deferredResultEx = new DeferredResultEx<>(result);
result.onTimeout(()->{
logger.info("鐐规挱鎺ュ彛绛夊緟瓒呮椂");
@@ -105,25 +107,22 @@
msg.setData(wvpResult);
resultHolder.invokeResult(msg);
});
-
- if (userSetting.getUseSourceIpAsStreamIp()) {
- // TODO 鍦ㄧ偣鎾湭鎴愬姛鐨勬儏鍐典笅鍦ㄦ璋冪敤鎺ュ彛鐐规挱浼氬鑷磋繑鍥炵殑娴佸湴鍧�ip閿欒
- deferredResultEx.setFilter(result1 -> {
- WVPResult<StreamInfo> wvpResult1 = (WVPResult<StreamInfo>)result1;
- WVPResult<StreamInfo> clone = null;
- try {
- clone = (WVPResult<StreamInfo>)wvpResult1.clone();
- } catch (CloneNotSupportedException e) {
- throw new RuntimeException(e);
- }
- if (clone.getCode() == ErrorCode.SUCCESS.getCode()) {
- StreamInfo data = clone.getData().clone();
+ // TODO 鍦ㄧ偣鎾湭鎴愬姛鐨勬儏鍐典笅鍦ㄦ璋冪敤鎺ュ彛鐐规挱浼氬鑷磋繑鍥炵殑娴佸湴鍧�ip閿欒
+ deferredResultEx.setFilter(result1 -> {
+ WVPResult<StreamInfo> wvpResult1 = (WVPResult<StreamInfo>)result1;
+ WVPResult<StreamContent> resultStream = new WVPResult<>();
+ resultStream.setCode(wvpResult1.getCode());
+ resultStream.setMsg(wvpResult1.getMsg());
+ if (wvpResult1.getCode() == ErrorCode.SUCCESS.getCode()) {
+ StreamInfo data = wvpResult1.getData().clone();
+ if (userSetting.getUseSourceIpAsStreamIp()) {
data.channgeStreamIp(request.getLocalName());
- clone.setData(data);
}
- return clone;
- });
- }
+ resultStream.setData(new StreamContent(wvpResult1.getData()));
+ }
+ return resultStream;
+ });
+
// 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ
resultHolder.put(key, uuid, deferredResultEx);
@@ -133,7 +132,6 @@
}
return result;
}
-
@Operation(summary = "鍋滄鐐规挱")
@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
@@ -171,7 +169,6 @@
json.put("deviceId", deviceId);
json.put("channelId", channelId);
return json;
-
}
/**
@@ -248,68 +245,42 @@
@Operation(summary = "璇煶骞挎挱鍛戒护")
@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
- @GetMapping("/broadcast/{deviceId}")
- @PostMapping("/broadcast/{deviceId}")
- public DeferredResult<String> broadcastApi(@PathVariable String deviceId) {
- if (logger.isDebugEnabled()) {
- logger.debug("璇煶骞挎挱API璋冪敤");
- }
- Device device = storager.queryVideoDevice(deviceId);
- DeferredResult<String> result = new DeferredResult<>(3 * 1000L);
- String key = DeferredResultHolder.CALLBACK_CMD_BROADCAST + deviceId;
- if (resultHolder.exist(key, null)) {
- result.setResult("璁惧浣跨敤涓�");
- return result;
+ @Parameter(name = "deviceId", description = "閫氶亾鍥芥爣缂栧彿", required = true)
+ @Parameter(name = "timeout", description = "鎺ㄦ祦瓒呮椂鏃堕棿(绉�)", required = true)
+ @GetMapping("/broadcast/{deviceId}/{channelId}")
+ @PostMapping("/broadcast/{deviceId}/{channelId}")
+ public AudioBroadcastResult broadcastApi(@PathVariable String deviceId, @PathVariable String channelId, Integer timeout, Boolean broadcastMode) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("璇煶骞挎挱API璋冪敤");
}
- String uuid = UUID.randomUUID().toString();
- if (device == null) {
-
- resultHolder.put(key, key, result);
- RequestMessage msg = new RequestMessage();
- msg.setKey(key);
- msg.setId(uuid);
- JSONObject json = new JSONObject();
- json.put("DeviceID", deviceId);
- json.put("CmdType", "Broadcast");
- json.put("Result", "Failed");
- json.put("Description", "Device 涓嶅瓨鍦�");
- msg.setData(json);
- resultHolder.invokeResult(msg);
- return result;
+ Device device = storager.queryVideoDevice(deviceId);
+ if (device == null) {
+ throw new ControllerException(ErrorCode.ERROR400.getCode(), "鏈壘鍒拌澶囷細 " + deviceId);
}
- try {
- cmder.audioBroadcastCmd(device, (event) -> {
- RequestMessage msg = new RequestMessage();
- msg.setKey(key);
- msg.setId(uuid);
- JSONObject json = new JSONObject();
- json.put("DeviceID", deviceId);
- json.put("CmdType", "Broadcast");
- json.put("Result", "Failed");
- json.put("Description", String.format("璇煶骞挎挱鎿嶄綔澶辫触锛岄敊璇爜锛� %s, %s", event.statusCode, event.msg));
- msg.setData(json);
- resultHolder.invokeResult(msg);
- });
- } catch (InvalidArgumentException | SipException | ParseException e) {
- logger.error("[鍛戒护鍙戦�佸け璐 璇煶骞挎挱: {}", e.getMessage());
- throw new ControllerException(ErrorCode.ERROR100.getCode(), "鍛戒护鍙戦�佸け璐�: " + e.getMessage());
+ if (channelId == null) {
+ throw new ControllerException(ErrorCode.ERROR400.getCode(), "鏈壘鍒伴�氶亾锛� " + channelId);
}
- result.onTimeout(() -> {
- logger.warn("璇煶骞挎挱鎿嶄綔瓒呮椂, 璁惧鏈繑鍥炲簲绛旀寚浠�");
- RequestMessage msg = new RequestMessage();
- msg.setKey(key);
- msg.setId(uuid);
- JSONObject json = new JSONObject();
- json.put("DeviceID", deviceId);
- json.put("CmdType", "Broadcast");
- json.put("Result", "Failed");
- json.put("Error", "Timeout. Device did not response to broadcast command.");
- msg.setData(json);
- resultHolder.invokeResult(msg);
- });
- resultHolder.put(key, uuid, result);
- return result;
+ return playService.audioBroadcast(device, channelId, broadcastMode);
+
+ }
+
+ @Operation(summary = "鍋滄璇煶骞挎挱")
+ @Parameter(name = "deviceId", description = "璁惧Id", required = true)
+ @Parameter(name = "channelId", description = "閫氶亾Id", required = true)
+ @GetMapping("/broadcast/stop/{deviceId}/{channelId}")
+ @PostMapping("/broadcast/stop/{deviceId}/{channelId}")
+ public void stopBroadcast(@PathVariable String deviceId, @PathVariable String channelId) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("鍋滄璇煶骞挎挱API璋冪敤");
+ }
+// try {
+// playService.stopAudioBroadcast(deviceId, channelId);
+// } catch (InvalidArgumentException | ParseException | SipException e) {
+// logger.error("[鍛戒护鍙戦�佸け璐 鍋滄璇煶: {}", e.getMessage());
+// throw new ControllerException(ErrorCode.ERROR100.getCode(), "鍛戒护鍙戦�佸け璐�: " + e.getMessage());
+// }
+ playService.stopAudioBroadcast(deviceId, channelId);
}
@Operation(summary = "鑾峰彇鎵�鏈夌殑ssrc")
--
Gitblit v1.8.0