From a9bdb0a706e10d2dffb50ae5a8086dd744bbd976 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期二, 10 五月 2022 17:45:07 +0800
Subject: [PATCH] 优化语音广播流程

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java |   64 ++++++++++++++++++--------------
 1 files changed, 36 insertions(+), 28 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
index dc77afc..e3a9b27 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -713,6 +713,7 @@
 				String waiteStreamTimeoutTaskKey = "waite-stream-" + device.getDeviceId() + audioBroadcastCatch.getChannelId();
 				dynamicTask.startDelay(waiteStreamTimeoutTaskKey, ()->{
 					logger.info("绛夊緟鎺ㄦ祦瓒呮椂: {}/{}", app, stream);
+					subscribe.removeSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey);
 					playService.stopAudioBroadcast(device.getDeviceId(), audioBroadcastCatch.getChannelId());
 					// 鍙戦�乥ye
 					try {
@@ -728,35 +729,42 @@
 
 				subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey,
 						(MediaServerItem mediaServerItemInUse, JSONObject json)->{
-							sendRtpItem.setStatus(2);
-							dynamicTask.stop(waiteStreamTimeoutTaskKey);
-							redisCatchStorage.updateSendRTPSever(sendRtpItem);
-							StringBuffer content = new StringBuffer(200);
-							content.append("v=0\r\n");
-							content.append("o="+ audioBroadcastCatch.getChannelId() +" 0 0 IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
-							content.append("s=Play\r\n");
-							content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
-							content.append("t=0 0\r\n");
-							content.append("m=video "+ sendRtpItem.getLocalPort()+" RTP/AVP 8\r\n");
-							content.append("a=sendonly\r\n");
-							content.append("a=rtpmap:8 PCMA/8000\r\n");
-							content.append("y="+ finalSsrc + "\r\n");
-							content.append("f=v/////a/1/8/1\r\n");
+					logger.info("鏀跺埌璇煶瀵硅鎺ㄦ祦");
+					try {
+						sendRtpItem.setStatus(2);
+						redisCatchStorage.updateSendRTPSever(sendRtpItem);
+						StringBuffer content = new StringBuffer(200);
+						content.append("v=0\r\n");
+						content.append("o="+ config.getId() +" "+ sdp.getOrigin().getSessionId() +" " + sdp.getOrigin().getSessionVersion()  + " IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
+						content.append("s=Play\r\n");
+						content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
+						content.append("t=0 0\r\n");
+						content.append("m=audio "+ sendRtpItem.getLocalPort()+" RTP/AVP 8\r\n");
+						content.append("a=sendonly\r\n");
+						content.append("a=rtpmap:8 PCMA/8000\r\n");
+						content.append("y="+ finalSsrc + "\r\n");
+						content.append("f=v/////a/1/8/1\r\n");
 
-							ParentPlatform parentPlatform = new ParentPlatform();
-							parentPlatform.setServerIP(device.getIp());
-							parentPlatform.setServerPort(device.getPort());
-							parentPlatform.setServerGBId(device.getDeviceId());
-							try {
-								responseSdpAck(evt, content.toString(), parentPlatform);
-							} catch (SipException e) {
-								throw new RuntimeException(e);
-							} catch (InvalidArgumentException e) {
-								throw new RuntimeException(e);
-							} catch (ParseException e) {
-								throw new RuntimeException(e);
-							}
-						});
+						ParentPlatform parentPlatform = new ParentPlatform();
+						parentPlatform.setServerIP(device.getIp());
+						parentPlatform.setServerPort(device.getPort());
+						parentPlatform.setServerGBId(device.getDeviceId());
+
+						responseSdpAck(evt, content.toString(), parentPlatform);
+						Dialog dialog = evt.getDialog();
+						audioBroadcastCatch.setDialog((SIPDialog) dialog);
+						audioBroadcastCatch.setRequest((SIPRequest) request);
+						audioBroadcastManager.update(audioBroadcastCatch);
+					} catch (SipException e) {
+						throw new RuntimeException(e);
+					} catch (InvalidArgumentException e) {
+						throw new RuntimeException(e);
+					} catch (ParseException e) {
+						throw new RuntimeException(e);
+					} catch (SdpParseException e) {
+						throw new RuntimeException(e);
+					}
+				});
 			}
 			String key = DeferredResultHolder.CALLBACK_CMD_BROADCAST + device.getDeviceId();
 			WVPResult<AudioBroadcastResult> wvpResult = new WVPResult<>();

--
Gitblit v1.8.0