From b445128fb5bdc24f6703e7a40e9fd9f40919baf2 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 03 十一月 2021 10:30:42 +0800
Subject: [PATCH] 修复订阅清理请示任务的执行时长

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java |   26 ++++++++++++++++++--------
 1 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
index ef60da6..0d36d52 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -361,7 +361,7 @@
 			//
 			StringBuffer content = new StringBuffer(200);
 			content.append("v=0\r\n");
-			content.append("o="+"00000"+" 0 0 IN IP4 "+ mediaServerItem.getSdpIp() +"\r\n");
+			content.append("o="+ sipConfig.getId()+" 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");
@@ -427,8 +427,8 @@
 				mediaServerService.releaseSsrc(mediaServerItem, ssrcInfo.getSsrc());
 				errorEvent.response(e);
 			}), e ->{
-				streamSession.put(device.getDeviceId(), channelId ,ssrcInfo.getSsrc(), finalStreamId, mediaServerItem.getId(),e.getClientTransaction());
-				streamSession.put(device.getDeviceId(), channelId , e.getDialog());
+				streamSession.put(device.getDeviceId(), channelId ,ssrcInfo.getSsrc(), finalStreamId, mediaServerItem.getId(), ((ResponseEvent)e.event).getClientTransaction());
+				streamSession.put(device.getDeviceId(), channelId , e.dialog);
 			});
 
 			
@@ -535,9 +535,9 @@
 	        Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader, ssrcInfo.getSsrc());
 
 	        transmitRequest(device, request, errorEvent, okEvent -> {
-				Dialog dialog = okEvent.getClientTransaction().getDialog();
-	        	streamSession.put(device.getDeviceId(), channelId, ssrcInfo.getSsrc(), ssrcInfo.getStreamId(), mediaServerItem.getId(), okEvent.getClientTransaction());
-				streamSession.put(device.getDeviceId(), channelId, dialog);
+				ResponseEvent responseEvent = (ResponseEvent) okEvent.event;
+	        	streamSession.put(device.getDeviceId(), channelId, ssrcInfo.getSsrc(), ssrcInfo.getStreamId(), mediaServerItem.getId(), responseEvent.getClientTransaction());
+				streamSession.put(device.getDeviceId(), channelId, okEvent.dialog);
 			});
 		} catch ( SipException | ParseException | InvalidArgumentException e) {
 			e.printStackTrace();
@@ -667,6 +667,10 @@
 			ClientTransaction transaction = streamSession.getTransaction(deviceId, channelId);
 			if (transaction == null) {
 				logger.warn("[ {} -> {}]鍋滄瑙嗛娴佺殑鏃跺�欏彂鐜颁簨鍔″凡涓㈠け", deviceId, channelId);
+				SipSubscribe.EventResult<Object> eventResult = new SipSubscribe.EventResult<>();
+				if (okEvent != null) {
+					okEvent.response(eventResult);
+				}
 				return;
 			}
 			SIPDialog dialog = streamSession.getDialog(deviceId, channelId);
@@ -1506,11 +1510,17 @@
 		CallIdHeader callIdHeader = (CallIdHeader)request.getHeader(CallIdHeader.NAME);
 		// 娣诲姞閿欒璁㈤槄
 		if (errorEvent != null) {
-			sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), errorEvent);
+			sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (eventResult -> {
+				errorEvent.response(eventResult);
+				sipSubscribe.removeErrorSubscribe(eventResult.callId);
+			}));
 		}
 		// 娣诲姞璁㈤槄
 		if (okEvent != null) {
-			sipSubscribe.addOkSubscribe(callIdHeader.getCallId(), okEvent);
+			sipSubscribe.addOkSubscribe(callIdHeader.getCallId(), eventResult ->{
+				okEvent.response(eventResult);
+				sipSubscribe.removeOkSubscribe(eventResult.callId);
+			});
 		}
 
 		clientTransaction.sendRequest();

--
Gitblit v1.8.0