Commit 4f26bd71769f6fc0e1e0da17b22d43eaebedbed8

Authored by 648540858
1 parent bd41451d

优化级联语音对讲释放逻辑

src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
... ... @@ -114,14 +114,15 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In
114 114 SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(null, null, null, callIdHeader.getCallId());
115 115  
116 116 if (sendRtpItem != null){
117   - logger.info("[收到bye] 来自平台{}, 停止通道:{}", sendRtpItem.getPlatformId(), sendRtpItem.getChannelId());
  117 + logger.info("[收到bye] 来自{},停止通道:{}, 类型: {}", sendRtpItem.getPlatformId(), sendRtpItem.getChannelId(), sendRtpItem.getPlayType());
  118 +
118 119 String streamId = sendRtpItem.getStream();
119 120 Map<String, Object> param = new HashMap<>();
120 121 param.put("vhost","__defaultVhost__");
121 122 param.put("app",sendRtpItem.getApp());
122 123 param.put("stream",streamId);
123 124 param.put("ssrc",sendRtpItem.getSsrc());
124   - logger.info("[收到bye] 停止向上级推流:{}", streamId);
  125 + logger.info("[收到bye] 停止推流:{}", streamId);
125 126 MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
126 127 redisCatchStorage.deleteSendRTPServer(sendRtpItem.getPlatformId(), sendRtpItem.getChannelId(),
127 128 callIdHeader.getCallId(), null);
... ... @@ -137,6 +138,14 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In
137 138 }else {
138 139 logger.info("[上级平台停止观看] 未找到平台{}的信息,发送redis消息失败", sendRtpItem.getPlatformId());
139 140 }
  141 + }else if (sendRtpItem.getPlayType().equals(InviteStreamType.BROADCAST)
  142 + || sendRtpItem.getPlayType().equals(InviteStreamType.TALK)) {
  143 + AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(sendRtpItem.getDeviceId(), sendRtpItem.getChannelId());
  144 + if (audioBroadcastCatch != null) {
  145 + // 来自上级平台的停止对讲
  146 + logger.info("[停止对讲] 来自上级,平台:{}, 通道:{}", sendRtpItem.getDeviceId(), sendRtpItem.getChannelId());
  147 + audioBroadcastManager.del(sendRtpItem.getDeviceId(), sendRtpItem.getChannelId());
  148 + }
140 149 }
141 150  
142 151 int totalReaderCount = zlmServerFactory.totalReaderCount(mediaInfo, sendRtpItem.getApp(), streamId);
... ...
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
... ... @@ -516,6 +516,15 @@ public class ZLMHttpHookListener {
516 516 sendRtpItem.getCallId(), sendRtpItem.getStream());
517 517 } else {
518 518 cmder.streamByeCmd(device, sendRtpItem.getChannelId(), param.getStream(), sendRtpItem.getCallId());
  519 + if (sendRtpItem.getPlayType().equals(InviteStreamType.BROADCAST)
  520 + || sendRtpItem.getPlayType().equals(InviteStreamType.TALK)) {
  521 + AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(sendRtpItem.getDeviceId(), sendRtpItem.getChannelId());
  522 + if (audioBroadcastCatch != null) {
  523 + // 来自上级平台的停止对讲
  524 + logger.info("[停止对讲] 来自上级,平台:{}, 通道:{}", sendRtpItem.getDeviceId(), sendRtpItem.getChannelId());
  525 + audioBroadcastManager.del(sendRtpItem.getDeviceId(), sendRtpItem.getChannelId());
  526 + }
  527 + }
519 528 }
520 529 } catch (SipException | InvalidArgumentException | ParseException |
521 530 SsrcTransactionNotFoundException e) {
... ...
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
... ... @@ -1069,18 +1069,18 @@ public class PlayServiceImpl implements IPlayService {
1069 1069 }
1070 1070 }
1071 1071 }
1072   - SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(device.getDeviceId(), channelId, null, null);
1073   - if (sendRtpItem != null) {
1074   - MediaServerItem mediaServer = mediaServerService.getOne(sendRtpItem.getMediaServerId());
1075   - Boolean streamReady = zlmServerFactory.isStreamReady(mediaServer, sendRtpItem.getApp(), sendRtpItem.getStream());
1076   - if (streamReady) {
1077   - logger.warn("[语音对讲] 进行中: {}", channelId);
1078   - event.call("语音对讲进行中");
1079   - return false;
1080   - } else {
1081   - stopTalk(device, channelId);
1082   - }
1083   - }
  1072 +// SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(device.getDeviceId(), channelId, null, null);
  1073 +// if (sendRtpItem != null) {
  1074 +// MediaServerItem mediaServer = mediaServerService.getOne(sendRtpItem.getMediaServerId());
  1075 +// Boolean streamReady = zlmServerFactory.isStreamReady(mediaServer, sendRtpItem.getApp(), sendRtpItem.getStream());
  1076 +// if (streamReady) {
  1077 +// logger.warn("[语音对讲] 进行中: {}", channelId);
  1078 +// event.call("语音对讲进行中");
  1079 +// return false;
  1080 +// } else {
  1081 +// stopTalk(device, channelId);
  1082 +// }
  1083 +// }
1084 1084  
1085 1085 // 发送通知
1086 1086 cmder.audioBroadcastCmd(device, channelId, eventResultForOk -> {
... ...