From c859fe228ccc7d9e83d89e3c2513ae3548d4425f Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 30 九月 2022 09:25:15 +0800
Subject: [PATCH] 更新文档
---
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 153 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 148 insertions(+), 5 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 b043cad..5194a9a 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
@@ -11,12 +11,16 @@
import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.session.AudioBroadcastManager;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
+import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
import com.genersoft.iot.vmp.media.zlm.dto.*;
import com.genersoft.iot.vmp.service.*;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
+import com.genersoft.iot.vmp.vmanager.bean.AudioBroadcastResult;
+import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -51,7 +55,13 @@
private SIPCommander cmder;
@Autowired
- private SIPCommanderFroPlatform commanderFroPlatform;
+ private ISIPCommanderForPlatform commanderFroPlatform;
+
+ @Autowired
+ private AudioBroadcastManager audioBroadcastManager;
+
+ @Autowired
+ private ZLMRTPServerFactory zlmrtpServerFactory;
@Autowired
private IPlayService playService;
@@ -466,7 +476,127 @@
streamInfo.getStream(), null);
}
}
- }else {
+ }else if ("broadcast".equals(app)){
+ // 璇煶瀵硅鎺ㄦ祦 stream闇�瑕佹弧瓒虫牸寮廳eviceId_channelId
+ if (regist && stream.indexOf("_") > 0) {
+ String[] streamArray = stream.split("_");
+ if (streamArray.length == 2) {
+ String deviceId = streamArray[0];
+ String channelId = streamArray[1];
+ Device device = deviceService.queryDevice(deviceId);
+ if (device != null) {
+ DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId);
+ if (deviceChannel != null) {
+ if (audioBroadcastManager.exit(deviceId, channelId)) {
+ // 鐩存帴鎺ㄦ祦
+ SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(null, null, stream, null);
+ 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);
+ 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;
+ if (sendRtpItem.isTcpActive()) {
+ jsonObject = zlmrtpServerFactory.startSendRtpPassive(mediaInfo, param);
+ } else {
+ param.put("is_udp", is_Udp);
+ param.put("dst_url", sendRtpItem.getIp());
+ param.put("dst_port", sendRtpItem.getPort());
+ jsonObject = zlmrtpServerFactory.startSendRtpStream(mediaInfo, param);
+ }
+ if (jsonObject != null && jsonObject.getInteger("code") == 0) {
+ logger.info("[璇煶瀵硅] 鑷姩鎺ㄦ祦鎴愬姛, device: {}, channel: {}", deviceId, channelId);
+ }
+
+ }
+ }else {
+ // 寮�鍚闊冲璁查�氶亾
+ try {
+ playService.audioBroadcastCmd(device, channelId, 60, (msg)->{
+ logger.info("[璇煶瀵硅] 閫氶亾寤虹珛鎴愬姛, device: {}, channel: {}", deviceId, channelId);
+ });
+ } catch (InvalidArgumentException | ParseException | SipException e) {
+ logger.error("[鍛戒护鍙戦�佸け璐 璇煶瀵硅: {}", e.getMessage());
+ }
+ }
+
+ }
+ }
+ }
+ }
+
+ }else if ("talk".equals(app)){
+ // 璇煶瀵硅鎺ㄦ祦 stream闇�瑕佹弧瓒虫牸寮廳eviceId_channelId
+ if (regist && stream.indexOf("_") > 0) {
+ String[] streamArray = stream.split("_");
+ if (streamArray.length == 2) {
+ String deviceId = streamArray[0];
+ String channelId = streamArray[1];
+ Device device = deviceService.queryDevice(deviceId);
+ if (device != null) {
+ DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId);
+ if (deviceChannel != null) {
+ if (audioBroadcastManager.exit(deviceId, channelId)) {
+ // 鐩存帴鎺ㄦ祦
+ SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(null, null, stream, null);
+ 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);
+ 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;
+ if (sendRtpItem.isTcpActive()) {
+ jsonObject = zlmrtpServerFactory.startSendRtpPassive(mediaInfo, param);
+ } else {
+ param.put("is_udp", is_Udp);
+ param.put("dst_url", sendRtpItem.getIp());
+ param.put("dst_port", sendRtpItem.getPort());
+ jsonObject = zlmrtpServerFactory.startSendRtpStream(mediaInfo, param);
+ }
+ if (jsonObject != null && jsonObject.getInteger("code") == 0) {
+ logger.info("[璇煶瀵硅] 鑷姩鎺ㄦ祦鎴愬姛, device: {}, channel: {}", deviceId, channelId);
+ }
+ }
+ }else {
+ // 寮�鍚闊冲璁查�氶亾
+ MediaServerItem mediaServerForMinimumLoad = mediaServerService.getMediaServerForMinimumLoad();
+ playService.talk(mediaServerForMinimumLoad, device, channelId, (mediaServerItem, jsonObject)->{
+ System.out.println("寮�濮嬫帹娴�");
+ }, eventResult -> {
+ System.out.println(eventResult.msg);
+ }, ()->{
+ System.out.println("瓒呮椂");
+ });
+ }
+
+ }
+ }
+ }
+ }
+
+ }else{
if (!"rtp".equals(app)){
String type = OriginType.values()[item.getOriginType()].getType();
MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
@@ -521,10 +651,23 @@
if (sendRtpItem.getApp().equals(app)) {
String platformId = sendRtpItem.getPlatformId();
ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId);
+ Device device = deviceService.queryDevice(platformId);
try {
- commanderFroPlatform.streamByeCmd(platform, sendRtpItem);
- } catch (SipException | InvalidArgumentException | ParseException e) {
+ if (platform != null) {
+ commanderFroPlatform.streamByeCmd(platform, sendRtpItem);
+ }else {
+ if (sendRtpItem.isOnlyAudio()) {
+ AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(sendRtpItem.getDeviceId(), sendRtpItem.getChannelId());
+ if (device != null && audioBroadcastCatch != null) {
+// cmder.streamByeCmd(device, sendRtpItem.getChannelId(), audioBroadcastCatch.getSipTransactionInfo(), null);
+ }
+ }else {
+ cmder.streamByeCmd(device, sendRtpItem.getChannelId(), stream, sendRtpItem.getCallId());
+ }
+
+ }
+ } catch (SipException | InvalidArgumentException | ParseException | SsrcTransactionNotFoundException e) {
logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 鍙戦�丅YE: {}", e.getMessage());
}
}
--
Gitblit v1.8.0