From bea63f67e75ea6c38d946c2ee463260fcf815f87 Mon Sep 17 00:00:00 2001
From: Fang <costa11@qq.com>
Date: 星期一, 07 三月 2022 14:21:29 +0800
Subject: [PATCH] Merge branch '648540858:wvp-28181-2.0' into wvp-28181-2.0

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java |   29 ++++++++++++++++++++++++++---
 1 files changed, 26 insertions(+), 3 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 9cf0d1b..44ae50b 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
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.genersoft.iot.vmp.common.StreamInfo;
+import com.genersoft.iot.vmp.conf.DynamicTask;
 import com.genersoft.iot.vmp.gb28181.bean.*;
 import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
@@ -21,6 +22,7 @@
 import com.genersoft.iot.vmp.service.bean.SSRCInfo;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import com.genersoft.iot.vmp.utils.SerializeUtils;
 import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult;
 import gov.nist.javax.sdp.TimeDescriptionImpl;
 import gov.nist.javax.sdp.fields.TimeField;
@@ -69,6 +71,9 @@
 
 	@Autowired
 	private IRedisCatchStorage  redisCatchStorage;
+
+	@Autowired
+	private DynamicTask dynamicTask;
 
 	@Autowired
 	private SIPCommander cmder;
@@ -261,11 +266,13 @@
 					}
 					sendRtpItem.setCallId(callIdHeader.getCallId());
 					sendRtpItem.setPlay("Play".equals(sessionName));
+					byte[] dialogByteArray = SerializeUtils.serialize(evt.getDialog());
+					sendRtpItem.setDialog(dialogByteArray);
+					byte[] transactionByteArray = SerializeUtils.serialize(evt.getServerTransaction());
+					sendRtpItem.setTransaction(transactionByteArray);
 					// 鍐欏叆redis锛� 瓒呮椂鏃跺洖澶�
 					redisCatchStorage.updateSendRTPSever(sendRtpItem);
 
-					Device finalDevice = device;
-					MediaServerItem finalMediaServerItem = mediaServerItem;
 					Long finalStartTime = startTime;
 					Long finalStopTime = stopTime;
 					ZLMHttpHookSubscribe.Event hookEvent = (mediaServerItemInUSe, responseJSON)->{
@@ -293,7 +300,15 @@
 						content.append("f=\r\n");
 
 						try {
+							// 瓒呮椂鏈敹鍒癆ck搴旇鍥炲bye,褰撳墠绛夊緟鏃堕棿涓�10绉�
+							dynamicTask.startDelay(callIdHeader.getCallId(), ()->{
+								logger.info("Ack 绛夊緟瓒呮椂");
+								mediaServerService.releaseSsrc(mediaServerItemInUSe.getId(), ssrc);
+								// 鍥炲bye
+								cmderFroPlatform.streamByeCmd(platform, callIdHeader.getCallId());
+							}, 60);
 							responseSdpAck(evt, content.toString(), platform);
+
 						} catch (SipException e) {
 							e.printStackTrace();
 						} catch (InvalidArgumentException e) {
@@ -324,6 +339,7 @@
 								if (result.getEvent() != null) {
 									errorEvent.response(result.getEvent());
 								}
+								redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null);
 								try {
 									responseAck(evt, Response.REQUEST_TIMEOUT);
 								} catch (SipException e) {
@@ -347,7 +363,9 @@
 								sendRtpItem.setStreamId(String.format("%s_%s", device.getDeviceId(), channelId));
 							}
 							sendRtpItem.setPlay(false);
-							playService.play(mediaServerItem,device.getDeviceId(), channelId, hookEvent,errorEvent);
+							playService.play(mediaServerItem,device.getDeviceId(), channelId, hookEvent, errorEvent, ()->{
+								redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null);
+							});
 						}else {
 							sendRtpItem.setStreamId(streamInfo.getStream());
 							hookEvent.response(mediaServerItem, null);
@@ -369,6 +387,11 @@
 
 					// 鍐欏叆redis锛� 瓒呮椂鏃跺洖澶�
 					sendRtpItem.setStatus(1);
+					sendRtpItem.setCallId(callIdHeader.getCallId());
+					byte[] dialogByteArray = SerializeUtils.serialize(evt.getDialog());
+					sendRtpItem.setDialog(dialogByteArray);
+					byte[] transactionByteArray = SerializeUtils.serialize(evt.getServerTransaction());
+					sendRtpItem.setTransaction(transactionByteArray);
 					redisCatchStorage.updateSendRTPSever(sendRtpItem);
 					StringBuffer content = new StringBuffer(200);
 					content.append("v=0\r\n");

--
Gitblit v1.8.0