From e1af52fb5eaf0bcac221ba11cc90da7cd50d2895 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 30 九月 2022 15:51:28 +0800
Subject: [PATCH] 更新文档
---
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 11 +-
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java | 17 +++
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 263 +++++++++++++++++++++++++++-------------------------
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java | 8 +
4 files changed, 165 insertions(+), 134 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
index 5194a9a..960a99d 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -553,7 +553,6 @@
if (sendRtpItem == null) {
// TODO 鍙兘鏁版嵁閿欒锛岄噸鏂板紑鍚闊抽�氶亾
}else {
- String is_Udp = sendRtpItem.isTcp() ? "0" : "1";
MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
logger.info("rtp/{}寮�濮嬪悜涓婄骇鎺ㄦ祦, 鐩爣={}:{}锛孲SRC={}", sendRtpItem.getStreamId(), sendRtpItem.getIp(), sendRtpItem.getPort(), sendRtpItem.getSsrc());
Map<String, Object> param = new HashMap<>(12);
@@ -570,7 +569,7 @@
if (sendRtpItem.isTcpActive()) {
jsonObject = zlmrtpServerFactory.startSendRtpPassive(mediaInfo, param);
} else {
- param.put("is_udp", is_Udp);
+ param.put("is_udp", sendRtpItem.isTcp() ? "0" : "1");
param.put("dst_url", sendRtpItem.getIp());
param.put("dst_port", sendRtpItem.getPort());
jsonObject = zlmrtpServerFactory.startSendRtpStream(mediaInfo, param);
@@ -581,8 +580,8 @@
}
}else {
// 寮�鍚闊冲璁查�氶亾
- MediaServerItem mediaServerForMinimumLoad = mediaServerService.getMediaServerForMinimumLoad();
- playService.talk(mediaServerForMinimumLoad, device, channelId, (mediaServerItem, jsonObject)->{
+ MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
+ playService.talk(mediaServerItem, device, channelId, (mediaServer, jsonObject)->{
System.out.println("寮�濮嬫帹娴�");
}, eventResult -> {
System.out.println(eventResult.msg);
@@ -644,7 +643,7 @@
}
}
}
- if (!regist) {
+ if (!regist ) {
List<SendRtpItem> sendRtpItems = redisCatchStorage.querySendRTPServerByStream(stream);
if (sendRtpItems.size() > 0) {
for (SendRtpItem sendRtpItem : sendRtpItems) {
@@ -657,7 +656,7 @@
if (platform != null) {
commanderFroPlatform.streamByeCmd(platform, sendRtpItem);
}else {
- if (sendRtpItem.isOnlyAudio()) {
+ if ("talk".equals(app) && sendRtpItem.isOnlyAudio()) {
AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(sendRtpItem.getDeviceId(), sendRtpItem.getChannelId());
if (device != null && audioBroadcastCatch != null) {
// cmder.streamByeCmd(device, sendRtpItem.getChannelId(), audioBroadcastCatch.getSipTransactionInfo(), null);
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
index 2bd9a95..502418c 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
+import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -323,4 +324,20 @@
public void closeAllSendRtpStream() {
}
+
+ public MediaItem getMediaInfo(MediaServerItem mediaServerItem, String app, String stream) {
+ JSONObject json = zlmresTfulUtils.getMediaList(mediaServerItem, app, stream);
+ MediaItem mediaItem = null;
+ if (json == null || json.getInteger("code") != 0) {
+ return null;
+ } else {
+ JSONArray data = json.getJSONArray("data");
+ if (data == null || data.size() == 0) {
+ return null;
+ }else {
+ mediaItem = JSONObject.toJavaObject(data.getJSONObject(0), MediaItem.class);
+ }
+ }
+ return mediaItem;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
index 68055a4..4d814c6 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -14,6 +14,7 @@
import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
+import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.vmanager.bean.AudioBroadcastResult;
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
@@ -290,148 +291,154 @@
logger.info("[瀵硅] 绔彛鍒嗛厤寮傚父锛宒eviceId={},channelId={},ssrcInfo={}", device.getDeviceId(), channelId, ssrcInfo);
return;
}
- try {
- String callId = SipUtils.getNewCallId();
- cmder.talkStreamCmd(mediaServerItem, ssrcInfo, device, channelId, callId, (MediaServerItem mediaServerItemInuse, JSONObject response) -> {
- logger.info("[瀵硅] 娴佸凡鐢熸垚锛� 寮�濮嬫帹娴侊細 " + response.toJSONString());
- dynamicTask.stop(timeOutTaskKey);
- // TODO 鏆備笉鍋氬鐞�
- }, (MediaServerItem mediaServerItemInuse, JSONObject json) -> {
- logger.info("[瀵硅] 寮�濮嬫帹娴侊細 " + json.toJSONString());
- dynamicTask.stop(timeOutTaskKey);
- // 鑾峰彇杩滅▼IP绔彛 浣滀负鍥炲璇煶娴佺殑鍦板潃
- String ip = json.getString("ip");
- Integer port = json.getInteger("port");
- logger.info("[杩滅璁惧寮�濮嬫帹娴乚{}/{}, 鏉ヨ嚜ip锛歿}, 绔彛锛歿}", device.getDeviceId(), channelId, ip, port);
- // 鏌ョ湅骞冲彴鎺ㄦ祦鏄惁灏辩华
- Boolean ready = zlmrtpServerFactory.isStreamReady(mediaServerItemInuse, "talk", stream);
- if (!ready) {
- try {
- cmder.streamByeCmd(device, channelId, finalSsrcInfo.getStream(), null);
- } catch (InvalidArgumentException | ParseException | SipException e) {
- logger.error("[瀵硅瓒呮椂]锛� 鍙戦�丅YE澶辫触 {}", e.getMessage());
- } catch (SsrcTransactionNotFoundException e) {
- timeoutCallback.run();
- mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc());
- mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream());
- streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
- }
- }else {
- SendRtpItem sendRtpItem = zlmrtpServerFactory.createSendRtpItem(mediaServerItem, ip, port, ssrcInfo.getSsrc(), device.getDeviceId(),
- device.getDeviceId(), channelId,
- false);
- sendRtpItem.setTcpActive(false);
- if (sendRtpItem == null || sendRtpItem.getLocalPort() == 0) {
- logger.warn("鏈嶅姟鍣ㄧ鍙h祫婧愪笉瓒�");
- try {
- cmder.streamByeCmd(device, channelId, finalSsrcInfo.getStream(), null);
- } catch (InvalidArgumentException | ParseException | SipException e) {
- logger.error("[瀵硅瓒呮椂]锛� 鍙戦�丅YE澶辫触 {}", e.getMessage());
- } catch (SsrcTransactionNotFoundException e) {
- timeoutCallback.run();
- mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc());
- mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream());
- streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
- }
- return;
- }
- sendRtpItem.setCallId(callId);
- sendRtpItem.setPlayType(InviteStreamType.TALK);
- sendRtpItem.setStatus(1);
- sendRtpItem.setIp(ip);
- sendRtpItem.setPort(port);
- sendRtpItem.setTcpActive(false);
- sendRtpItem.setStreamId(ssrcInfo.getStream());
- sendRtpItem.setApp("talk");
- sendRtpItem.setSsrc(ssrc);
- redisCatchStorage.updateSendRTPSever(sendRtpItem);
-
- Map<String, Object> param = new HashMap<>(12);
- param.put("vhost","__defaultVhost__");
- param.put("app",sendRtpItem.getApp());
- param.put("stream",sendRtpItem.getStreamId());
- param.put("ssrc", sendRtpItem.getSsrc());
- param.put("src_port", sendRtpItem.getLocalPort());
- param.put("pt", sendRtpItem.getPt());
- param.put("use_ps", sendRtpItem.isUsePs() ? "1" : "0");
- param.put("only_audio", sendRtpItem.isOnlyAudio() ? "1" : "0");
- JSONObject jsonObject = zlmrtpServerFactory.startSendRtpStream(mediaServerItemInuse, param);
- System.out.println(11111);
- System.out.println(jsonObject);
- }
-
- }, (event) -> {
-// ResponseEvent responseEvent = (ResponseEvent) event.event;
-// String contentString = new String(responseEvent.getResponse().getRawContent());
-// // 鑾峰彇ssrc
-// int ssrcIndex = contentString.indexOf("y=");
-// // 妫�鏌ユ槸鍚︽湁y瀛楁
-// if (ssrcIndex >= 0) {
-// //ssrc瑙勫畾闀垮害涓�10瀛楄妭锛屼笉鍙栦綑涓嬮暱搴︿互閬垮厤鍚庣画杩樻湁鈥渇=鈥濆瓧娈� TODO 鍚庣画瀵逛笉瑙勮寖鐨勯潪10浣峴src鍏煎
-// String ssrcInResponse = contentString.substring(ssrcIndex + 2, ssrcIndex + 12);
-// // 鏌ヨ鍒皊src涓嶄竴鑷翠笖寮�鍚簡ssrc鏍¢獙鍒欓渶瑕侀拡瀵瑰鐞�
-// if (ssrc.equals(ssrcInResponse)) {
-// return;
-// }
-// logger.info("[瀵硅娑堟伅] 鏀跺埌invite 200, 鍙戠幇涓嬬骇鑷畾涔変簡ssrc: {}", ssrcInResponse);
-// if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) {
-// logger.info("[瀵硅娑堟伅] SSRC淇 {}->{}", ssrc, ssrcInResponse);
+ String callId = SipUtils.getNewCallId();
+ boolean pushing = false;
+ // 鏌ョ湅璁惧鏄惁宸茬粡鍦ㄦ帹娴�
+// MediaItem mediaItem = zlmrtpServerFactory.getMediaInfo(mediaServerItem, "rtp",ssrcInfo.getStream());
+// if (mediaItem != null) {
+// SendRtpItem sendRtpItem = zlmrtpServerFactory.createSendRtpItem(mediaServerItem,
+// mediaItem.getOriginSock().getPeer_ip(), mediaItem.getOriginSock().getPeer_port(), ssrcInfo.getSsrc(), device.getDeviceId(),
+// device.getDeviceId(), channelId,
+// false);
//
-// if (!mediaServerItem.getSsrcConfig().checkSsrc(ssrcInResponse)) {
-// // ssrc 涓嶅彲鐢�
-// // 閲婃斁ssrc
+// sendRtpItem.setTcpActive(false);
+// sendRtpItem.setCallId(callId);
+// sendRtpItem.setPlayType(InviteStreamType.TALK);
+// sendRtpItem.setStatus(1);
+// sendRtpItem.setIp(mediaItem.getOriginSock().getPeer_ip());
+// sendRtpItem.setPort(mediaItem.getOriginSock().getPeer_port());
+// sendRtpItem.setTcpActive(false);
+// sendRtpItem.setStreamId(ssrcInfo.getStream());
+// sendRtpItem.setApp("1000");
+// sendRtpItem.setStreamId("1000");
+// sendRtpItem.setSsrc(ssrc);
+// sendRtpItem.setOnlyAudio(true);
+// redisCatchStorage.updateSendRTPSever(sendRtpItem);
+//
+// Map<String, Object> param = new HashMap<>(12);
+// param.put("vhost","__defaultVhost__");
+// param.put("app",sendRtpItem.getApp());
+// param.put("stream",sendRtpItem.getStreamId());
+// param.put("ssrc", sendRtpItem.getSsrc());
+// param.put("dst_url", sendRtpItem.getIp());
+// param.put("dst_port", sendRtpItem.getPort());
+// param.put("src_port", sendRtpItem.getLocalPort());
+// param.put("pt", sendRtpItem.getPt());
+// param.put("use_ps", sendRtpItem.isUsePs() ? "1" : "0");
+// param.put("is_udp", sendRtpItem.isTcp() ? "0" : "1");
+// param.put("only_audio", sendRtpItem.isOnlyAudio() ? "1" : "0");
+// JSONObject jsonObject = zlmrtpServerFactory.startSendRtpStream(mediaServerItem, param);
+// System.out.println(2222);
+// System.out.println(jsonObject);
+// }else {
+ try {
+ cmder.talkStreamCmd(mediaServerItem, ssrcInfo, device, channelId, callId, (MediaServerItem mediaServerItemInuse, JSONObject response) -> {
+ logger.info("[瀵硅] 娴佸凡鐢熸垚锛� 寮�濮嬫帹娴侊細 " + response.toJSONString());
+ dynamicTask.stop(timeOutTaskKey);
+ // TODO 鏆備笉鍋氬鐞�
+ }, (MediaServerItem mediaServerItemInuse, JSONObject json) -> {
+ logger.info("[瀵硅] 璁惧寮�濮嬫帹娴侊細 " + json.toJSONString());
+ dynamicTask.stop(timeOutTaskKey);
+ // 鑾峰彇杩滅▼IP绔彛 浣滀负鍥炲璇煶娴佺殑鍦板潃
+ String ip = json.getString("ip");
+ Integer port = json.getInteger("port");
+ logger.info("[璁惧寮�濮嬫帹娴乚{}/{}, 鏉ヨ嚜ip锛歿}, 绔彛锛歿}", device.getDeviceId(), channelId, ip, port);
+ // 鏌ョ湅骞冲彴鎺ㄦ祦鏄惁灏辩华
+// Boolean ready = zlmrtpServerFactory.isStreamReady(mediaServerItemInuse, "talk", stream);
+// if (!ready) {
+// try {
+// cmder.streamByeCmd(device, channelId, finalSsrcInfo.getStream(), null);
+// } catch (InvalidArgumentException | ParseException | SipException e) {
+// logger.error("[瀵硅瓒呮椂]锛� 鍙戦�丅YE澶辫触 {}", e.getMessage());
+// } catch (SsrcTransactionNotFoundException e) {
+// timeoutCallback.run();
// mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc());
+// mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream());
// streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
-// event.msg = "涓嬬骇鑷畾涔変簡ssrc,浣嗘槸姝src涓嶅彲鐢�";
-// event.statusCode = 400;
-// errorEvent.response(event);
+// }
+// }else {
+// try {
+// Thread.sleep(1000);
+// } catch (InterruptedException e) {
+// throw new RuntimeException(e);
+// }
+ SendRtpItem sendRtpItem = zlmrtpServerFactory.createSendRtpItem(mediaServerItem, ip, port, ssrcInfo.getSsrc(), device.getDeviceId(),
+ device.getDeviceId(), channelId,
+ false);
+
+
+// if (sendRtpItem.getLocalPort() == 0) {
+// logger.warn("鏈嶅姟鍣ㄧ鍙h祫婧愪笉瓒�");
+// try {
+// cmder.streamByeCmd(device, channelId, finalSsrcInfo.getStream(), null);
+// } catch (InvalidArgumentException | ParseException | SipException e) {
+// logger.error("[瀵硅瓒呮椂]锛� 鍙戦�丅YE澶辫触 {}", e.getMessage());
+// } catch (SsrcTransactionNotFoundException e) {
+// timeoutCallback.run();
+// mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc());
+// mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream());
+// streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
+// }
// return;
// }
-//
-// // 鍗曠鍙fā寮弒treamId涔熸湁鍙樺寲锛岄渶瑕侀噸鏂拌缃洃鍚�
-// if (!mediaServerItem.isRtpEnable()) {
-// // 娣诲姞璁㈤槄
-// HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", stream, true, "rtsp", mediaServerItem.getId());
-// subscribe.removeSubscribe(hookSubscribe);
-// hookSubscribe.getContent().put("stream", String.format("%08x", Integer.parseInt(ssrcInResponse)).toUpperCase());
-// subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject response) -> {
-// logger.info("[ZLM HOOK] ssrc淇鍚庢敹鍒拌闃呮秷鎭細 " + response.toJSONString());
-// dynamicTask.stop(timeOutTaskKey);
-// // hook鍝嶅簲
-// onPublishHandlerForPlay(mediaServerItemInUse, response, device.getDeviceId(), channelId, uuid);
-// hookEvent.response(mediaServerItemInUse, response);
-// });
-// }
-// // 鍏抽棴rtp server
-// mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream());
-// // 閲嶆柊寮�鍚痵src server
-// mediaServerService.openRTPServer(mediaServerItem, finalSsrcInfo.getStream(), ssrcInResponse, device.isSsrcCheck(), false, finalSsrcInfo.getPort());
-//
+ sendRtpItem.setTcpActive(false);
+ sendRtpItem.setCallId(callId);
+ sendRtpItem.setPlayType(InviteStreamType.TALK);
+ sendRtpItem.setStatus(1);
+ sendRtpItem.setIp(ip);
+ sendRtpItem.setPort(port);
+ sendRtpItem.setTcpActive(false);
+ sendRtpItem.setApp("1000");
+ sendRtpItem.setStreamId("1000");
+ sendRtpItem.setSsrc(ssrc);
+ sendRtpItem.setOnlyAudio(true);
+ redisCatchStorage.updateSendRTPSever(sendRtpItem);
+
+ Map<String, Object> param = new HashMap<>(12);
+ param.put("vhost","__defaultVhost__");
+ param.put("app",sendRtpItem.getApp());
+ param.put("stream",sendRtpItem.getStreamId());
+ param.put("ssrc", sendRtpItem.getSsrc());
+ param.put("dst_url", sendRtpItem.getIp());
+ param.put("dst_port", sendRtpItem.getPort());
+ param.put("src_port", sendRtpItem.getLocalPort());
+ param.put("pt", sendRtpItem.getPt());
+ param.put("use_ps", sendRtpItem.isUsePs() ? "1" : "0");
+ param.put("is_udp", sendRtpItem.isTcp() ? "0" : "1");
+ param.put("only_audio", sendRtpItem.isOnlyAudio() ? "1" : "0");
+ JSONObject jsonObject = zlmrtpServerFactory.startSendRtpStream(mediaServerItemInuse, param);
+ System.out.println(11111);
+ System.out.println(sendRtpItem.getIp() + ":" + sendRtpItem.getPort());
+// System.out.println(jsonObject);
// }
-// }
- }, (event) -> {
+
+ }, (event) -> {
+
+ }, (event) -> {
+ dynamicTask.stop(timeOutTaskKey);
+ mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream());
+ // 閲婃斁ssrc
+ mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc());
+
+ streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
+ errorEvent.response(event);
+ });
+ } catch (InvalidArgumentException | SipException | ParseException e) {
+
+ logger.error("[鍛戒护鍙戦�佸け璐 瀵硅娑堟伅: {}", e.getMessage());
dynamicTask.stop(timeOutTaskKey);
mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream());
// 閲婃斁ssrc
mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc());
streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
- errorEvent.response(event);
- });
- } catch (InvalidArgumentException | SipException | ParseException e) {
+ SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(new CmdSendFailEvent(null));
+ eventResult.msg = "鍛戒护鍙戦�佸け璐�";
+ errorEvent.response(eventResult);
+ }
+// }
- logger.error("[鍛戒护鍙戦�佸け璐 瀵硅娑堟伅: {}", e.getMessage());
- dynamicTask.stop(timeOutTaskKey);
- mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream());
- // 閲婃斁ssrc
- mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc());
-
- streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
- SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(new CmdSendFailEvent(null));
- eventResult.msg = "鍛戒护鍙戦�佸け璐�";
- errorEvent.response(eventResult);
- }
}
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 bcd8bf1..baccfca 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
@@ -232,6 +232,14 @@
}
+ @GetMapping("/1111")
+ public void broadcastApi1() {
+ MediaServerItem defaultMediaServer = mediaServerService.getMediaServerForMinimumLoad();
+ Device device = storager.queryVideoDevice("34020000001320090001");
+ playService.talk(defaultMediaServer, device, "34020000001370000001", null, null, null);
+
+ }
+
@Operation(summary = "鍋滄璇煶骞挎挱")
@Parameter(name = "deviceId", description = "璁惧Id", required = true)
--
Gitblit v1.8.0