diff --git a/sql/2.6.9更新.sql b/sql/2.6.9更新.sql index 769004d29..f3a01e879 100644 --- a/sql/2.6.9更新.sql +++ b/sql/2.6.9更新.sql @@ -6,3 +6,6 @@ alter table wvp_platform alter table wvp_stream_proxy add stream_key varying(255) + +alter table wvp_media_server + add record_assist_ip varying(50) diff --git a/sql/初始化.sql b/sql/初始化.sql index b95dd8749..ed7c04d88 100644 --- a/sql/初始化.sql +++ b/sql/初始化.sql @@ -160,6 +160,7 @@ create table wvp_media_server ( rtp_port_range character varying(50), send_rtp_port_range character varying(50), record_assist_port integer, + record_assist_ip character varying(50), default_server bool default false, create_time character varying(50), update_time character varying(50), diff --git a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java index 20ed8cb1f..bc31ad81f 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java @@ -81,6 +81,9 @@ public class MediaConfig{ @Value("${media.record-assist-port:0}") private Integer recordAssistPort = 0; + @Value("${media.record-assist-ip:${media.ip}}") + private String recordAssistIp; + public String getId() { return id; } @@ -159,6 +162,10 @@ public class MediaConfig{ return recordAssistPort; } + public String getRecordAssistIp() { + return recordAssistIp; + } + public String getSdpIp() { if (ObjectUtils.isEmpty(sdpIp)){ return ip; @@ -211,6 +218,7 @@ public class MediaConfig{ mediaServerItem.setRtpPortRange(rtpPortRange); mediaServerItem.setSendRtpPortRange(rtpSendPortRange); mediaServerItem.setRecordAssistPort(recordAssistPort); + mediaServerItem.setRecordAssistIp(recordAssistIp); mediaServerItem.setHookAliveInterval(30.00f); mediaServerItem.setCreateTime(DateUtil.getNow()); diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java index cf71bf1d7..0bc8e1cfa 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java @@ -51,7 +51,7 @@ public class AssistRESTfulUtils { return null; } StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append(String.format("http://%s:%s/%s", mediaServerItem.getIp(), mediaServerItem.getRecordAssistPort(), api)); + stringBuffer.append(String.format("http://%s:%s/%s", mediaServerItem.getRecordAssistIp(), mediaServerItem.getRecordAssistPort(), api)); JSONObject responseJSON = null; if (param != null && param.keySet().size() > 0) { 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 3c76883a3..8c319dd3e 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java @@ -285,20 +285,26 @@ public class ZLMHttpHookListener { result.setEnable_mp4(true); } } - if (mediaInfo.getRecordAssistPort() > 0 && userSetting.getRecordPath() == null) { - logger.info("推流时发现尚未设置录像路径,从assist服务中读取"); - JSONObject info = assistRESTfulUtils.getInfo(mediaInfo, null); - if (info != null && info.getInteger("code") != null && info.getInteger("code") == 0 ) { - JSONObject dataJson = info.getJSONObject("data"); - if (dataJson != null) { - String recordPath = dataJson.getString("record"); - userSetting.setRecordPath(recordPath); - result.setMp4_save_path(recordPath); - // 修改zlm中的录像路径 - if (mediaInfo.isAutoConfig()) { - taskExecutor.execute(() -> { - mediaServerService.setZLMConfig(mediaInfo, false); - }); + if (mediaInfo.getRecordAssistPort() > 0) { + if (mediaInfo.getRecordAssistIp() == null) { + mediaInfo.setRecordAssistIp(mediaInfo.getIp()); + } + + if (userSetting.getRecordPath() == null) { + logger.info("推流时发现尚未设置录像路径,从assist服务中读取"); + JSONObject info = assistRESTfulUtils.getInfo(mediaInfo, null); + if (info != null && info.getInteger("code") != null && info.getInteger("code") == 0 ) { + JSONObject dataJson = info.getJSONObject("data"); + if (dataJson != null) { + String recordPath = dataJson.getString("record"); + userSetting.setRecordPath(recordPath); + result.setMp4_save_path(recordPath); + // 修改zlm中的录像路径 + if (mediaInfo.isAutoConfig()) { + taskExecutor.execute(() -> { + mediaServerService.setZLMConfig(mediaInfo, false); + }); + } } } } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java index 066a67762..c4423e90e 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java @@ -68,6 +68,9 @@ public class MediaServerItem{ @Schema(description = "assist服务端口") private int recordAssistPort; + @Schema(description = "assist服务IP") + private String recordAssistIp; + @Schema(description = "创建时间") private String createTime; @@ -106,6 +109,7 @@ public class MediaServerItem{ rtpEnable = false; // 默认使用单端口;直到用户自己设置开启多端口 rtpPortRange = zlmServerConfig.getPortRange().replace("_",","); // 默认使用30000,30500作为级联时发送流的端口号 recordAssistPort = 0; // 默认关闭 + recordAssistIp = ip; // 默认使用media.ip } @@ -245,6 +249,14 @@ public class MediaServerItem{ this.recordAssistPort = recordAssistPort; } + public String getRecordAssistIp() { + return recordAssistIp; + } + + public void setRecordAssistIp(String recordAssistIp) { + this.recordAssistIp = recordAssistIp; + } + public boolean isDefaultServer() { return defaultServer; } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java index 6bbb4bc35..0137bc5f2 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java @@ -420,13 +420,19 @@ public class MediaServerServiceImpl implements IMediaServerService { if (serverItem.isAutoConfig()) { // 查看assist服务的录像路径配置 - if (serverItem.getRecordAssistPort() > 0 && userSetting.getRecordPath() == null) { - JSONObject info = assistRESTfulUtils.getInfo(serverItem, null); - if (info != null && info.getInteger("code") != null && info.getInteger("code") == 0 ) { - JSONObject dataJson = info.getJSONObject("data"); - if (dataJson != null) { - String recordPath = dataJson.getString("record"); - userSetting.setRecordPath(recordPath); + if (serverItem.getRecordAssistPort() > 0) { + if (serverItem.getRecordAssistIp() == null) { + serverItem.setRecordAssistIp(serverItem.getIp()); + } + + if (userSetting.getRecordPath() == null) { + JSONObject info = assistRESTfulUtils.getInfo(serverItem, null); + if (info != null && info.getInteger("code") != null && info.getInteger("code") == 0 ) { + JSONObject dataJson = info.getJSONObject("data"); + if (dataJson != null) { + String recordPath = dataJson.getString("record"); + userSetting.setRecordPath(recordPath); + } } } } @@ -588,7 +594,8 @@ public class MediaServerServiceImpl implements IMediaServerService { param.put("hook.on_send_rtp_stopped",String.format("%s/on_send_rtp_stopped", hookPrex)); param.put("hook.on_rtp_server_timeout",String.format("%s/on_rtp_server_timeout", hookPrex)); if (mediaServerItem.getRecordAssistPort() > 0) { - param.put("hook.on_record_mp4",String.format("http://127.0.0.1:%s/api/record/on_record_mp4", mediaServerItem.getRecordAssistPort())); + logger.info("hook.record_assist_ip -> {}", mediaServerItem.getRecordAssistIp()); + param.put("hook.on_record_mp4",String.format("http://%s:%s/api/record/on_record_mp4", mediaServerItem.getRecordAssistIp(), mediaServerItem.getRecordAssistPort())); }else { param.put("hook.on_record_mp4",""); } @@ -664,6 +671,7 @@ public class MediaServerServiceImpl implements IMediaServerService { mediaServerItem.setStreamIp(ip); mediaServerItem.setHookIp(sipConfig.getIp().split(",")[0]); mediaServerItem.setSdpIp(ip); + mediaServerItem.setRecordAssistIp(ip); return mediaServerItem; } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java index f2653f70c..d08d6529e 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java @@ -750,6 +750,10 @@ public class PlayServiceImpl implements IPlayService { return null; } if (mediaServerItem.getRecordAssistPort() > 0) { + if (mediaServerItem.getRecordAssistIp() == null) { + mediaServerItem.setRecordAssistIp(mediaServerItem.getIp()); + } + JSONObject jsonObject = assistRESTfulUtils.fileDuration(mediaServerItem, inviteInfo.getStreamInfo().getApp(), inviteInfo.getStreamInfo().getStream(), null); if (jsonObject == null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "连接Assist服务失败"); diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java index 13d536584..0897c17d7 100755 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java @@ -31,6 +31,7 @@ public interface MediaServerMapper { "rtp_port_range,"+ "send_rtp_port_range,"+ "record_assist_port,"+ + "record_assist_ip,"+ "default_server,"+ "create_time,"+ "update_time,"+ @@ -55,6 +56,7 @@ public interface MediaServerMapper { "#{rtpPortRange}, " + "#{sendRtpPortRange}, " + "#{recordAssistPort}, " + + "#{recordAssistIp}, " + "#{defaultServer}, " + "#{createTime}, " + "#{updateTime}, " + @@ -81,6 +83,7 @@ public interface MediaServerMapper { ", send_rtp_port_range=#{sendRtpPortRange}" + ", secret=#{secret}" + ", record_assist_port=#{recordAssistPort}" + + ", record_assist_ip=#{recordAssistIp}" + ", hook_alive_interval=#{hookAliveInterval}" + "WHERE id=#{id}"+ " "}) @@ -105,6 +108,7 @@ public interface MediaServerMapper { ", send_rtp_port_range=#{sendRtpPortRange}" + ", secret=#{secret}" + ", record_assist_port=#{recordAssistPort}" + + ", record_assist_ip=#{recordAssistIp}" + ", hook_alive_interval=#{hookAliveInterval}" + "WHERE ip=#{ip} and http_port=#{httpPort}"+ " "}) diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml index 595f629cc..22eb941b7 100644 --- a/src/main/resources/all-application.yml +++ b/src/main/resources/all-application.yml @@ -149,6 +149,8 @@ media: send-port-range: 50502,50506 # 端口范围 # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用 record-assist-port: 0 + # 录像辅助服务ip,置空使用media.ip + record-assist-ip: # [可选] 日志配置, 一般不需要改 logging: diff --git a/web_src/src/components/dialog/MediaServerEdit.vue b/web_src/src/components/dialog/MediaServerEdit.vue index 9808a1c2e..c5d20a288 100755 --- a/web_src/src/components/dialog/MediaServerEdit.vue +++ b/web_src/src/components/dialog/MediaServerEdit.vue @@ -95,6 +95,9 @@ - + + + @@ -133,7 +136,7 @@ export default { data() { const isValidIp = (rule, value, callback) => { // 校验IP是否符合规则 var reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/ - console.log(this.mediaServerForm.ip) + console.log(this.mediaServerForm.ip, value) if (!reg.test(this.mediaServerForm.ip)) { return callback(new Error('请输入有效的IP地址')) } else { @@ -174,6 +177,7 @@ export default { httpPort: "", httpSSlPort: "", recordAssistPort: "", + recordAssistIp: "", rtmpPort: "", rtmpSSlPort: "", rtpEnable: false, @@ -334,6 +338,7 @@ export default { httpPort: "", httpSSlPort: "", recordAssistPort: "", + recordAssistIp: "", rtmpPort: "", rtmpSSlPort: "", rtpEnable: false,