Commit 0faa5936584c7e816034db997017d90648a4ada6
1 parent
b24be124
规范配置文件,添加接口鉴权的例外接口配置
Showing
10 changed files
with
237 additions
and
90 deletions
Too many changes to show.
To preserve performance only 10 of 11 files are displayed.
pom.xml
| ... | ... | @@ -66,6 +66,11 @@ |
| 66 | 66 | <artifactId>spring-boot-starter-web</artifactId> |
| 67 | 67 | </dependency> |
| 68 | 68 | <dependency> |
| 69 | + <groupId>org.springframework.boot</groupId> | |
| 70 | + <artifactId>spring-boot-configuration-processor</artifactId> | |
| 71 | + <optional>true</optional> | |
| 72 | + </dependency> | |
| 73 | + <dependency> | |
| 69 | 74 | <groupId>org.mybatis.spring.boot</groupId> |
| 70 | 75 | <artifactId>mybatis-spring-boot-starter</artifactId> |
| 71 | 76 | <version>2.1.4</version> | ... | ... |
src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java
| ... | ... | @@ -10,55 +10,55 @@ public class MediaConfig { |
| 10 | 10 | @Value("${media.ip}") |
| 11 | 11 | private String ip; |
| 12 | 12 | |
| 13 | - @Value("${media.hookIp:${sip.ip}}") | |
| 13 | + @Value("${media.hook-ip:${sip.ip}}") | |
| 14 | 14 | private String hookIp; |
| 15 | 15 | |
| 16 | 16 | @Value("${sip.ip}") |
| 17 | 17 | private String sipIp; |
| 18 | 18 | |
| 19 | - @Value("${media.sdpIp:${media.ip}}") | |
| 19 | + @Value("${media.sdp-ip:${media.ip}}") | |
| 20 | 20 | private String sdpIp; |
| 21 | 21 | |
| 22 | - @Value("${media.streamIp:${media.ip}}") | |
| 22 | + @Value("${media.stream-ip:${media.ip}}") | |
| 23 | 23 | private String streamIp; |
| 24 | 24 | |
| 25 | - @Value("${media.httpPort}") | |
| 25 | + @Value("${media.http-port}") | |
| 26 | 26 | private Integer httpPort; |
| 27 | 27 | |
| 28 | - @Value("${media.httpSSlPort:}") | |
| 28 | + @Value("${media.http-ssl-port:}") | |
| 29 | 29 | private Integer httpSSlPort; |
| 30 | 30 | |
| 31 | - @Value("${media.rtmpPort:}") | |
| 31 | + @Value("${media.rtmp-port:}") | |
| 32 | 32 | private Integer rtmpPort; |
| 33 | 33 | |
| 34 | - @Value("${media.rtmpSSlPort:}") | |
| 34 | + @Value("${media.rtmp-ssl-port:}") | |
| 35 | 35 | private Integer rtmpSSlPort; |
| 36 | 36 | |
| 37 | - @Value("${media.rtpProxyPort:}") | |
| 37 | + @Value("${media.rtp-proxy-port:}") | |
| 38 | 38 | private Integer rtpProxyPort; |
| 39 | 39 | |
| 40 | - @Value("${media.rtspPort:}") | |
| 40 | + @Value("${media.rtsp-port:}") | |
| 41 | 41 | private Integer rtspPort; |
| 42 | 42 | |
| 43 | - @Value("${media.rtspSSLPort:}") | |
| 43 | + @Value("${media.rtsp-ssl-port:}") | |
| 44 | 44 | private Integer rtspSSLPort; |
| 45 | 45 | |
| 46 | - @Value("${media.autoConfig:true}") | |
| 46 | + @Value("${media.auto-config:true}") | |
| 47 | 47 | private boolean autoConfig; |
| 48 | 48 | |
| 49 | 49 | @Value("${media.secret}") |
| 50 | 50 | private String secret; |
| 51 | 51 | |
| 52 | - @Value("${media.streamNoneReaderDelayMS:18000}") | |
| 52 | + @Value("${media.stream-none-reader-delay-ms:18000}") | |
| 53 | 53 | private String streamNoneReaderDelayMS; |
| 54 | 54 | |
| 55 | 55 | @Value("${media.rtp.enable}") |
| 56 | 56 | private boolean rtpEnable; |
| 57 | 57 | |
| 58 | - @Value("${media.rtp.portRange}") | |
| 58 | + @Value("${media.rtp.port-range}") | |
| 59 | 59 | private String rtpPortRange; |
| 60 | 60 | |
| 61 | - @Value("${media.recordAssistPort}") | |
| 61 | + @Value("${media.record-assist-port}") | |
| 62 | 62 | private Integer recordAssistPort; |
| 63 | 63 | |
| 64 | 64 | public String getIp() { | ... | ... |
src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java
| ... | ... | @@ -13,7 +13,7 @@ public class SipConfig { |
| 13 | 13 | /** |
| 14 | 14 | * 默认使用sip.ip |
| 15 | 15 | */ |
| 16 | - @Value("${sip.monitorIp:0.0.0.0}") | |
| 16 | + @Value("${sip.monitor-ip:0.0.0.0}") | |
| 17 | 17 | private String monitorIp; |
| 18 | 18 | |
| 19 | 19 | @Value("${sip.port}") |
| ... | ... | @@ -31,10 +31,10 @@ public class SipConfig { |
| 31 | 31 | @Value("${sip.ptz.speed:50}") |
| 32 | 32 | Integer speed; |
| 33 | 33 | |
| 34 | - @Value("${sip.keepaliveTimeOut:180}") | |
| 34 | + @Value("${sip.keepalive-timeout:180}") | |
| 35 | 35 | Integer keepaliveTimeOut; |
| 36 | 36 | |
| 37 | - @Value("${sip.registerTimeInterval:60}") | |
| 37 | + @Value("${sip.register-time-interval:60}") | |
| 38 | 38 | Integer registerTimeInterval; |
| 39 | 39 | |
| 40 | 40 | public String getMonitorIp() { | ... | ... |
src/main/java/com/genersoft/iot/vmp/conf/UserSetup.java
| 1 | 1 | package com.genersoft.iot.vmp.conf; |
| 2 | 2 | |
| 3 | 3 | import org.springframework.beans.factory.annotation.Value; |
| 4 | +import org.springframework.boot.context.properties.ConfigurationProperties; | |
| 4 | 5 | import org.springframework.context.annotation.Configuration; |
| 5 | - | |
| 6 | -@Configuration("userSetup") | |
| 6 | +import org.springframework.stereotype.Component; | |
| 7 | + | |
| 8 | +import java.util.ArrayList; | |
| 9 | +import java.util.List; | |
| 10 | + | |
| 11 | +//@Configuration("userSetup") | |
| 12 | +//public class UserSetup { | |
| 13 | +// @Value("${userSettings.savePositionHistory:false}") | |
| 14 | +// boolean savePositionHistory; | |
| 15 | +// | |
| 16 | +// @Value("${userSettings.autoApplyPlay}") | |
| 17 | +// private boolean autoApplyPlay; | |
| 18 | +// | |
| 19 | +// @Value("${userSettings.seniorSdp:false}") | |
| 20 | +// private boolean seniorSdp; | |
| 21 | +// | |
| 22 | +// @Value("${userSettings.playTimeout:18000}") | |
| 23 | +// private long playTimeout; | |
| 24 | +// | |
| 25 | +// @Value("${userSettings.waitTrack:false}") | |
| 26 | +// private boolean waitTrack; | |
| 27 | +// | |
| 28 | +// @Value("${userSettings.interfaceAuthentication}") | |
| 29 | +// private boolean interfaceAuthentication; | |
| 30 | +// | |
| 31 | +// @Value("${userSettings.recordPushLive}") | |
| 32 | +// private boolean recordPushLive; | |
| 33 | +// | |
| 34 | +// @Value("${userSettings.interfaceAuthenticationExcludes:}") | |
| 35 | +// private String interfaceAuthenticationExcludes; | |
| 36 | +// | |
| 37 | +// public boolean getSavePositionHistory() { | |
| 38 | +// return savePositionHistory; | |
| 39 | +// } | |
| 40 | +// | |
| 41 | +// public boolean isSavePositionHistory() { | |
| 42 | +// return savePositionHistory; | |
| 43 | +// } | |
| 44 | +// | |
| 45 | +// public boolean isAutoApplyPlay() { | |
| 46 | +// return autoApplyPlay; | |
| 47 | +// } | |
| 48 | +// | |
| 49 | +// public boolean isSeniorSdp() { | |
| 50 | +// return seniorSdp; | |
| 51 | +// } | |
| 52 | +// | |
| 53 | +// public long getPlayTimeout() { | |
| 54 | +// return playTimeout; | |
| 55 | +// } | |
| 56 | +// | |
| 57 | +// public boolean isWaitTrack() { | |
| 58 | +// return waitTrack; | |
| 59 | +// } | |
| 60 | +// | |
| 61 | +// public boolean isInterfaceAuthentication() { | |
| 62 | +// return interfaceAuthentication; | |
| 63 | +// } | |
| 64 | +// | |
| 65 | +// public boolean isRecordPushLive() { | |
| 66 | +// return recordPushLive; | |
| 67 | +// } | |
| 68 | +// | |
| 69 | +// public String getInterfaceAuthenticationExcludes() { | |
| 70 | +// return interfaceAuthenticationExcludes; | |
| 71 | +// } | |
| 72 | +//} | |
| 73 | + | |
| 74 | + | |
| 75 | +@Component | |
| 76 | +@ConfigurationProperties(prefix = "user-settings", ignoreInvalidFields = true) | |
| 7 | 77 | public class UserSetup { |
| 8 | - @Value("${userSettings.savePositionHistory:false}") | |
| 9 | - boolean savePositionHistory; | |
| 10 | 78 | |
| 11 | - @Value("${userSettings.autoApplyPlay}") | |
| 12 | - private boolean autoApplyPlay; | |
| 79 | + private Boolean savePositionHistory = Boolean.FALSE; | |
| 80 | + | |
| 81 | + private Boolean autoApplyPlay = Boolean.FALSE; | |
| 82 | + | |
| 83 | + private Boolean seniorSdp = Boolean.FALSE; | |
| 13 | 84 | |
| 14 | - @Value("${userSettings.seniorSdp:false}") | |
| 15 | - private boolean seniorSdp; | |
| 85 | + private Long playTimeout = 18000L; | |
| 16 | 86 | |
| 17 | - @Value("${userSettings.playTimeout:18000}") | |
| 18 | - private long playTimeout; | |
| 87 | + private Boolean waitTrack = Boolean.FALSE; | |
| 19 | 88 | |
| 20 | - @Value("${userSettings.waitTrack:false}") | |
| 21 | - private boolean waitTrack; | |
| 89 | + private Boolean interfaceAuthentication = Boolean.TRUE; | |
| 22 | 90 | |
| 23 | - @Value("${userSettings.interfaceAuthentication}") | |
| 24 | - private boolean interfaceAuthentication; | |
| 91 | + private Boolean recordPushLive = Boolean.FALSE; | |
| 25 | 92 | |
| 26 | - @Value("${userSettings.recordPushLive}") | |
| 27 | - private boolean recordPushLive; | |
| 93 | + private List<String> interfaceAuthenticationExcludes = new ArrayList<>(); | |
| 28 | 94 | |
| 29 | - public boolean getSavePositionHistory() { | |
| 95 | + public Boolean getSavePositionHistory() { | |
| 30 | 96 | return savePositionHistory; |
| 31 | 97 | } |
| 32 | 98 | |
| 33 | - public boolean isSavePositionHistory() { | |
| 99 | + public Boolean isSavePositionHistory() { | |
| 34 | 100 | return savePositionHistory; |
| 35 | 101 | } |
| 36 | 102 | |
| 37 | - public boolean isAutoApplyPlay() { | |
| 103 | + public Boolean isAutoApplyPlay() { | |
| 38 | 104 | return autoApplyPlay; |
| 39 | 105 | } |
| 40 | 106 | |
| 41 | - public boolean isSeniorSdp() { | |
| 107 | + public Boolean isSeniorSdp() { | |
| 42 | 108 | return seniorSdp; |
| 43 | 109 | } |
| 44 | 110 | |
| 45 | - public long getPlayTimeout() { | |
| 111 | + public Long getPlayTimeout() { | |
| 46 | 112 | return playTimeout; |
| 47 | 113 | } |
| 48 | 114 | |
| 49 | - public boolean isWaitTrack() { | |
| 115 | + public Boolean isWaitTrack() { | |
| 50 | 116 | return waitTrack; |
| 51 | 117 | } |
| 52 | 118 | |
| 53 | - public boolean isInterfaceAuthentication() { | |
| 119 | + public Boolean isInterfaceAuthentication() { | |
| 54 | 120 | return interfaceAuthentication; |
| 55 | 121 | } |
| 56 | 122 | |
| 57 | - public boolean isRecordPushLive() { | |
| 123 | + public Boolean isRecordPushLive() { | |
| 58 | 124 | return recordPushLive; |
| 59 | 125 | } |
| 126 | + | |
| 127 | + public List<String> getInterfaceAuthenticationExcludes() { | |
| 128 | + return interfaceAuthenticationExcludes; | |
| 129 | + } | |
| 60 | 130 | } | ... | ... |
src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java
| ... | ... | @@ -14,6 +14,8 @@ import org.springframework.security.config.annotation.web.configuration.EnableWe |
| 14 | 14 | import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; |
| 15 | 15 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; |
| 16 | 16 | |
| 17 | +import java.util.List; | |
| 18 | + | |
| 17 | 19 | /** |
| 18 | 20 | * 配置Spring Security |
| 19 | 21 | */ |
| ... | ... | @@ -85,6 +87,11 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { |
| 85 | 87 | .antMatchers("/swagger-resources/**") |
| 86 | 88 | .antMatchers("/v3/api-docs/**") |
| 87 | 89 | .antMatchers("/js/**"); |
| 90 | + List<String> interfaceAuthenticationExcludes = userSetup.getInterfaceAuthenticationExcludes(); | |
| 91 | + System.out.println(interfaceAuthenticationExcludes.size()); | |
| 92 | + for (String interfaceAuthenticationExclude : interfaceAuthenticationExcludes) { | |
| 93 | + web.ignoring().antMatchers(interfaceAuthenticationExclude); | |
| 94 | + } | |
| 88 | 95 | } |
| 89 | 96 | } |
| 90 | 97 | ... | ... |
src/main/java/com/genersoft/iot/vmp/service/IMediaService.java
| ... | ... | @@ -24,4 +24,19 @@ public interface IMediaService { |
| 24 | 24 | */ |
| 25 | 25 | StreamInfo getStreamInfoByAppAndStream(String app, String stream, JSONArray tracks); |
| 26 | 26 | |
| 27 | + /** | |
| 28 | + * 根据应用名和流ID获取播放地址, 只是地址拼接,返回的ip使用远程访问ip,适用与zlm与wvp在一台主机的情况 | |
| 29 | + * @param app | |
| 30 | + * @param stream | |
| 31 | + * @return | |
| 32 | + */ | |
| 33 | + StreamInfo getStreamInfoByAppAndStream(String app, String stream, JSONArray tracks, String addr); | |
| 34 | + | |
| 35 | + /** | |
| 36 | + * 根据应用名和流ID获取播放地址, 通过zlm接口检查是否存在, 返回的ip使用远程访问ip,适用与zlm与wvp在一台主机的情况 | |
| 37 | + * @param app | |
| 38 | + * @param stream | |
| 39 | + * @return | |
| 40 | + */ | |
| 41 | + StreamInfo getStreamInfoByAppAndStreamWithCheck(String app, String stream, String addr); | |
| 27 | 42 | } | ... | ... |
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
| ... | ... | @@ -28,27 +28,40 @@ public class MediaServiceImpl implements IMediaService { |
| 28 | 28 | |
| 29 | 29 | @Override |
| 30 | 30 | public StreamInfo getStreamInfoByAppAndStream(String app, String stream, JSONArray tracks) { |
| 31 | + return getStreamInfoByAppAndStream(app, stream, tracks, null); | |
| 32 | + } | |
| 33 | + | |
| 34 | + @Override | |
| 35 | + public StreamInfo getStreamInfoByAppAndStreamWithCheck(String app, String stream) { | |
| 36 | + return getStreamInfoByAppAndStreamWithCheck(app, stream, null); | |
| 37 | + } | |
| 38 | + | |
| 39 | + @Override | |
| 40 | + public StreamInfo getStreamInfoByAppAndStream(String app, String stream, JSONArray tracks, String addr) { | |
| 31 | 41 | ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); |
| 32 | 42 | StreamInfo streamInfoResult = new StreamInfo(); |
| 33 | 43 | streamInfoResult.setStreamId(stream); |
| 34 | 44 | streamInfoResult.setApp(app); |
| 35 | - streamInfoResult.setRtmp(String.format("rtmp://%s:%s/%s/%s", mediaInfo.getStreamIp(), mediaInfo.getRtmpPort(), app, stream)); | |
| 36 | - streamInfoResult.setRtsp(String.format("rtsp://%s:%s/%s/%s", mediaInfo.getStreamIp(), mediaInfo.getRtspPort(), app, stream)); | |
| 37 | - streamInfoResult.setFlv(String.format("http://%s:%s/%s/%s.flv", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream)); | |
| 38 | - streamInfoResult.setWs_flv(String.format("ws://%s:%s/%s/%s.flv", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream)); | |
| 39 | - streamInfoResult.setHls(String.format("http://%s:%s/%s/%s/hls.m3u8", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream)); | |
| 40 | - streamInfoResult.setWs_hls(String.format("ws://%s:%s/%s/%s/hls.m3u8", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream)); | |
| 41 | - streamInfoResult.setFmp4(String.format("http://%s:%s/%s/%s.live.mp4", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream)); | |
| 42 | - streamInfoResult.setWs_fmp4(String.format("ws://%s:%s/%s/%s.live.mp4", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream)); | |
| 43 | - streamInfoResult.setTs(String.format("http://%s:%s/%s/%s.live.ts", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream)); | |
| 44 | - streamInfoResult.setWs_ts(String.format("ws://%s:%s/%s/%s.live.ts", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream)); | |
| 45 | + if (addr == null) { | |
| 46 | + addr = mediaInfo.getStreamIp(); | |
| 47 | + } | |
| 48 | + streamInfoResult.setRtmp(String.format("rtmp://%s:%s/%s/%s", addr, mediaInfo.getRtmpPort(), app, stream)); | |
| 49 | + streamInfoResult.setRtsp(String.format("rtsp://%s:%s/%s/%s", addr, mediaInfo.getRtspPort(), app, stream)); | |
| 50 | + streamInfoResult.setFlv(String.format("http://%s:%s/%s/%s.flv", addr, mediaInfo.getHttpPort(), app, stream)); | |
| 51 | + streamInfoResult.setWs_flv(String.format("ws://%s:%s/%s/%s.flv", addr, mediaInfo.getHttpPort(), app, stream)); | |
| 52 | + streamInfoResult.setHls(String.format("http://%s:%s/%s/%s/hls.m3u8", addr, mediaInfo.getHttpPort(), app, stream)); | |
| 53 | + streamInfoResult.setWs_hls(String.format("ws://%s:%s/%s/%s/hls.m3u8", addr, mediaInfo.getHttpPort(), app, stream)); | |
| 54 | + streamInfoResult.setFmp4(String.format("http://%s:%s/%s/%s.live.mp4", addr, mediaInfo.getHttpPort(), app, stream)); | |
| 55 | + streamInfoResult.setWs_fmp4(String.format("ws://%s:%s/%s/%s.live.mp4", addr, mediaInfo.getHttpPort(), app, stream)); | |
| 56 | + streamInfoResult.setTs(String.format("http://%s:%s/%s/%s.live.ts", addr, mediaInfo.getHttpPort(), app, stream)); | |
| 57 | + streamInfoResult.setWs_ts(String.format("ws://%s:%s/%s/%s.live.ts", addr, mediaInfo.getHttpPort(), app, stream)); | |
| 45 | 58 | streamInfoResult.setRtc(String.format("http://%s:%s/index/api/webrtc?app=%s&stream=%s&type=play", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream)); |
| 46 | 59 | streamInfoResult.setTracks(tracks); |
| 47 | 60 | return streamInfoResult; |
| 48 | 61 | } |
| 49 | 62 | |
| 50 | 63 | @Override |
| 51 | - public StreamInfo getStreamInfoByAppAndStreamWithCheck(String app, String stream) { | |
| 64 | + public StreamInfo getStreamInfoByAppAndStreamWithCheck(String app, String stream, String addr) { | |
| 52 | 65 | StreamInfo streamInfo = null; |
| 53 | 66 | JSONObject mediaList = zlmresTfulUtils.getMediaList(app, stream); |
| 54 | 67 | if (mediaList != null) { |
| ... | ... | @@ -57,7 +70,7 @@ public class MediaServiceImpl implements IMediaService { |
| 57 | 70 | if (data == null) return null; |
| 58 | 71 | JSONObject mediaJSON = JSON.parseObject(JSON.toJSONString(data.get(0)), JSONObject.class); |
| 59 | 72 | JSONArray tracks = mediaJSON.getJSONArray("tracks"); |
| 60 | - streamInfo = getStreamInfoByAppAndStream(app, stream, tracks); | |
| 73 | + streamInfo = getStreamInfoByAppAndStream(app, stream, tracks, addr); | |
| 61 | 74 | } |
| 62 | 75 | } |
| 63 | 76 | return streamInfo; | ... | ... |
src/main/java/com/genersoft/iot/vmp/web/ApiCompatibleController.java
0 → 100644
| 1 | +package com.genersoft.iot.vmp.web; | |
| 2 | + | |
| 3 | +import com.genersoft.iot.vmp.common.StreamInfo; | |
| 4 | +import com.genersoft.iot.vmp.service.IMediaService; | |
| 5 | +import com.genersoft.iot.vmp.vmanager.bean.WVPResult; | |
| 6 | +import org.slf4j.Logger; | |
| 7 | +import org.slf4j.LoggerFactory; | |
| 8 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 9 | +import org.springframework.web.bind.annotation.*; | |
| 10 | + | |
| 11 | +import javax.servlet.http.HttpServletRequest; | |
| 12 | + | |
| 13 | +@CrossOrigin | |
| 14 | +@RestController | |
| 15 | +public class ApiCompatibleController { | |
| 16 | + | |
| 17 | + private final static Logger logger = LoggerFactory.getLogger(ApiCompatibleController.class); | |
| 18 | + | |
| 19 | + @Autowired | |
| 20 | + private IMediaService mediaService; | |
| 21 | + | |
| 22 | + @GetMapping(value = "/api/v1/stream_info_by_app_and_stream") | |
| 23 | + @ResponseBody | |
| 24 | + public WVPResult<StreamInfo> getStreamInfoByAppAndStream(HttpServletRequest request, @RequestParam String app, @RequestParam String stream){ | |
| 25 | + String localAddr = request.getLocalAddr(); | |
| 26 | + StreamInfo streamINfo = mediaService.getStreamInfoByAppAndStreamWithCheck(app, stream, localAddr); | |
| 27 | + WVPResult<StreamInfo> wvpResult = new WVPResult<>(); | |
| 28 | + wvpResult.setCode(0); | |
| 29 | + wvpResult.setMsg("success"); | |
| 30 | + wvpResult.setData(streamINfo); | |
| 31 | + return wvpResult; | |
| 32 | + } | |
| 33 | +} | ... | ... |
src/main/resources/all-application.yml
| ... | ... | @@ -52,7 +52,7 @@ server: |
| 52 | 52 | # 作为28181服务器的配置 |
| 53 | 53 | sip: |
| 54 | 54 | # [必须修改] 本机的IP, 必须是网卡上的IP,用于sip下协议栈监听ip,如果监听所有设置为0.0.0.0 |
| 55 | - monitorIp: 0.0.0.0 | |
| 55 | + monitor-ip: 0.0.0.0 | |
| 56 | 56 | # [必须修改] 本机的IP |
| 57 | 57 | ip: 192.168.0.100 |
| 58 | 58 | # [可选] 28181服务监听的端口 |
| ... | ... | @@ -67,48 +67,48 @@ sip: |
| 67 | 67 | # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验 |
| 68 | 68 | password: admin123 |
| 69 | 69 | # [可选] 心跳超时时间, 建议设置为心跳周期的三倍 |
| 70 | - keepaliveTimeOut: 180 | |
| 70 | + keepalive-timeout: 180 | |
| 71 | 71 | # [可选] 国标级联注册失败,再次发起注册的时间间隔。 默认60秒 |
| 72 | - registerTimeInterval: 60 | |
| 72 | + register-time-interval: 60 | |
| 73 | 73 | |
| 74 | 74 | #zlm 默认服务器配置 |
| 75 | 75 | media: |
| 76 | 76 | # [必须修改] zlm服务器的内网IP |
| 77 | 77 | ip: 192.168.0.100 |
| 78 | 78 | # [可选] 返回流地址时的ip,置空使用 media.ip |
| 79 | - streamIp: | |
| 79 | + stream-ip: | |
| 80 | 80 | # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip |
| 81 | - sdpIp: | |
| 81 | + sdp-ip: | |
| 82 | 82 | # [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip |
| 83 | - hookIp: | |
| 83 | + hook-ip: | |
| 84 | 84 | # [必须修改] zlm服务器的http.port |
| 85 | - httpPort: 80 | |
| 85 | + http-port: 80 | |
| 86 | 86 | # [可选] zlm服务器的http.sslport, 置空使用zlm配置文件配置 |
| 87 | - httpSSlPort: | |
| 87 | + http-ssl-port: | |
| 88 | 88 | # [可选] zlm服务器的rtmp.port, 置空使用zlm配置文件配置 |
| 89 | - rtmpPort: | |
| 89 | + rtmp-port: | |
| 90 | 90 | # [可选] zlm服务器的rtmp.sslport, 置空使用zlm配置文件配置 |
| 91 | - rtmpSSlPort: | |
| 91 | + rtmp-ssl-port: | |
| 92 | 92 | # [可选] zlm服务器的 rtp_proxy.port, 置空使用zlm配置文件配置 |
| 93 | - rtpProxyPort: | |
| 93 | + rtp-proxy-port: | |
| 94 | 94 | # [可选] zlm服务器的 rtsp.port, 置空使用zlm配置文件配置 |
| 95 | - rtspPort: | |
| 95 | + rtsp-port: | |
| 96 | 96 | # [可选] zlm服务器的 rtsp.sslport, 置空使用zlm配置文件配置 |
| 97 | - rtspSSLPort: | |
| 97 | + rtsp-ssl-port: | |
| 98 | 98 | # [可选] 是否自动配置ZLM, 如果希望手动配置ZLM, 可以设为false, 不建议新接触的用户修改 |
| 99 | - autoConfig: true | |
| 99 | + auto-config: true | |
| 100 | 100 | # [可选] zlm服务器的hook.admin_params=secret |
| 101 | 101 | secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc |
| 102 | 102 | # [可选] zlm服务器的general.streamNoneReaderDelayMS |
| 103 | - streamNoneReaderDelayMS: 18000 # 无人观看多久自动关闭流, -1表示永不自动关闭,即 关闭按需拉流 | |
| 103 | + stream-none-reader-delay-ms: 18000 # 无人观看多久自动关闭流, -1表示永不自动关闭,即 关闭按需拉流 | |
| 104 | 104 | # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试 |
| 105 | 105 | rtp: |
| 106 | 106 | # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输 |
| 107 | 107 | enable: true |
| 108 | 108 | # [可选] 在此范围内选择端口用于媒体流传输, |
| 109 | - portRange: 30000,30500 # 端口范围 | |
| 109 | + port-range: 30000,30500 # 端口范围 | |
| 110 | 110 | # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用 |
| 111 | - recordAssistPort: 0 | |
| 111 | + record-assist-port: 0 | |
| 112 | 112 | |
| 113 | 113 | # [可选] 日志配置, 一般不需要改 |
| 114 | 114 | logging: |
| ... | ... | @@ -122,21 +122,24 @@ logging: |
| 122 | 122 | genersoft: |
| 123 | 123 | iot: info |
| 124 | 124 | # [根据业务需求配置] |
| 125 | -userSettings: | |
| 125 | +user-settings: | |
| 126 | 126 | # [可选] 自动点播, 使用固定流地址进行播放时,如果未点播则自动进行点播, 需要rtp.enable=true |
| 127 | - autoApplyPlay: false | |
| 127 | + auto-apply-play: false | |
| 128 | 128 | # [可选] 部分设备需要扩展SDP,需要打开此设置 |
| 129 | - seniorSdp: false | |
| 129 | + senior-sdp: false | |
| 130 | 130 | # 保存移动位置历史轨迹:true:保留历史数据,false:仅保留最后的位置(默认) |
| 131 | - savePositionHistory: false | |
| 131 | + save-position-history: false | |
| 132 | 132 | # 点播等待超时时间,单位:毫秒 |
| 133 | - playTimeout: 3000 | |
| 133 | + play-timeout: 3000 | |
| 134 | 134 | # 等待音视频编码信息再返回, true: 可以根据编码选择合适的播放器,false: 可以更快点播 |
| 135 | - waitTrack: false | |
| 135 | + wait-track: false | |
| 136 | 136 | # 是否开启接口鉴权 |
| 137 | - interfaceAuthentication: true | |
| 137 | + interface-authentication: true | |
| 138 | + # 接口鉴权例外的接口, 即不进行接口鉴权的接口 | |
| 139 | + interface-authentication-excludes: | |
| 140 | + -"/" | |
| 138 | 141 | # 推流直播是否录制 |
| 139 | - recordPushLive: true | |
| 142 | + record-push-live: true | |
| 140 | 143 | |
| 141 | 144 | # 在线文档: swagger-ui(生产环境建议关闭) |
| 142 | 145 | springfox: | ... | ... |
src/main/resources/application-dev.yml
| ... | ... | @@ -13,10 +13,15 @@ spring: |
| 13 | 13 | timeout: 10000 |
| 14 | 14 | # [可选] jdbc数据库配置, 项目使用sqlite作为数据库,一般不需要配置 |
| 15 | 15 | datasource: |
| 16 | + # 使用mysql 打开23-28行注释, 删除29-36行 | |
| 17 | + # name: wvp | |
| 18 | + # url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true | |
| 19 | + # username: | |
| 20 | + # password: | |
| 21 | + # type: com.alibaba.druid.pool.DruidDataSource | |
| 22 | + # driver-class-name: com.mysql.cj.jdbc.Driver | |
| 16 | 23 | name: eiot |
| 17 | 24 | url: jdbc:sqlite::resource:wvp.sqlite |
| 18 | - # 打包为jar运行时把wvp.sqlite发到jar同级文件夹,同时url改为: | |
| 19 | - # url: jdbc:sqlite:wvp.sqlite | |
| 20 | 25 | username: |
| 21 | 26 | password: |
| 22 | 27 | type: com.alibaba.druid.pool.DruidDataSource |
| ... | ... | @@ -49,7 +54,7 @@ media: |
| 49 | 54 | # [必须修改] zlm服务器的内网IP |
| 50 | 55 | ip: 192.168.0.100 |
| 51 | 56 | # [必须修改] zlm服务器的http.port |
| 52 | - httpPort: 80 | |
| 57 | + http-port: 80 | |
| 53 | 58 | # [可选] zlm服务器的hook.admin_params=secret |
| 54 | 59 | secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc |
| 55 | 60 | # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试 |
| ... | ... | @@ -57,10 +62,9 @@ media: |
| 57 | 62 | # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输 |
| 58 | 63 | enable: true |
| 59 | 64 | # [可选] 在此范围内选择端口用于媒体流传输, |
| 60 | - portRange: 30000,30500 # 端口范围 | |
| 65 | + port-range: 30000,30500 # 端口范围 | |
| 61 | 66 | # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用 |
| 62 | - recordAssistPort: 0 | |
| 63 | - | |
| 67 | + record-assist-port: 0 | |
| 64 | 68 | |
| 65 | 69 | # [可选] 日志配置, 一般不需要改 |
| 66 | 70 | logging: |
| ... | ... | @@ -74,16 +78,12 @@ logging: |
| 74 | 78 | genersoft: |
| 75 | 79 | iot: info |
| 76 | 80 | # [根据业务需求配置] |
| 77 | -userSettings: | |
| 78 | - # [可选] 自动点播, 使用固定流地址进行播放时,如果未点播则自动进行点播, 需要rtp.enable=true | |
| 79 | - autoApplyPlay: false | |
| 80 | - # 是否开启接口鉴权 | |
| 81 | - interfaceAuthentication: true | |
| 81 | +user-settings: | |
| 82 | 82 | # 推流直播是否录制 |
| 83 | - recordPushLive: true | |
| 83 | + record-push-live: true | |
| 84 | 84 | |
| 85 | 85 | # 在线文档: swagger-ui(生产环境建议关闭) |
| 86 | 86 | springfox: |
| 87 | 87 | documentation: |
| 88 | 88 | swagger-ui: |
| 89 | 89 | - enabled: true |
| 90 | + enabled: true | |
| 90 | 91 | \ No newline at end of file | ... | ... |