| 
					
				 | 
			
			
				@@ -1,13 +1,20 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.genersoft.iot.vmp.gb28181.transmit.request.impl;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.sip.Dialog;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.sip.DialogState;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.sip.InvalidArgumentException;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.sip.RequestEvent;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.sip.SipException;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.sip.message.Response;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.text.ParseException;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.HashMap;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Map;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /**    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @Description: BYE请求处理器
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -16,6 +23,10 @@ import java.text.ParseException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class ByeRequestProcessor extends SIPRequestAbstractProcessor {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IRedisCatchStorage redisCatchStorage;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private ZLMRTPServerFactory zlmrtpServerFactory;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	/**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * 处理BYE请求
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * @param evt
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -24,6 +35,22 @@ public class ByeRequestProcessor extends SIPRequestAbstractProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public void process(RequestEvent evt) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			responseAck(evt);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Dialog dialog = evt.getDialog();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (dialog == null) return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (dialog.getState().equals(DialogState.TERMINATED)) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				String remoteUri = dialog.getRemoteParty().getURI().toString();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				String localUri = dialog.getLocalParty().getURI().toString();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				String platformGbId = remoteUri.substring(remoteUri.indexOf(":") + 1, remoteUri.indexOf("@"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				String channelId = localUri.substring(remoteUri.indexOf(":") + 1, remoteUri.indexOf("@"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				SendRtpItem sendRtpItem =  redisCatchStorage.querySendRTPServer(platformGbId, channelId);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				String streamId = sendRtpItem.getStreamId();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				Map<String, Object> param = new HashMap<>();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				param.put("vhost","__defaultVhost__");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				param.put("app","rtp");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				param.put("stream",streamId);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				System.out.println("停止向上级推流:" + streamId);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				zlmrtpServerFactory.stopSendRtpStream(param);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} catch (SipException e) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			e.printStackTrace();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} catch (InvalidArgumentException e) {
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -47,4 +74,19 @@ public class ByeRequestProcessor extends SIPRequestAbstractProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		getServerTransaction(evt).sendResponse(response);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public IRedisCatchStorage getRedisCatchStorage() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return redisCatchStorage;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void setRedisCatchStorage(IRedisCatchStorage redisCatchStorage) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.redisCatchStorage = redisCatchStorage;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public ZLMRTPServerFactory getZlmrtpServerFactory() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return zlmrtpServerFactory;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void setZlmrtpServerFactory(ZLMRTPServerFactory zlmrtpServerFactory) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.zlmrtpServerFactory = zlmrtpServerFactory;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }
 
			 |