From c1145a816399528e81589eef11046d877315ad5e Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 12 十二月 2022 10:28:36 +0800
Subject: [PATCH] 优化级联注册,以及sip日志
---
/dev/null | 107 --------------------------
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 3
src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java | 31 +++++--
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 4
src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java | 10 +-
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java | 31 +++----
src/main/resources/all-application.yml | 6
src/main/java/com/genersoft/iot/vmp/gb28181/conf/DefaultProperties.java | 31 +++++++
8 files changed, 77 insertions(+), 146 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/conf/DefaultProperties.java b/src/main/java/com/genersoft/iot/vmp/gb28181/conf/DefaultProperties.java
index e0691e5..1831f93 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/conf/DefaultProperties.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/conf/DefaultProperties.java
@@ -1,5 +1,9 @@
package com.genersoft.iot.vmp.gb28181.conf;
+import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.cmd.AlarmNotifyMessageHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.Properties;
/**
@@ -12,6 +16,7 @@
Properties properties = new Properties();
properties.setProperty("javax.sip.STACK_NAME", "GB28181_SIP");
properties.setProperty("javax.sip.IP_ADDRESS", ip);
+ // 鍏抽棴鑷姩浼氳瘽
properties.setProperty("javax.sip.AUTOMATIC_DIALOG_SUPPORT", "off");
/**
* 瀹屾暣閰嶇疆鍙傝�� gov.nist.javax.sip.SipStackImpl锛岄渶瑕佷笅杞芥簮鐮�
@@ -26,7 +31,7 @@
// 鎺ユ敹鎵�鏈塶otify璇锋眰锛屽嵆浣挎病鏈夎闃�
properties.setProperty("gov.nist.javax.sip.DELIVER_UNSOLICITED_NOTIFY", "true");
properties.setProperty("gov.nist.javax.sip.AUTOMATIC_DIALOG_ERROR_HANDLING", "false");
- properties.setProperty("gov.nist.javax.sip.CANCEL_CLIENT_TRANSACTION_CHECKED", "false");
+ properties.setProperty("gov.nist.javax.sip.CANCEL_CLIENT_TRANSACTION_CHECKED", "true");
// 涓篲NULL _瀵硅瘽妗嗕紶閫抇缁堟鐨刜浜嬩欢
properties.setProperty("gov.nist.javax.sip.DELIVER_TERMINATED_EVENT_FOR_NULL_DIALOG", "true");
// 浼氳瘽娓呯悊绛栫暐
@@ -35,11 +40,33 @@
properties.setProperty("gov.nist.javax.sip.RELIABLE_CONNECTION_KEEP_ALIVE_TIMEOUT", "60");
// 鑾峰彇瀹為檯鍐呭闀垮害锛屼笉浣跨敤header涓殑闀垮害淇℃伅
properties.setProperty("gov.nist.javax.sip.COMPUTE_CONTENT_LENGTH_FROM_MESSAGE_BODY", "true");
+ // 绾跨▼鍙噸鍏�
+ properties.setProperty("gov.nist.javax.sip.REENTRANT_LISTENER", "true");
+ // 瀹氫箟搴旂敤绋嬪簭鎵撶畻澶氫箙瀹¤涓�娆� SIP 鍫嗘爤锛屼簡瑙e叾鍐呴儴绾跨▼鐨勫仴搴风姸鍐碉紙璇ュ睘鎬ф寚瀹氳繛缁璁′箣闂寸殑鏃堕棿锛堜互姣涓哄崟浣嶏級锛�
+ properties.setProperty("gov.nist.javax.sip.THREAD_AUDIT_INTERVAL_IN_MILLISECS", "30000");
/**
* sip_server_log.log 鍜� sip_debug_log.log ERROR, INFO, WARNING, OFF, DEBUG, TRACE
*/
- properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "ERROR");
+ Logger logger = LoggerFactory.getLogger(AlarmNotifyMessageHandler.class);
+ if (logger.isDebugEnabled()) {
+ System.out.println("DEBUG");
+ properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "DEBUG");
+ }else if (logger.isInfoEnabled()) {
+ System.out.println("INFO1");
+ properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "INFO");
+ }else if (logger.isWarnEnabled()) {
+ System.out.println("WARNING");
+ properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "WARNING");
+ }else if (logger.isErrorEnabled()) {
+ System.out.println("ERROR");
+ properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "ERROR");
+ }else {
+ System.out.println("INFO2");
+ properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "INFO");
+ }
+ logger.info("[SIP鏃ュ織]绾у埆涓�: {}", properties.getProperty("gov.nist.javax.sip.TRACE_LEVEL"));
+
return properties;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/conf/SipLoggerPass.java b/src/main/java/com/genersoft/iot/vmp/gb28181/conf/SipLoggerPass.java
deleted file mode 100644
index 18dd151..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/conf/SipLoggerPass.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.conf;
-
-import gov.nist.core.StackLogger;
-
-import java.util.Properties;
-
-/**
- * sip鏃ュ織鏍煎紡鍖�
- * 鏆備笉浣跨敤
- */
-public class SipLoggerPass implements StackLogger {
-
- @Override
- public void logStackTrace() {
-
- }
-
- @Override
- public void logStackTrace(int traceLevel) {
-
- }
-
- @Override
- public int getLineCount() {
- return 0;
- }
-
- @Override
- public void logException(Throwable ex) {
-
- }
-
- @Override
- public void logDebug(String message) {
-
- }
-
- @Override
- public void logDebug(String message, Exception ex) {
-
- }
-
- @Override
- public void logTrace(String message) {
-
- }
-
- @Override
- public void logFatalError(String message) {
-
- }
-
- @Override
- public void logError(String message) {
-
- }
-
- @Override
- public boolean isLoggingEnabled() {
- return false;
- }
-
- @Override
- public boolean isLoggingEnabled(int logLevel) {
- return false;
- }
-
- @Override
- public void logError(String message, Exception ex) {
-
- }
-
- @Override
- public void logWarning(String string) {
-
- }
-
- @Override
- public void logInfo(String string) {
-
- }
-
- @Override
- public void disableLogging() {
-
- }
-
- @Override
- public void enableLogging() {
-
- }
-
- @Override
- public void setBuildTimeStamp(String buildTimeStamp) {
-
- }
-
- @Override
- public void setStackProperties(Properties stackProperties) {
-
- }
-
- @Override
- public String getLoggerName() {
- return null;
- }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
index 56fdb5b..f3fbbb4 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
@@ -13,7 +13,6 @@
import javax.sip.header.FromHeader;
import javax.sip.header.Header;
import javax.sip.header.UserAgentHeader;
-import javax.sip.header.ViaHeader;
import javax.sip.message.Request;
import java.text.ParseException;
import java.util.ArrayList;
@@ -138,13 +137,12 @@
}else {
// 鍒ゆ柇RPort鏄惁鏀瑰彉锛屾敼鍙樺垯璇存槑璺敱nat淇℃伅鍙樺寲锛屼慨鏀硅澶囦俊鎭�
// 鑾峰彇鍒伴�氫俊鍦板潃绛変俊鎭�
- ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
- remoteAddress = viaHeader.getReceived();
- remotePort = viaHeader.getRPort();
+ remoteAddress = request.getTopmostViaHeader().getReceived();
+ remotePort = request.getTopmostViaHeader().getRPort();
// 瑙f瀽鏈湴鍦板潃鏇夸唬
if (ObjectUtils.isEmpty(remoteAddress) || remotePort == -1) {
- remoteAddress = viaHeader.getHost();
- remotePort = viaHeader.getPort();
+ remoteAddress = request.getTopmostViaHeader().getHost();
+ remotePort = request.getTopmostViaHeader().getPort();
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
index 5c5dcab..f2ae60f 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -424,7 +424,7 @@
logger.info("[ZLM HOOK]娴佹棤浜鸿鐪嬶細{]->{}->{}/{}" + param.getMediaServerId(), param.getSchema(), param.getApp(), param.getStream());
JSONObject ret = new JSONObject();
ret.put("code", 0);
- // 褰曞儚涓嬭浇
+ // 鍥芥爣绫诲瀷鐨勬祦
if ("rtp".equals(param.getApp())){
ret.put("close", userSetting.getStreamOnDemand());
// 鍥芥爣娴侊紝 鐐规挱/褰曞儚鍥炴斁/褰曞儚涓嬭浇
@@ -596,7 +596,7 @@
@PostMapping(value = "/on_send_rtp_stopped", produces = "application/json;charset=UTF-8")
public JSONObject onSendRtpStopped(HttpServletRequest request, @RequestBody OnSendRtpStoppedHookParam param){
- logger.info("[ZLM HOOK] 鍙戦�乺tp琚姩鍏抽棴锛歿}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream());
+ logger.info("[ZLM HOOK] rtp鍙戦�佸叧闂細{}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream());
JSONObject ret = new JSONObject();
ret.put("code", 0);
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
index 0d56fdb..a47e244 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -154,7 +154,8 @@
}
// 鍒锋柊杩囨湡浠诲姟
String registerExpireTaskKey = registerExpireTaskKeyPrefix + device.getDeviceId();
- dynamicTask.startDelay(registerExpireTaskKey, ()-> offline(device.getDeviceId()), device.getExpires() * 1000);
+ // 澧炲姞涓�涓�10绉掔粰璁惧閲嶅彂娑堟伅鐨勬満浼�
+ dynamicTask.startDelay(registerExpireTaskKey, ()-> offline(device.getDeviceId()), (device.getExpires() + 10) * 1000);
}
@Override
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
index fbc507a..136689c 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
@@ -135,14 +135,7 @@
dynamicTask.startCron(registerTaskKey,
// 娉ㄥ唽澶辫触锛堟敞鍐屾垚鍔熸椂鐢辩▼搴忕洿鎺ヨ皟鐢ㄤ簡online鏂规硶锛�
()-> {
- try {
- logger.info("[鍥芥爣绾ц仈] 骞冲彴锛歿}娉ㄥ唽鍗冲皢鍒版湡锛岄噸鏂版敞鍐�", parentPlatform.getServerGBId());
- commanderForPlatform.register(parentPlatform, eventResult -> {
- offline(parentPlatform, false);
- },null);
- } catch (InvalidArgumentException | ParseException | SipException e) {
- logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈瀹氭椂娉ㄥ唽: {}", e.getMessage());
- }
+ registerTask(parentPlatform);
},
(parentPlatform.getExpires() - 10) *1000);
}
@@ -194,6 +187,28 @@
}
}
+ private void registerTask(ParentPlatform parentPlatform){
+ try {
+ // 璁剧疆瓒呮椂閲嶅彂锛� 鍚庣画浠庡簳灞傛敮鎸佹秷鎭噸鍙�
+ String key = KEEPALIVE_KEY_PREFIX + parentPlatform.getServerGBId() + "_timeout";
+ if (dynamicTask.isAlive(key)) {
+ return;
+ }
+ dynamicTask.startDelay(key, ()->{
+ registerTask(parentPlatform);
+ }, 1000);
+ logger.info("[鍥芥爣绾ц仈] 骞冲彴锛歿}娉ㄥ唽鍗冲皢鍒版湡锛岄噸鏂版敞鍐�", parentPlatform.getServerGBId());
+ commanderForPlatform.register(parentPlatform, eventResult -> {
+ dynamicTask.stop(key);
+ offline(parentPlatform, false);
+ },eventResult -> {
+ dynamicTask.stop(key);
+ });
+ } catch (InvalidArgumentException | ParseException | SipException e) {
+ logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈瀹氭椂娉ㄥ唽: {}", e.getMessage());
+ }
+ }
+
@Override
public void offline(ParentPlatform parentPlatform, boolean stopRegister) {
logger.info("[骞冲彴绂荤嚎]锛歿}", parentPlatform.getServerGBId());
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
index 46aa63c..c94dbf2 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
@@ -106,24 +106,21 @@
msg.setData(wvpResult);
resultHolder.invokeResult(msg);
});
-
-
- // TODO 鍦ㄧ偣鎾湭鎴愬姛鐨勬儏鍐典笅鍦ㄦ璋冪敤鎺ュ彛鐐规挱浼氬鑷磋繑鍥炵殑娴佸湴鍧�ip閿欒
- deferredResultEx.setFilter(result1 -> {
- WVPResult<StreamInfo> wvpResult1 = (WVPResult<StreamInfo>)result1;
- WVPResult<StreamContent> resultStream = null;
- if (wvpResult1.getCode() == ErrorCode.SUCCESS.getCode()) {
- StreamInfo data = wvpResult1.getData().clone();
- if (userSetting.getUseSourceIpAsStreamIp()) {
- data.channgeStreamIp(request.getLocalName());
- }
- resultStream = new WVPResult<>();
- resultStream.setCode(wvpResult1.getCode());
- resultStream.setMsg(wvpResult1.getMsg());
- resultStream.setData(new StreamContent(wvpResult1.getData()));
+ // TODO 鍦ㄧ偣鎾湭鎴愬姛鐨勬儏鍐典笅鍦ㄦ璋冪敤鎺ュ彛鐐规挱浼氬鑷磋繑鍥炵殑娴佸湴鍧�ip閿欒
+ deferredResultEx.setFilter(result1 -> {
+ WVPResult<StreamInfo> wvpResult1 = (WVPResult<StreamInfo>)result1;
+ WVPResult<StreamContent> resultStream = new WVPResult<>();
+ resultStream.setCode(wvpResult1.getCode());
+ resultStream.setMsg(wvpResult1.getMsg());
+ if (wvpResult1.getCode() == ErrorCode.SUCCESS.getCode()) {
+ StreamInfo data = wvpResult1.getData().clone();
+ if (userSetting.getUseSourceIpAsStreamIp()) {
+ data.channgeStreamIp(request.getLocalName());
}
- return resultStream;
- });
+ resultStream.setData(new StreamContent(wvpResult1.getData()));
+ }
+ return resultStream;
+ });
// 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ
diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml
index 491544b..1cbfc6e 100644
--- a/src/main/resources/all-application.yml
+++ b/src/main/resources/all-application.yml
@@ -186,7 +186,7 @@
use-pushing-as-status: true
# 浣跨敤鏉ユ簮璇锋眰ip浣滀负streamIp,褰撲笖浠呭綋浣犲彧鏈墇lm鑺傜偣瀹冧笌wvp鍦ㄤ竴璧风殑鎯呭喌涓嬪紑鍚�
use-source-ip-as-stream-ip: true
- # 鎸夐渶鎷夋祦, true锛氭湁浜鸿鐪嬫媺娴侊紝鏃犱汉瑙傜湅閲婃斁锛� false锛氭媺璧峰悗涓嶈嚜鍔ㄩ噴鏀�
+ # 鍥芥爣鐐规挱 鎸夐渶鎷夋祦, true锛氭湁浜鸿鐪嬫媺娴侊紝鏃犱汉瑙傜湅閲婃斁锛� false锛氭媺璧峰悗涓嶈嚜鍔ㄩ噴鏀�
stream-on-demand: true
# 鎺ㄦ祦閴存潈锛� 榛樿寮�鍚�
push-authority: true
@@ -195,8 +195,8 @@
gb-send-stream-strict: false
# 璁惧涓婄嚎鏃舵槸鍚﹁嚜鍔ㄥ悓姝ラ�氶亾
sync-channel-on-device-online: false
- # 璁惧涓婄嚎鏃舵槸鍚﹁嚜鍔ㄥ悓姝ラ�氶亾
- sip-use-source-ip-as-remote-address: true
+ # 鏄惁浣跨敤璁惧鏉ユ簮Ip浣滀负鍥炲IP锛� 涓嶈缃垯涓� false
+ sip-use-source-ip-as-remote-address: false
# 鍏抽棴鍦ㄧ嚎鏂囨。锛堢敓浜х幆澧冨缓璁叧闂級
springdoc:
--
Gitblit v1.8.0