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