From b05ddb2003bb8510694d433c33c6ae09ee94e140 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 10 三月 2021 20:43:29 +0800
Subject: [PATCH] Merge pull request #64 from lawrencehj/wvp-28181-2.0
---
src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java | 1
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 4 +-
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java | 50 ++++++++++++------------
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java | 42 +++++++++++++++++++++
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java | 4 ++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java | 2 +
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 6 +-
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java | 11 +++--
8 files changed, 86 insertions(+), 34 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java
index c02b7e1..a52a925 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java
@@ -64,6 +64,7 @@
// 鏈�3娆℃湭鏀跺埌蹇冭烦鍥炲, 璁剧疆骞冲彴鐘舵�佷负绂荤嚎, 寮�濮嬮噸鏂版敞鍐�
logger.warn("鏈�3娆℃湭鏀跺埌蹇冭烦鍥炲,鏍囪璁剧疆骞冲彴鐘舵�佷负绂荤嚎, 骞堕噸鏂版敞鍐� 骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID());
publisher.platformNotRegisterEventPublish(event.getPlatformGbID());
+ parentPlatformCatch.setKeepAliveReply(0);
}else {
// 鍐嶆鍙戦�佸績璺�
String callId = sipCommanderForPlatform.keepalive(parentPlatform);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
index 2d1ca09..b3b2fba 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
@@ -154,6 +154,8 @@
} else if (Request.BYE.equals(method)) {
ByeRequestProcessor processor = new ByeRequestProcessor();
processor.setRequestEvent(evt);
+ processor.setRedisCatchStorage(redisCatchStorage);
+ processor.setZlmrtpServerFactory(zlmrtpServerFactory);
return processor;
} else if (Request.CANCEL.equals(method)) {
CancelRequestProcessor processor = new CancelRequestProcessor();
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 980c856..912189c 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
@@ -893,7 +893,7 @@
catalogXml.append("</Query>\r\n");
String tm = Long.toString(System.currentTimeMillis());
- Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaDeviceInfoBranch", "FromDev" + tm, null);
+ Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "z9hG4bK-ViaDeviceInfo" + tm, "FromDev" + tm, null);
transmitRequest(device, request);
@@ -923,7 +923,7 @@
catalogXml.append("</Query>\r\n");
String tm = Long.toString(System.currentTimeMillis());
- Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaCatalogBranch", "FromCat" + tm, null);
+ Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "z9hG4bK-ViaCatalog" + tm, "FromCat" + tm, null);
transmitRequest(device, request, errorEvent);
} catch (SipException | ParseException | InvalidArgumentException e) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
index ae9dfa7..28761ed 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -118,18 +118,18 @@
try {
StringBuffer keepaliveXml = new StringBuffer(200);
- keepaliveXml.append("<?xml version=\"1.0\" encoding=\"GB2312\" ?>\r\n");
+ keepaliveXml.append("<?xml version=\"1.0\"?>\r\n");//" encoding=\"GB2312\"?>\r\n");
keepaliveXml.append("<Notify>\r\n");
keepaliveXml.append("<CmdType>Keepalive</CmdType>\r\n");
keepaliveXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
- keepaliveXml.append("<DeviceID>" + parentPlatform.getServerGBId() + "</DeviceID>\r\n");
+ keepaliveXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
keepaliveXml.append("<Status>OK</Status>\r\n");
keepaliveXml.append("</Notify>\r\n");
Request request = headerProviderPlarformProvider.createKeetpaliveMessageRequest(
parentPlatform,
keepaliveXml.toString(),
- UUID.randomUUID().toString().replace("-", ""),
+ "z9hG4bK-" + UUID.randomUUID().toString().replace("-", ""),
UUID.randomUUID().toString().replace("-", ""),
null);
transmitRequest(parentPlatform, request);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java
index 7f58de5..ad7b070 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java
@@ -22,12 +22,9 @@
@Component
public class AckRequestProcessor extends SIPRequestAbstractProcessor {
- //@Autowired
private IRedisCatchStorage redisCatchStorage;
- //@Autowired
private ZLMRTPServerFactory zlmrtpServerFactory;
-
/**
* 澶勭悊 ACK璇锋眰
@@ -49,6 +46,8 @@
String is_Udp = sendRtpItem.isTcp() ? "0" : "1";
String deviceId = sendRtpItem.getDeviceId();
StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channelId);
+ sendRtpItem.setStreamId(streamInfo.getStreamId());
+ redisCatchStorage.updateSendRTPSever(sendRtpItem);
System.out.println(platformGbId);
System.out.println(channelId);
Map<String, Object> param = new HashMap<>();
@@ -68,11 +67,16 @@
if (System.currentTimeMillis() - startTime < 30 * 1000) {
if (zlmrtpServerFactory.isRtpReady(streamInfo.getStreamId())) {
rtpPushed = true;
+ System.out.println("宸茶幏鍙栬澶囨帹娴侊紝寮�濮嬪悜涓婄骇鎺ㄦ祦");
zlmrtpServerFactory.startSendRtpStream(param);
} else {
+ System.out.println("绛夊緟璁惧鎺ㄦ祦.......");
Thread.sleep(2000);
continue;
}
+ } else {
+ rtpPushed = true;
+ System.out.println("璁惧鎺ㄦ祦瓒呮椂锛岀粓姝㈠悜涓婄骇鎺ㄦ祦");
}
} catch (InterruptedException e) {
e.printStackTrace();
@@ -108,5 +112,4 @@
public void setZlmrtpServerFactory(ZLMRTPServerFactory zlmrtpServerFactory) {
this.zlmrtpServerFactory = zlmrtpServerFactory;
}
-
}
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 0ba6bd8..a14a4cc 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,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璇锋眰澶勭悊鍣�
@@ -15,6 +22,10 @@
* @date: 2020骞�5鏈�3鏃� 涓嬪崍5:32:05
*/
public class ByeRequestProcessor extends SIPRequestAbstractProcessor {
+
+ private IRedisCatchStorage redisCatchStorage;
+
+ private ZLMRTPServerFactory zlmrtpServerFactory;
/**
* 澶勭悊BYE璇锋眰
@@ -24,6 +35,22 @@
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 @@
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;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
index e3cc8a4..42670a7 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
@@ -123,4 +123,8 @@
public JSONObject startSendRtp(Map<String, Object> param) {
return sendPost("startSendRtp",param);
}
+
+ public JSONObject stopSendRtp(Map<String, Object> param) {
+ return sendPost("stopSendRtp",param);
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
index 819c6a8..00951ba 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
@@ -127,46 +127,46 @@
}
/**
- *
+ * 璋冪敤zlm RESTful API 鈥斺�� startSendRtp
*/
public Boolean startSendRtpStream(Map<String, Object>param) {
Boolean result = false;
JSONObject jsonObject = zlmresTfulUtils.startSendRtp(param);
System.out.println(jsonObject);
- if (jsonObject != null) {
- switch (jsonObject.getInteger("code")){
- case 0:
- result= true;
- logger.error("RTP鎺ㄦ祦璇锋眰鎴愬姛锛屾湰鍦版帹娴佺鍙o細" + jsonObject.getString("local_port"));
- break;
- // case -300: // id宸茬粡瀛樺湪
- // result = false;
- // break;
- // case -400: // 绔彛鍗犵敤
- // result= false;
- // break;
- default:
- logger.error("RTP鎺ㄦ祦澶辫触: " + jsonObject.getString("msg"));
- break;
- }
- }else {
- // 妫�鏌LM鐘舵��
+ if (jsonObject == null) {
logger.error("RTP鎺ㄦ祦澶辫触: 璇锋鏌LM鏈嶅姟");
+ } else if (jsonObject.getInteger("code") == 0) {
+ result= true;
+ logger.error("RTP鎺ㄦ祦璇锋眰鎴愬姛锛屾湰鍦版帹娴佺鍙o細" + jsonObject.getString("local_port"));
+ } else {
+ logger.error("RTP鎺ㄦ祦澶辫触: " + jsonObject.getString("msg"));
}
return result;
}
/**
- *
+ * 鏌ヨ寰呰浆鎺ㄧ殑娴佹槸鍚﹀氨缁�
*/
public Boolean isRtpReady(String streamId) {
JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo("rtp", "rtmp", streamId);
- if (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")) {
- logger.info("璁惧RTP鎺ㄦ祦鎴愬姛");
- return true;
+ return (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online"));
+ }
+
+ /**
+ * 璋冪敤zlm RESTful API 鈥斺�� stopSendRtp
+ */
+ public Boolean stopSendRtpStream(Map<String, Object>param) {
+ Boolean result = false;
+ JSONObject jsonObject = zlmresTfulUtils.stopSendRtp(param);
+ System.out.println(jsonObject);
+ if (jsonObject == null) {
+ logger.error("鍋滄RTP鎺ㄦ祦澶辫触: 璇锋鏌LM鏈嶅姟");
+ } else if (jsonObject.getInteger("code") == 0) {
+ result= true;
+ logger.error("鍋滄RTP鎺ㄦ祦鎴愬姛");
} else {
- logger.info("璁惧RTP鎺ㄦ祦鏈畬鎴�");
- return false;
+ logger.error("鍋滄RTP鎺ㄦ祦澶辫触: " + jsonObject.getString("msg"));
}
+ return result;
}
}
--
Gitblit v1.8.0