From 10ae1bba597e562a20f44f777ae5afdefb5da6af Mon Sep 17 00:00:00 2001 From: panlinlin <648540858@qq.com> Date: 星期三, 28 四月 2021 15:10:35 +0800 Subject: [PATCH] 增加对zlm使用docker容器的支持 --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java | 83 +++----- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 26 +- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java | 7 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerConfig.java | 15 + src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java | 17 - src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java | 4 pom.xml | 1 src/main/java/com/genersoft/iot/vmp/conf/ApplicationCheckRunner.java | 42 --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerManger.java | 45 ++++ src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java | 3 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java | 6 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 25 - src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 14 src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java | 177 +++++++++++++++++ src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java | 14 src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 8 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 4 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHTTPProxyController.java | 13 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java | 4 src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java | 2 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java | 4 src/main/resources/application-dev.yml | 24 + src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 4 23 files changed, 367 insertions(+), 175 deletions(-) diff --git a/pom.xml b/pom.xml index 7f19522..1b82c43 100644 --- a/pom.xml +++ b/pom.xml @@ -45,6 +45,7 @@ <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format> + <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> <!-- 渚濊禆鐗堟湰 --> <pagehelper.version>5.2.0</pagehelper.version> diff --git a/src/main/java/com/genersoft/iot/vmp/conf/ApplicationCheckRunner.java b/src/main/java/com/genersoft/iot/vmp/conf/ApplicationCheckRunner.java index 108b434..626aff1 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/ApplicationCheckRunner.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/ApplicationCheckRunner.java @@ -2,6 +2,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; @@ -17,46 +18,21 @@ private Logger logger = LoggerFactory.getLogger("ApplicationCheckRunner"); - @Value("${sip.ip}") - private String sipIp; + @Autowired + private MediaConfig mediaConfig; - @Value("${media.ip}") - private String mediaIp; - - @Value("${media.wanIp}") - private String mediaWanIp; - - @Value("${media.hookIp}") - private String mediaHookIp; - - @Value("${media.port}") - private int mediaPort; - - @Value("${media.secret}") - private String mediaSecret; - - @Value("${media.streamNoneReaderDelayMS}") - private String streamNoneReaderDelayMS; - - @Value("${sip.ip}") - private String sipIP; - - @Value("${server.port}") - private String serverPort; - - @Value("${media.autoConfig}") - private boolean autoConfig; - + @Autowired + private SipConfig sipConfig; @Override public void run(String... args) throws Exception { - if (sipIP.equals("localhost") || sipIP.equals("127.0.0.1")) { - logger.error("sip.ip涓嶈兘浣跨敤 {} ,璇蜂娇鐢ㄧ被浼�192.168.1.44杩欐牱鐨勬潵鑷綉鍗$殑IP!!!", sipIP ); + if (sipConfig.getSipIp().equals("localhost") || sipConfig.getSipIp().equals("127.0.0.1")) { + logger.error("sip.ip涓嶈兘浣跨敤 {} ,璇蜂娇鐢ㄧ被浼�192.168.1.44杩欐牱鐨勬潵鑷綉鍗$殑IP!!!", sipConfig.getSipIp() ); System.exit(1); } - if (mediaIp.equals("localhost") || (mediaIp.equals("127.0.0.1") && mediaWanIp == null)) { - logger.warn("mediaIp.ip浣跨敤 {} ,灏嗘棤娉曟敹鍒扮綉缁滃唴鍏朵粬璁惧鐨勬帹娴�!!!", mediaIp ); + if (mediaConfig.getIp().equals("localhost") || (mediaConfig.getIp().equals("127.0.0.1") && mediaConfig.getWanIp() == null)) { + logger.warn("mediaIp.ip浣跨敤 {} ,灏嗘棤娉曟敹鍒扮綉缁滃唴鍏朵粬璁惧鐨勬帹娴�!!!", mediaConfig.getIp() ); } } diff --git a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java new file mode 100644 index 0000000..9d3ed7e --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java @@ -0,0 +1,177 @@ +package com.genersoft.iot.vmp.conf; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Configuration("mediaConfig") +public class MediaConfig { + + @Value("${media.ip}") + private String ip; + + @Value("${media.wanIp}") + private String wanIp; + + @Value("${media.hookIp}") + private String hookIp; + + @Value("${media.httpPort}") + private String httpPort; + + @Value("${media.httpSSlPort}") + private String httpSSlPort; + + @Value("${media.rtmpPort}") + private String rtmpPort; + + @Value("${media.rtmpSSlPort}") + private String rtmpSSlPort; + + @Value("${media.rtpProxyPort}") + private String rtpProxyPort; + + @Value("${media.rtspPort}") + private String rtspPort; + + @Value("${media.rtspSSLPort}") + private String rtspSSLPort; + + @Value("${media.autoConfig}") + private boolean autoConfig; + + @Value("${media.secret}") + private String secret; + + @Value("${media.streamNoneReaderDelayMS}") + private String streamNoneReaderDelayMS; + + @Value("${media.rtp.enable}") + private boolean rtpEnable; + + @Value("${media.rtp.portRange}") + private String rtpPortRange; + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public String getWanIp() { + return wanIp; + } + + public void setWanIp(String wanIp) { + this.wanIp = wanIp; + } + + public String getHookIp() { + return hookIp; + } + + public void setHookIp(String hookIp) { + this.hookIp = hookIp; + } + + public String getHttpPort() { + return httpPort; + } + + public void setHttpPort(String httpPort) { + this.httpPort = httpPort; + } + + public boolean isAutoConfig() { + return autoConfig; + } + + public boolean getAutoConfig() { + return autoConfig; + } + + public void setAutoConfig(boolean autoConfig) { + this.autoConfig = autoConfig; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public String getStreamNoneReaderDelayMS() { + return streamNoneReaderDelayMS; + } + + public void setStreamNoneReaderDelayMS(String streamNoneReaderDelayMS) { + this.streamNoneReaderDelayMS = streamNoneReaderDelayMS; + } + + public boolean isRtpEnable() { + return rtpEnable; + } + + public void setRtpEnable(boolean rtpEnable) { + this.rtpEnable = rtpEnable; + } + + public String getRtpPortRange() { + return rtpPortRange; + } + + public void setRtpPortRange(String rtpPortRange) { + this.rtpPortRange = rtpPortRange; + } + + public String getHttpSSlPort() { + return httpSSlPort; + } + + public void setHttpSSlPort(String httpSSlPort) { + this.httpSSlPort = httpSSlPort; + } + + public String getRtmpPort() { + return rtmpPort; + } + + public void setRtmpPort(String rtmpPort) { + this.rtmpPort = rtmpPort; + } + + public String getRtmpSSlPort() { + return rtmpSSlPort; + } + + public void setRtmpSSlPort(String rtmpSSlPort) { + this.rtmpSSlPort = rtmpSSlPort; + } + + public String getRtpProxyPort() { + return rtpProxyPort; + } + + public void setRtpProxyPort(String rtpProxyPort) { + this.rtpProxyPort = rtpProxyPort; + } + + public String getRtspPort() { + return rtspPort; + } + + public void setRtspPort(String rtspPort) { + this.rtspPort = rtspPort; + } + + public String getRtspSSLPort() { + return rtspSSLPort; + } + + public void setRtspSSLPort(String rtspSSLPort) { + this.rtspSSLPort = rtspSSLPort; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java index c6e77ca..ee6a30e 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java @@ -77,6 +77,7 @@ // 鍙互鐩存帴璁块棶鐨勯潤鎬佹暟鎹� web.ignoring() .antMatchers("/") + .antMatchers("/#/**") .antMatchers("/static/**") .antMatchers("/index.html") .antMatchers("/doc.html") // "/webjars/**", "/swagger-resources/**", "/v3/api-docs/**" @@ -111,7 +112,7 @@ http.headers().contentTypeOptions().disable(); http.authorizeRequests() // 鏀捐鎺ュ彛 - .antMatchers("/#/**", "/api/user/login","/index/hook/**").permitAll() + .antMatchers("/api/user/login","/index/hook/**").permitAll() // 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇� .anyRequest().authenticated() // 寮傚父澶勭悊(鏉冮檺鎷掔粷銆佺櫥褰曞け鏁堢瓑) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java index 0999736..f0680a7 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java @@ -38,7 +38,7 @@ public void onMessage(Message message, byte[] pattern) { // 鑾峰彇澶辨晥鐨刱ey String expiredKey = message.toString(); - logger.info(expiredKey); + logger.debug(expiredKey); if(!expiredKey.startsWith(VideoManagerConstants.PLATFORM_KEEPLIVEKEY_PREFIX)){ logger.debug("鏀跺埌redis杩囨湡鐩戝惉锛屼絾寮�澶翠笉鏄�"+VideoManagerConstants.PLATFORM_KEEPLIVEKEY_PREFIX+"锛屽拷鐣�"); return; 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 dfc6c16..ca85e3c 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 @@ -1,8 +1,6 @@ package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl; import java.text.ParseException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.sip.*; import javax.sip.address.SipURI; @@ -10,11 +8,11 @@ import javax.sip.header.ViaHeader; import javax.sip.message.Request; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; -import com.genersoft.iot.vmp.conf.MediaServerConfig; +import com.genersoft.iot.vmp.conf.MediaConfig; +import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; @@ -82,13 +80,13 @@ @Autowired private ZLMRESTfulUtils zlmresTfulUtils; - @Value("${media.rtp.enable}") - private boolean rtpEnable; + @Autowired + private MediaConfig mediaConfig; - @Value("${media.seniorSdp}") + @Value("${userSettings.seniorSdp}") private boolean seniorSdp; - @Value("${media.autoApplyPlay}") + @Value("${userSettings.autoApplyPlay}") private boolean autoApplyPlay; @Value("${userSettings.waitTrack}") @@ -353,20 +351,20 @@ try { if (device == null) return; String ssrc = streamSession.createPlaySsrc(); - if (rtpEnable) { + if (mediaConfig.isRtpEnable()) { streamId = String.format("gb_play_%s_%s", device.getDeviceId(), channelId); }else { streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase(); } String streamMode = device.getStreamMode().toUpperCase(); - MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); + ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); if (mediaInfo == null) { logger.warn("鐐规挱鏃跺彂鐜癦LM灏氭湭杩炴帴..."); return; } String mediaPort = null; // 浣跨敤鍔ㄦ�乽dp绔彛 - if (rtpEnable) { + if (mediaConfig.isRtpEnable()) { mediaPort = zlmrtpServerFactory.createRTPServer(streamId) + ""; }else { mediaPort = mediaInfo.getRtpProxyPort(); @@ -470,7 +468,7 @@ public void playbackStreamCmd(Device device, String channelId, String startTime, String endTime, ZLMHttpHookSubscribe.Event event , SipSubscribe.Event errorEvent) { try { - MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); + ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); String ssrc = streamSession.createPlayBackSsrc(); String streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase(); // 娣诲姞璁㈤槄 @@ -495,7 +493,7 @@ +DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(endTime) +"\r\n"); String mediaPort = null; // 浣跨敤鍔ㄦ�乽dp绔彛 - if (rtpEnable) { + if (mediaConfig.isRtpEnable()) { mediaPort = zlmrtpServerFactory.createRTPServer(streamId) + ""; }else { mediaPort = mediaInfo.getRtpProxyPort(); @@ -1445,7 +1443,7 @@ @Override public void closeRTPServer(Device device, String channelId) { - if (rtpEnable) { + if (mediaConfig.isRtpEnable()) { String streamId = String.format("gb_play_%s_%s", device.getDeviceId(), channelId); zlmrtpServerFactory.closeRTPServer(streamId); } 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 cb99c3c..c781a09 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 @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl; +import com.genersoft.iot.vmp.conf.MediaConfig; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch; @@ -62,9 +63,6 @@ @Autowired @Qualifier(value="udpSipProvider") private SipProvider udpSipProvider; - - @Value("${media.rtp.enable}") - private boolean rtpEnable; @Override public boolean register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java index 43be89d..f2a2dec 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java @@ -11,7 +11,7 @@ import javax.sip.message.Request; import javax.sip.message.Response; -import com.genersoft.iot.vmp.conf.MediaServerConfig; +import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; @@ -187,7 +187,7 @@ sendRtpItem.setStatus(1); redisCatchStorage.updateSendRTPSever(sendRtpItem); // TODO 娣诲姞瀵箃cp鐨勬敮鎸� - MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); + ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); StringBuffer content = new StringBuffer(200); content.append("v=0\r\n"); content.append("o="+"00000"+" 0 0 IN IP4 "+mediaInfo.getWanIp()+"\r\n"); @@ -246,7 +246,7 @@ sendRtpItem.setStatus(1); redisCatchStorage.updateSendRTPSever(sendRtpItem); // TODO 娣诲姞瀵箃cp鐨勬敮鎸� - MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); + ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); StringBuffer content = new StringBuffer(200); content.append("v=0\r\n"); content.append("o="+"00000"+" 0 0 IN IP4 "+mediaInfo.getWanIp()+"\r\n"); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java index 7ad18c1..a4d7816 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java @@ -17,7 +17,9 @@ import javax.sip.message.Response; import com.genersoft.iot.vmp.gb28181.bean.WvpSipDate; +import gov.nist.javax.sip.RequestEventExt; import gov.nist.javax.sip.header.SIPDateHeader; +import gov.nist.javax.sip.message.SIPRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; @@ -59,7 +61,9 @@ @Override public void process(RequestEvent evt) { try { - logger.info("鏀跺埌娉ㄥ唽璇锋眰锛屽紑濮嬪鐞�"); + RequestEventExt evtExt = (RequestEventExt)evt; + String requestAddress = evtExt.getRemoteIpAddress() + ":" + evtExt.getRemotePort(); + logger.info("[{}] 鏀跺埌娉ㄥ唽璇锋眰锛屽紑濮嬪鐞�", requestAddress); Request request = evt.getRequest(); Response response = null; @@ -78,9 +82,9 @@ if (authorhead == null || !passwordCorrect) { if (authorhead == null) { - logger.info("鏈惡甯︽巿鏉冨ご 鍥炲401"); + logger.info("[{}] 鏈惡甯︽巿鏉冨ご 鍥炲401", requestAddress); } else if (!passwordCorrect) { - logger.info("瀵嗙爜閿欒 鍥炲401"); + logger.info("[{}] 瀵嗙爜閿欒 鍥炲401", requestAddress); } response = getMessageFactory().createResponse(Response.UNAUTHORIZED, request); new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getSipDomain()); @@ -147,7 +151,7 @@ // 淇濆瓨鍒皉edis // 涓嬪彂catelog鏌ヨ鐩綍 if (registerFlag == 1 ) { - logger.info("娉ㄥ唽鎴愬姛! deviceId:" + device.getDeviceId()); + logger.info("[{}] 娉ㄥ唽鎴愬姛! deviceId:" + device.getDeviceId(), requestAddress); // boolean exists = storager.exists(device.getDeviceId()); device.setRegisterTimeMillis(System.currentTimeMillis()); storager.updateDevice(device); @@ -158,7 +162,7 @@ handler.onRegister(device); //} } else if (registerFlag == 2) { - logger.info("娉ㄩ攢鎴愬姛! deviceId:" + device.getDeviceId()); + logger.info("[{}] 娉ㄩ攢鎴愬姛! deviceId:" + device.getDeviceId(), requestAddress); publisher.outlineEventPublish(device.getDeviceId(), VideoManagerConstants.EVENT_OUTLINE_UNREGISTER); } } catch (SipException | InvalidArgumentException | NoSuchAlgorithmException | ParseException e) { diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHTTPProxyController.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHTTPProxyController.java index b7e0e9a..05d10b5 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHTTPProxyController.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHTTPProxyController.java @@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.media.zlm; -import com.genersoft.iot.vmp.conf.MediaServerConfig; +import com.genersoft.iot.vmp.conf.MediaConfig; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -18,14 +18,11 @@ // private final static Logger logger = LoggerFactory.getLogger(ZLMHTTPProxyController.class); - // @Autowired - // private IVideoManagerStorager storager; - @Autowired private IRedisCatchStorage redisCatchStorage; - @Value("${media.port}") - private int mediaHttpPort; + @Autowired + private MediaConfig mediaConfig; @ResponseBody @RequestMapping(value = "/**/**/**", produces = "application/json;charset=UTF-8") @@ -34,10 +31,10 @@ if (redisCatchStorage.getMediaInfo() == null) { return "鏈帴鍏ユ祦濯掍綋"; } - MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); + ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); String requestURI = String.format("http://%s:%s%s?%s&%s", mediaInfo.getLocalIP(), - mediaHttpPort, + mediaConfig.getHttpPort(), request.getRequestURI().replace("/zlm",""), mediaInfo.getHookAdminParams(), request.getQueryString() 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 fe84f70..7fa0a47 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 @@ -6,7 +6,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.genersoft.iot.vmp.common.StreamInfo; -import com.genersoft.iot.vmp.conf.MediaServerConfig; +import com.genersoft.iot.vmp.conf.MediaConfig; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; @@ -53,23 +53,20 @@ @Autowired private IRedisCatchStorage redisCatchStorage; + @Autowired + private ZLMServerManger zlmServerManger; + @Autowired private ZLMMediaListManager zlmMediaListManager; @Autowired private ZLMHttpHookSubscribe subscribe; - @Value("${media.autoApplyPlay}") + @Value("${userSettings.autoApplyPlay}") private boolean autoApplyPlay; - @Value("${media.ip}") - private String mediaIp; - - @Value("${media.wanIp}") - private String mediaWanIp; - - @Value("${media.port}") - private int mediaPort; + @Autowired + private MediaConfig mediaConfig; /** * 娴侀噺缁熻浜嬩欢锛屾挱鏀惧櫒鎴栨帹娴佸櫒鏂紑鏃跺苟涓旇�楃敤娴侀噺瓒呰繃鐗瑰畾闃堝�兼椂浼氳Е鍙戞浜嬩欢锛岄槇鍊奸�氳繃閰嶇疆鏂囦欢general.flowThreshold閰嶇疆锛涙浜嬩欢瀵瑰洖澶嶄笉鏁忔劅銆� @@ -388,12 +385,8 @@ subscribe.response(json); } } - - MediaServerConfig mediaServerConfig = JSON.toJavaObject(json, MediaServerConfig.class); - mediaServerConfig.setWanIp(StringUtils.isEmpty(mediaWanIp)? mediaIp: mediaWanIp); - mediaServerConfig.setLocalIP(mediaIp); - redisCatchStorage.updateMediaInfo(mediaServerConfig); - + ZLMServerConfig ZLMServerConfig = JSON.toJavaObject(json, ZLMServerConfig.class); + zlmServerManger.updateServerCatch(ZLMServerConfig); // 閲嶆柊鍙戣捣浠g悊 JSONObject ret = new JSONObject(); diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java index a50b170..77add28 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java @@ -1,9 +1,7 @@ package com.genersoft.iot.vmp.media.zlm; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.genersoft.iot.vmp.conf.MediaServerConfig; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; import com.genersoft.iot.vmp.gb28181.bean.GbStream; @@ -126,7 +124,7 @@ public void clearAllSessions() { logger.info("娓呯┖鎵�鏈夊浗鏍囩浉鍏崇殑session"); JSONObject allSessionJSON = zlmresTfulUtils.getAllSession(); - MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); + ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); HashSet<String> allLocalPorts = new HashSet(); if (allSessionJSON.getInteger("code") == 0) { JSONArray data = allSessionJSON.getJSONArray("data"); 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 a864f3c..b41ef6d 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 @@ -2,10 +2,13 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.genersoft.iot.vmp.conf.MediaConfig; import okhttp3.*; +import org.checkerframework.checker.units.qual.A; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -20,14 +23,8 @@ private final static Logger logger = LoggerFactory.getLogger(ZLMRESTfulUtils.class); - @Value("${media.ip}") - private String mediaIp; - - @Value("${media.port}") - private int mediaPort; - - @Value("${media.secret}") - private String mediaSecret; + @Autowired + private MediaConfig mediaConfig; public interface RequestCallback{ void run(JSONObject response); @@ -35,12 +32,12 @@ public JSONObject sendPost(String api, Map<String, Object> param, RequestCallback callback) { OkHttpClient client = new OkHttpClient(); - String url = String.format("http://%s:%s/index/api/%s", mediaIp, mediaPort, api); + String url = String.format("http://%s:%s/index/api/%s", mediaConfig.getIp(), mediaConfig.getHttpPort(), api); JSONObject responseJSON = null; logger.debug(url); FormBody.Builder builder = new FormBody.Builder(); - builder.add("secret",mediaSecret); + builder.add("secret",mediaConfig.getSecret()); if (param != null && param.keySet().size() > 0) { for (String key : param.keySet()){ if (param.get(key) != null) { 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 430c690..63102b1 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 @@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.genersoft.iot.vmp.conf.MediaConfig; import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; import com.genersoft.iot.vmp.gb28181.session.SsrcUtil; import org.slf4j.Logger; @@ -18,8 +19,8 @@ private Logger logger = LoggerFactory.getLogger("ZLMRTPServerFactory"); - @Value("${media.rtp.portRange}") - private String portRange; + @Autowired + private MediaConfig mediaConfig; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; @@ -103,7 +104,7 @@ private int getPortFromportRange() { if (currentPort == 0) { - String[] portRangeStrArray = portRange.split(","); + String[] portRangeStrArray = mediaConfig.getRtpPortRange().split(","); portRangeArray[0] = Integer.parseInt(portRangeStrArray[0]); portRangeArray[1] = Integer.parseInt(portRangeStrArray[1]); } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java index 2bbc1be..2570c1b 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java @@ -3,7 +3,8 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.genersoft.iot.vmp.conf.MediaServerConfig; +import com.genersoft.iot.vmp.conf.MediaConfig; +import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; //import com.genersoft.iot.vmp.storager.IVideoManagerStorager; @@ -34,35 +35,19 @@ @Autowired private IRedisCatchStorage redisCatchStorage; - @Value("${media.ip}") - private String mediaIp; + @Autowired + private MediaConfig mediaConfig; - @Value("${media.wanIp}") - private String mediaWanIp; - - @Value("${media.hookIp}") - private String mediaHookIp; - - @Value("${media.port}") - private int mediaPort; - - @Value("${media.secret}") - private String mediaSecret; - - @Value("${media.streamNoneReaderDelayMS}") - private String streamNoneReaderDelayMS; - - @Value("${sip.ip}") - private String sipIP; + @Autowired + private SipConfig sipConfig; @Value("${server.port}") private String serverPort; - @Value("${media.autoConfig}") - private boolean autoConfig; - @Value("${server.ssl.enabled}") private boolean sslEnabled; + + private boolean startGetMedia = false; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; @@ -74,32 +59,37 @@ private ZLMHttpHookSubscribe hookSubscribe; @Autowired + private ZLMServerManger zlmServerManger; + + @Autowired private IStreamProxyService streamProxyService; @Override public void run(String... strings) throws Exception { // 璁㈤槄 zlm鍚姩浜嬩欢 hookSubscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_server_started,null,(response)->{ - MediaServerConfig mediaServerConfig = JSONObject.toJavaObject(response, MediaServerConfig.class); - zLmRunning(mediaServerConfig); + ZLMServerConfig ZLMServerConfig = JSONObject.toJavaObject(response, ZLMServerConfig.class); + zLmRunning(ZLMServerConfig); }); // 鑾峰彇zlm淇℃伅 logger.info("绛夊緟zlm鎺ュ叆..."); - MediaServerConfig mediaServerConfig = getMediaServerConfig(); + startGetMedia = true; + ZLMServerConfig ZLMServerConfig = getMediaServerConfig(); - if (mediaServerConfig != null) { - zLmRunning(mediaServerConfig); + if (ZLMServerConfig != null) { + zLmRunning(ZLMServerConfig); } } - public MediaServerConfig getMediaServerConfig() { + public ZLMServerConfig getMediaServerConfig() { + if (!startGetMedia) return null; JSONObject responseJSON = zlmresTfulUtils.getMediaServerConfig(); - MediaServerConfig mediaServerConfig = null; + ZLMServerConfig ZLMServerConfig = null; if (responseJSON != null) { JSONArray data = responseJSON.getJSONArray("data"); if (data != null && data.size() > 0) { - mediaServerConfig = JSON.parseObject(JSON.toJSONString(data.get(0)), MediaServerConfig.class); + ZLMServerConfig = JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class); } } else { @@ -109,20 +99,18 @@ } catch (InterruptedException e) { e.printStackTrace(); } - mediaServerConfig = getMediaServerConfig(); + ZLMServerConfig = getMediaServerConfig(); } - return mediaServerConfig; + return ZLMServerConfig; } private void saveZLMConfig() { logger.info("璁剧疆zlm..."); - if (StringUtils.isEmpty(mediaHookIp)) { - mediaHookIp = sipIP; - } + if (StringUtils.isEmpty(mediaConfig.getHookIp())) mediaConfig.setHookIp(sipConfig.getSipIp()); String protocol = sslEnabled ? "https" : "http"; - String hookPrex = String.format("%s://%s:%s/index/hook", protocol, mediaHookIp, serverPort); + String hookPrex = String.format("%s://%s:%s/index/hook", protocol, mediaConfig.getHookIp(), serverPort); Map<String, Object> param = new HashMap<>(); - param.put("api.secret",mediaSecret); // -profile:v Baseline + param.put("api.secret",mediaConfig.getSecret()); // -profile:v Baseline param.put("ffmpeg.cmd","%s -fflags nobuffer -rtsp_transport tcp -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s"); param.put("hook.enable","1"); param.put("hook.on_flow_report",""); @@ -139,7 +127,7 @@ param.put("hook.on_stream_none_reader",String.format("%s/on_stream_none_reader", hookPrex)); param.put("hook.on_stream_not_found",String.format("%s/on_stream_not_found", hookPrex)); param.put("hook.timeoutSec","20"); - param.put("general.streamNoneReaderDelayMS",streamNoneReaderDelayMS); + param.put("general.streamNoneReaderDelayMS",mediaConfig.getStreamNoneReaderDelayMS()); JSONObject responseJSON = zlmresTfulUtils.setServerConfig(param); @@ -153,17 +141,12 @@ /** * zlm 杩炴帴鎴愬姛鎴栬�厇lm閲嶅惎鍚� */ - private void zLmRunning(MediaServerConfig mediaServerConfig){ - logger.info( "[ id: " + mediaServerConfig.getGeneralMediaServerId() + "] zlm鎺ュ叆鎴愬姛..."); - if (autoConfig) saveZLMConfig(); - MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); - if (mediaInfo != null && System.currentTimeMillis() - mediaInfo.getUpdateTime() < 50){ - logger.info("[ id: " + mediaServerConfig.getGeneralMediaServerId() + "]zlm鍒氬垰鏇存柊锛屽拷鐣ヨ繖娆℃洿鏂�"); - return; - } - mediaServerConfig.setLocalIP(mediaIp); - mediaServerConfig.setWanIp(StringUtils.isEmpty(mediaWanIp)? mediaIp: mediaWanIp); - redisCatchStorage.updateMediaInfo(mediaServerConfig); + private void zLmRunning(ZLMServerConfig zlmServerConfig){ + logger.info( "[ id: " + zlmServerConfig.getGeneralMediaServerId() + "] zlm鎺ュ叆鎴愬姛..."); + // 鍏抽棴寰幆鑾峰彇zlm閰嶇疆 + startGetMedia = false; + if (mediaConfig.getAutoConfig()) saveZLMConfig(); + zlmServerManger.updateServerCatch(zlmServerConfig); // 娓呯┖鎵�鏈塻ession // zlmMediaListManager.clearAllSessions(); diff --git a/src/main/java/com/genersoft/iot/vmp/conf/MediaServerConfig.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerConfig.java similarity index 97% rename from src/main/java/com/genersoft/iot/vmp/conf/MediaServerConfig.java rename to src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerConfig.java index e9d158c..b20437b 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/MediaServerConfig.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerConfig.java @@ -1,8 +1,8 @@ -package com.genersoft.iot.vmp.conf; +package com.genersoft.iot.vmp.media.zlm; import com.alibaba.fastjson.annotation.JSONField; -public class MediaServerConfig { +public class ZLMServerConfig { @JSONField(name = "api.apiDebug") private String apiDebug; @@ -156,6 +156,9 @@ @JSONField(name = "rtmp.port") private String rtmpPort; + + @JSONField(name = "rtmp.sslport") + private String rtmpSslPort; @JSONField(name = "rtp.audioMtuSize") private String rtpAudioMtuSize; @@ -749,4 +752,12 @@ public void setGeneralMediaServerId(String generalMediaServerId) { this.generalMediaServerId = generalMediaServerId; } + + public String getRtmpSslPort() { + return rtmpSslPort; + } + + public void setRtmpSslPort(String rtmpSslPort) { + this.rtmpSslPort = rtmpSslPort; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerManger.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerManger.java new file mode 100644 index 0000000..e73ee34 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerManger.java @@ -0,0 +1,45 @@ +package com.genersoft.iot.vmp.media.zlm; + +import com.alibaba.fastjson.annotation.JSONField; +import com.genersoft.iot.vmp.conf.MediaConfig; +import com.genersoft.iot.vmp.storager.IRedisCatchStorage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +@Component +public class ZLMServerManger { + + @Autowired + private IRedisCatchStorage redisCatchStorage; + + @Autowired + private MediaConfig mediaConfig; + + public void updateServerCatch(ZLMServerConfig zlmServerConfig) { + + zlmServerConfig.setLocalIP(mediaConfig.getIp()); + zlmServerConfig.setWanIp(StringUtils.isEmpty(mediaConfig.getWanIp())? mediaConfig.getIp(): mediaConfig.getWanIp()); + zlmServerConfig.setHttpPort(mediaConfig.getHttpPort()); + + if(!StringUtils.isEmpty(mediaConfig.getHttpSSlPort())) + zlmServerConfig.setHttpSSLport(mediaConfig.getHttpSSlPort()); + + if(!StringUtils.isEmpty(mediaConfig.getRtspPort())) + zlmServerConfig.setRtspPort(mediaConfig.getRtspPort()); + + if(!StringUtils.isEmpty(mediaConfig.getRtspSSLPort())) + zlmServerConfig.setRtspSSlport(mediaConfig.getRtspSSLPort()); + + if(!StringUtils.isEmpty(mediaConfig.getRtmpPort())) + zlmServerConfig.setRtmpPort(mediaConfig.getRtmpPort()); + + if(!StringUtils.isEmpty(mediaConfig.getRtmpSSlPort())) + zlmServerConfig.setRtmpSslPort(mediaConfig.getRtmpSSlPort()); + + if(!StringUtils.isEmpty(mediaConfig.getRtpProxyPort())) + zlmServerConfig.setRtpProxyPort(mediaConfig.getRtpProxyPort()); + + redisCatchStorage.updateMediaInfo(zlmServerConfig); + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java index 9154c09..ab23a11 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java @@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; -import com.genersoft.iot.vmp.conf.MediaServerConfig; +import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; @@ -28,7 +28,7 @@ @Override public StreamInfo getStreamInfoByAppAndStream(String app, String stream, JSONArray tracks) { - MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); + ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); StreamInfo streamInfoResult = new StreamInfo(); streamInfoResult.setStreamId(stream); streamInfoResult.setApp(app); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java index c6286c5..b27970a 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java @@ -1,7 +1,7 @@ package com.genersoft.iot.vmp.service.impl; import com.alibaba.fastjson.JSONObject; -import com.genersoft.iot.vmp.conf.MediaServerConfig; +import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; @@ -41,7 +41,7 @@ @Override public String save(StreamProxyItem param) { - MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); + ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); String dstUrl = String.format("rtmp://%s:%s/%s/%s", "127.0.0.1", mediaInfo.getRtmpPort(), param.getApp(), param.getStream() ); param.setDst_url(dstUrl); diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java index 978ddc3..be9fdff 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java @@ -1,7 +1,7 @@ package com.genersoft.iot.vmp.storager; import com.genersoft.iot.vmp.common.StreamInfo; -import com.genersoft.iot.vmp.conf.MediaServerConfig; +import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch; import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; @@ -41,16 +41,16 @@ /** * 鏇存柊娴佸獟浣撲俊鎭� - * @param mediaServerConfig + * @param ZLMServerConfig * @return */ - boolean updateMediaInfo(MediaServerConfig mediaServerConfig); + boolean updateMediaInfo(ZLMServerConfig ZLMServerConfig); /** * 鑾峰彇娴佸獟浣撲俊鎭� * @return */ - MediaServerConfig getMediaInfo(); + ZLMServerConfig getMediaInfo(); Map<String, StreamInfo> queryPlayByDeviceId(String deviceId); diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java index 74d6779..0318772 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java @@ -2,7 +2,7 @@ import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.common.VideoManagerConstants; -import com.genersoft.iot.vmp.conf.MediaServerConfig; +import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; @@ -86,13 +86,13 @@ /** * 鏇存柊娴佸獟浣撲俊鎭� - * @param mediaServerConfig + * @param ZLMServerConfig * @return */ @Override - public boolean updateMediaInfo(MediaServerConfig mediaServerConfig) { - mediaServerConfig.setUpdateTime(System.currentTimeMillis()); - return redis.set(VideoManagerConstants.MEDIA_SERVER_PREFIX,mediaServerConfig); + public boolean updateMediaInfo(ZLMServerConfig ZLMServerConfig) { + ZLMServerConfig.setUpdateTime(System.currentTimeMillis()); + return redis.set(VideoManagerConstants.MEDIA_SERVER_PREFIX, ZLMServerConfig); } /** @@ -100,8 +100,8 @@ * @return */ @Override - public MediaServerConfig getMediaInfo() { - return (MediaServerConfig)redis.get(VideoManagerConstants.MEDIA_SERVER_PREFIX); + public ZLMServerConfig getMediaInfo() { + return (ZLMServerConfig)redis.get(VideoManagerConstants.MEDIA_SERVER_PREFIX); } @Override 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 874aa5a..dce0732 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 @@ -1,7 +1,7 @@ package com.genersoft.iot.vmp.vmanager.gb28181.play; import com.genersoft.iot.vmp.common.StreamInfo; -import com.genersoft.iot.vmp.conf.MediaServerConfig; +import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; @@ -162,7 +162,7 @@ logger.warn("瑙嗛杞爜API璋冪敤澶辫触锛�, 瑙嗛娴佸凡鍋滄鎺ㄦ祦!"); return new ResponseEntity<String>("鎺ㄦ祦淇℃伅鍦ㄦ祦濯掍綋涓笉瀛樺湪, 瑙嗛娴佸彲鑳藉凡鍋滄鎺ㄦ祦", HttpStatus.OK); } else { - MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); + ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); String dstUrl = String.format("rtmp://%s:%s/convert/%s", "127.0.0.1", mediaInfo.getRtmpPort(), streamId ); String srcUrl = String.format("rtsp://%s:%s/rtp/%s", "127.0.0.1", mediaInfo.getRtspPort(), streamId); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index cdab711..a0e8cc5 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -67,17 +67,25 @@ # [鍙�塢 zlm鏈嶅姟鍣ㄧ殑hook鎵�浣跨敤鐨処P, 榛樿浣跨敤sip.ip hookIp: # [蹇呴』淇敼] zlm鏈嶅姟鍣ㄧ殑http.port - port: 80 + httpPort: 80 + # [鍙�塢 zlm鏈嶅姟鍣ㄧ殑http.sslport, 缃┖浣跨敤zlm閰嶇疆鏂囦欢閰嶇疆 + httpSSlPort: + # [鍙�塢 zlm鏈嶅姟鍣ㄧ殑rtmp.port, 缃┖浣跨敤zlm閰嶇疆鏂囦欢閰嶇疆 + rtmpPort: + # [鍙�塢 zlm鏈嶅姟鍣ㄧ殑rtmp.sslport, 缃┖浣跨敤zlm閰嶇疆鏂囦欢閰嶇疆 + rtmpSSlPort: + # [鍙�塢 zlm鏈嶅姟鍣ㄧ殑 rtp_proxy.port, 缃┖浣跨敤zlm閰嶇疆鏂囦欢閰嶇疆 + rtpProxyPort: + # [鍙�塢 zlm鏈嶅姟鍣ㄧ殑 rtsp.port, 缃┖浣跨敤zlm閰嶇疆鏂囦欢閰嶇疆 + rtspPort: + # [鍙�塢 zlm鏈嶅姟鍣ㄧ殑 rtsp.sslport, 缃┖浣跨敤zlm閰嶇疆鏂囦欢閰嶇疆 + rtspSSLPort: # [鍙�塢 鏄惁鑷姩閰嶇疆ZLM, 濡傛灉甯屾湜鎵嬪姩閰嶇疆ZLM, 鍙互璁句负false, 涓嶅缓璁柊鎺ヨЕ鐨勭敤鎴蜂慨鏀� autoConfig: true # [鍙�塢 zlm鏈嶅姟鍣ㄧ殑hook.admin_params=secret secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc # [鍙�塢 zlm鏈嶅姟鍣ㄧ殑general.streamNoneReaderDelayMS streamNoneReaderDelayMS: 18000 # 鏃犱汉瑙傜湅澶氫箙鑷姩鍏抽棴娴�, -1琛ㄧず姘镐笉鑷姩鍏抽棴,鍗� 鍏抽棴鎸夐渶鎷夋祦 - # [鍙�塢 鑷姩鐐规挱锛� 浣跨敤鍥哄畾娴佸湴鍧�杩涜鎾斁鏃讹紝濡傛灉鏈偣鎾垯鑷姩杩涜鐐规挱, 闇�瑕乺tp.enable=true - autoApplyPlay: false - # [鍙�塢 閮ㄥ垎璁惧闇�瑕佹墿灞昐DP锛岄渶瑕佹墦寮�姝よ缃� - seniorSdp: false # 鍚敤澶氱鍙fā寮�, 澶氱鍙fā寮忎娇鐢ㄧ鍙e尯鍒嗘瘡璺祦锛屽吋瀹规�ф洿濂姐�� 鍗曠鍙d娇鐢ㄦ祦鐨剆src鍖哄垎锛� 鐐规挱瓒呮椂寤鸿浣跨敤澶氱鍙f祴璇� rtp: # [鍙�塢 鏄惁鍚敤澶氱鍙fā寮�, 寮�鍚悗浼氬湪portRange鑼冨洿鍐呴�夋嫨绔彛鐢ㄤ簬濯掍綋娴佷紶杈� @@ -95,9 +103,13 @@ level: com: genersoft: - iot: debug + iot: info # [鏍规嵁涓氬姟闇�姹傞厤缃甝 userSettings: + # [鍙�塢 鑷姩鐐规挱锛� 浣跨敤鍥哄畾娴佸湴鍧�杩涜鎾斁鏃讹紝濡傛灉鏈偣鎾垯鑷姩杩涜鐐规挱, 闇�瑕乺tp.enable=true + autoApplyPlay: false + # [鍙�塢 閮ㄥ垎璁惧闇�瑕佹墿灞昐DP锛岄渶瑕佹墦寮�姝よ缃� + seniorSdp: false # 淇濆瓨绉诲姩浣嶇疆鍘嗗彶杞ㄨ抗锛歵rue:淇濈暀鍘嗗彶鏁版嵁锛宖alse:浠呬繚鐣欐渶鍚庣殑浣嶇疆(榛樿) savePositionHistory: false # 鐐规挱绛夊緟瓒呮椂鏃堕棿,鍗曚綅锛氭绉� -- Gitblit v1.8.0