package com.genersoft.iot.vmp.conf; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.utils.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.regex.Pattern; @Configuration("mediaConfig") @Order(0) public class MediaConfig{ private final static Logger logger = LoggerFactory.getLogger(MediaConfig.class); // 修改必须配置,不再支持自动获取 @Value("${media.id}") private String id; @Value("${media.ip}") private String ip; @Value("${media.hook-ip:}") private String hookIp; @Value("${sip.ip}") private String sipIp; @Value("${sip.domain}") private String sipDomain; @Value("${media.sdp-ip:${media.ip}}") private String sdpIp; @Value("${media.stream-ip:${media.ip}}") private String streamIp; @Value("${media.http-port}") private Integer httpPort; @Value("${media.http-ssl-port:0}") private Integer httpSSlPort = 0; @Value("${media.rtmp-port:0}") private Integer rtmpPort = 0; @Value("${media.rtmp-ssl-port:0}") private Integer rtmpSSlPort = 0; @Value("${media.rtp-proxy-port:0}") private Integer rtpProxyPort = 0; @Value("${media.rtsp-port:0}") private Integer rtspPort = 0; @Value("${media.rtsp-ssl-port:0}") private Integer rtspSSLPort = 0; @Value("${media.auto-config:true}") private boolean autoConfig = true; @Value("${media.secret}") private String secret; @Value("${media.rtp.enable}") private boolean rtpEnable; @Value("${media.rtp.port-range}") private String rtpPortRange; @Value("${media.rtp.send-port-range}") private String rtpSendPortRange; @Value("${media.record-assist-port:0}") private Integer recordAssistPort = 0; @Value("${media.record-day:7}") private Integer recordDay; @Value("${media.record-path}") private String recordPath; public String getId() { return id; } public String getIp() { return ip; } public String getHookIp() { if (ObjectUtils.isEmpty(hookIp)){ return sipIp.split(",")[0]; }else { return hookIp; } } public String getSipIp() { if (sipIp == null) { return this.ip; }else { return sipIp; } } public int getHttpPort() { return httpPort; } public int getHttpSSlPort() { return httpSSlPort; } public int getRtmpPort() { return rtmpPort; } public int getRtmpSSlPort() { return rtmpSSlPort; } public int getRtpProxyPort() { if (rtpProxyPort == null) { return 0; }else { return rtpProxyPort; } } public int getRtspPort() { return rtspPort; } public int getRtspSSLPort() { return rtspSSLPort; } public boolean isAutoConfig() { return autoConfig; } public String getSecret() { return secret; } public boolean isRtpEnable() { return rtpEnable; } public String getRtpPortRange() { return rtpPortRange; } public int getRecordAssistPort() { return recordAssistPort; } public String getSdpIp() { if (ObjectUtils.isEmpty(sdpIp)){ return ip; }else { if (isValidIPAddress(sdpIp)) { return sdpIp; }else { // 按照域名解析 String hostAddress = null; try { hostAddress = InetAddress.getByName(sdpIp).getHostAddress(); } catch (UnknownHostException e) { logger.error("[获取SDP IP]: 域名解析失败"); } return hostAddress; } } } public String getStreamIp() { if (ObjectUtils.isEmpty(streamIp)){ return ip; }else { return streamIp; } } public String getSipDomain() { return sipDomain; } public MediaServerItem getMediaSerItem(){ MediaServerItem mediaServerItem = new MediaServerItem(); mediaServerItem.setId(id); mediaServerItem.setIp(ip); mediaServerItem.setDefaultServer(true); mediaServerItem.setHookIp(getHookIp()); mediaServerItem.setSdpIp(getSdpIp()); mediaServerItem.setStreamIp(getStreamIp()); mediaServerItem.setHttpPort(httpPort); mediaServerItem.setHttpSSlPort(httpSSlPort); mediaServerItem.setRtmpPort(rtmpPort); mediaServerItem.setRtmpSSlPort(rtmpSSlPort); mediaServerItem.setRtpProxyPort(getRtpProxyPort()); mediaServerItem.setRtspPort(rtspPort); mediaServerItem.setRtspSSLPort(rtspSSLPort); mediaServerItem.setAutoConfig(autoConfig); mediaServerItem.setSecret(secret); mediaServerItem.setRtpEnable(rtpEnable); mediaServerItem.setRtpPortRange(rtpPortRange); mediaServerItem.setSendRtpPortRange(rtpSendPortRange); mediaServerItem.setRecordAssistPort(recordAssistPort); mediaServerItem.setHookAliveInterval(30.00f); mediaServerItem.setRecordDay(recordDay); if (recordPath != null) { mediaServerItem.setRecordPath(recordPath); } mediaServerItem.setCreateTime(DateUtil.getNow()); mediaServerItem.setUpdateTime(DateUtil.getNow()); return mediaServerItem; } public Integer getRecordDay() { return recordDay; } public void setRecordDay(Integer recordDay) { this.recordDay = recordDay; } public String getRecordPath() { return recordPath; } public void setRecordPath(String recordPath) { this.recordPath = recordPath; } public String getRtpSendPortRange() { return rtpSendPortRange; } public void setRtpSendPortRange(String rtpSendPortRange) { this.rtpSendPortRange = rtpSendPortRange; } private boolean isValidIPAddress(String ipAddress) { if ((ipAddress != null) && (!ipAddress.isEmpty())) { return Pattern.matches("^([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}$", ipAddress); } return false; } }