From f5b019e9983b443454547453a96b4e496645437c Mon Sep 17 00:00:00 2001
From: lawrencehj <1934378145@qq.com>
Date: 星期三, 28 七月 2021 16:29:38 +0800
Subject: [PATCH] 更正打字错误
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java | 92 ++++++++++++++++++++++++++++++++++++++--------
1 files changed, 76 insertions(+), 16 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java
index a14a4cc..817b6b7 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java
@@ -1,16 +1,28 @@
package com.genersoft.iot.vmp.gb28181.transmit.request.impl;
+import javax.sip.address.SipURI;
import javax.sip.Dialog;
import javax.sip.DialogState;
import javax.sip.InvalidArgumentException;
import javax.sip.RequestEvent;
import javax.sip.SipException;
+import javax.sip.header.FromHeader;
+import javax.sip.header.HeaderAddress;
+import javax.sip.header.ToHeader;
import javax.sip.message.Response;
+import com.genersoft.iot.vmp.common.StreamInfo;
+import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor;
import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
+import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
+import com.genersoft.iot.vmp.service.IMediaServerService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.text.ParseException;
import java.util.HashMap;
@@ -18,14 +30,22 @@
/**
* @Description: BYE璇锋眰澶勭悊鍣�
- * @author: swwheihei
- * @date: 2020骞�5鏈�3鏃� 涓嬪崍5:32:05
+ * @author: lawrencehj
+ * @date: 2021骞�3鏈�9鏃�
*/
public class ByeRequestProcessor extends SIPRequestAbstractProcessor {
- private IRedisCatchStorage redisCatchStorage;
+ private Logger logger = LoggerFactory.getLogger(ByeRequestProcessor.class);
+
+ private ISIPCommander cmder;
+
+ private IRedisCatchStorage redisCatchStorage;
+
+ private IVideoManagerStorager storager;
private ZLMRTPServerFactory zlmrtpServerFactory;
+
+ private IMediaServerService mediaServerService;
/**
* 澶勭悊BYE璇锋眰
@@ -38,18 +58,36 @@
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("@"));
+ String platformGbId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser();
+ String channelId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser();
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);
+ logger.info("鏀跺埌bye, [{}/{}]", platformGbId, channelId);
+ if (sendRtpItem != null){
+ String streamId = sendRtpItem.getStreamId();
+ Map<String, Object> param = new HashMap<>();
+ param.put("vhost","__defaultVhost__");
+ param.put("app",sendRtpItem.getApp());
+ param.put("stream",streamId);
+ param.put("ssrc",sendRtpItem.getSsrc());
+ logger.info("鍋滄鍚戜笂绾ф帹娴侊細" + streamId);
+ MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
+ zlmrtpServerFactory.stopSendRtpStream(mediaInfo, param);
+ redisCatchStorage.deleteSendRTPServer(platformGbId, channelId);
+ if (zlmrtpServerFactory.totalReaderCount(mediaInfo, sendRtpItem.getApp(), streamId) == 0) {
+ logger.info(streamId + "鏃犲叾瀹冭鐪嬭�咃紝閫氱煡璁惧鍋滄鎺ㄦ祦");
+ cmder.streamByeCmd(sendRtpItem.getDeviceId(), channelId);
+ }
+ }
+ // 鍙兘鏄澶囦富鍔ㄥ仠姝�
+ Device device = storager.queryVideoDeviceByChannelId(platformGbId);
+ if (device != null) {
+ StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(device.getDeviceId(), channelId);
+ if (streamInfo != null) {
+ redisCatchStorage.stopPlay(streamInfo);
+ }
+ storager.stopPlay(device.getDeviceId(), channelId);
+ mediaServerService.closeRTPServer(device, channelId);
+ }
}
} catch (SipException e) {
e.printStackTrace();
@@ -58,8 +96,6 @@
} catch (ParseException e) {
e.printStackTrace();
}
- // TODO 浼樺厛绾�99 Bye Request娑堟伅瀹炵幇锛屾娑堟伅涓�鑸负绾ц仈娑堟伅锛屼笂绾х粰涓嬬骇鍙戦�佽棰戝仠姝㈡寚浠�
-
}
/***
@@ -89,4 +125,28 @@
public void setZlmrtpServerFactory(ZLMRTPServerFactory zlmrtpServerFactory) {
this.zlmrtpServerFactory = zlmrtpServerFactory;
}
+
+ public ISIPCommander getSIPCommander() {
+ return cmder;
+ }
+
+ public void setSIPCommander(ISIPCommander cmder) {
+ this.cmder = cmder;
+ }
+
+ public IMediaServerService getMediaServerService() {
+ return mediaServerService;
+ }
+
+ public void setMediaServerService(IMediaServerService mediaServerService) {
+ this.mediaServerService = mediaServerService;
+ }
+
+ public IVideoManagerStorager getStorager() {
+ return storager;
+ }
+
+ public void setStorager(IVideoManagerStorager storager) {
+ this.storager = storager;
+ }
}
--
Gitblit v1.8.0