From 20082441ef5f6d62b93d572cc5dfebb3616bea9a Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 24 十一月 2021 15:09:43 +0800 Subject: [PATCH] 拉流代理接口添加无人观看则自动移除参数,拉流代理返回值增加流地址信息 --- src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java | 8 ++++++++ src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 15 ++++++++++++++- web_src/src/components/StreamProxyList.vue | 8 ++++++++ src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java | 6 ++++++ sql/mysql.sql | 1 + src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java | 6 ++++-- src/main/resources/wvp.sqlite | 0 web_src/src/components/dialog/StreamProxyEdit.vue | 2 ++ src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 6 ++++++ src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java | 5 +++++ 10 files changed, 54 insertions(+), 3 deletions(-) diff --git a/sql/mysql.sql b/sql/mysql.sql index cd5bbea..38cc881 100644 --- a/sql/mysql.sql +++ b/sql/mysql.sql @@ -208,6 +208,7 @@ enable_hls bit null, enable_mp4 bit null, enable bit not null, + enable_remove_none_reader bit not null, createTime varchar(50) not null, primary key (app, stream) ); 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 16802cb..d6e77c7 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 @@ -11,8 +11,10 @@ import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.media.zlm.dto.MediaItem; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; +import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.service.IMediaServerService; import com.genersoft.iot.vmp.service.IMediaService; +import com.genersoft.iot.vmp.service.IStreamProxyService; import com.genersoft.iot.vmp.service.bean.SSRCInfo; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; @@ -58,6 +60,9 @@ @Autowired private IMediaServerService mediaServerService; + + @Autowired + private IStreamProxyService streamProxyService; @Autowired private IMediaService mediaService; @@ -383,7 +388,15 @@ }else { JSONObject ret = new JSONObject(); ret.put("code", 0); - ret.put("close", false); + StreamProxyItem streamProxyItem = streamProxyService.getStreamProxyByAppAndStream(app, streamId); + if (streamProxyItem != null && streamProxyItem.isEnable_remove_none_reader()) { + ret.put("close", true); + streamProxyService.del(app, streamId); + String url = streamProxyItem.getUrl() != null?streamProxyItem.getUrl():streamProxyItem.getSrc_url(); + logger.info("[{}/{}]<-[{}] 鎷夋祦浠g悊鏃犱汉瑙傜湅宸茬粡绉婚櫎", app, streamId, url); + }else { + ret.put("close", false); + } return new ResponseEntity<String>(ret.toString(),HttpStatus.OK); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java b/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java index 4c68c61..60f3303 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java @@ -65,4 +65,10 @@ * @return */ JSONObject getFFmpegCMDs(MediaServerItem mediaServerItem); + + /** + * 鏍规嵁app涓巗tream鑾峰彇streamProxy + * @return + */ + StreamProxyItem getStreamProxyByAppAndStream(String app, String streamId); } 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 a10e340..3ffc68e 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 @@ -228,4 +228,10 @@ return result; } + + + @Override + public StreamProxyItem getStreamProxyByAppAndStream(String app, String streamId) { + return videoManagerStorager.getStreamProxyByAppAndStream(app, streamId); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java index 3f4b73f..570718b 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java @@ -406,4 +406,12 @@ * @param channelId 閫氶亾ID */ void deviceChannelOffline(String deviceId, String channelId); + + /** + * 閫氳繃app涓巗tream鑾峰彇StreamProxy + * @param app + * @param streamId + * @return + */ + StreamProxyItem getStreamProxyByAppAndStream(String app, String streamId); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java index 7346da5..11753f7 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java @@ -11,9 +11,10 @@ public interface StreamProxyMapper { @Insert("INSERT INTO stream_proxy (type, app, stream,mediaServerId, url, src_url, dst_url, " + - "timeout_ms, ffmpeg_cmd_key, rtp_type, enable_hls, enable_mp4, enable, createTime) VALUES" + + "timeout_ms, ffmpeg_cmd_key, rtp_type, enable_hls, enable_mp4, enable, enable_remove_none_reader, createTime) VALUES" + "('${type}','${app}', '${stream}', '${mediaServerId}','${url}', '${src_url}', '${dst_url}', " + - "'${timeout_ms}', '${ffmpeg_cmd_key}', '${rtp_type}', ${enable_hls}, ${enable_mp4}, ${enable}, '${createTime}' )") + "'${timeout_ms}', '${ffmpeg_cmd_key}', '${rtp_type}', ${enable_hls}, ${enable_mp4}, ${enable}, " + + "${enable_remove_none_reader}, '${createTime}' )") int add(StreamProxyItem streamProxyDto); @Update("UPDATE stream_proxy " + @@ -29,6 +30,7 @@ "rtp_type=#{rtp_type}, " + "enable_hls=#{enable_hls}, " + "enable=#{enable}, " + + "enable_remove_none_reader=#{enable_remove_none_reader}, " + "enable_mp4=#{enable_mp4} " + "WHERE app=#{app} AND stream=#{stream}") int update(StreamProxyItem streamProxyDto); diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java index 37905ec..9ad44d4 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java @@ -651,4 +651,9 @@ } return result; } + + @Override + public StreamProxyItem getStreamProxyByAppAndStream(String app, String streamId) { + return streamProxyMapper.selectOne(app, streamId); + } } diff --git a/src/main/resources/wvp.sqlite b/src/main/resources/wvp.sqlite index 88aea8e..f969514 100644 --- a/src/main/resources/wvp.sqlite +++ b/src/main/resources/wvp.sqlite Binary files differ diff --git a/web_src/src/components/StreamProxyList.vue b/web_src/src/components/StreamProxyList.vue index 746bcdb..27dab67 100644 --- a/web_src/src/components/StreamProxyList.vue +++ b/web_src/src/components/StreamProxyList.vue @@ -66,6 +66,14 @@ </div> </template> </el-table-column> + <el-table-column label="鏃犱汉瑙傜湅鑷姩鍒犻櫎" width="160" align="center"> + <template slot-scope="scope"> + <div slot="reference" class="name-wrapper"> + <el-tag size="medium" v-if="scope.row.enable_remove_none_reader">宸插惎鐢�</el-tag> + <el-tag size="medium" type="info" v-if="!scope.row.enable_remove_none_reader">鏈惎鐢�</el-tag> + </div> + </template> + </el-table-column> <el-table-column label="鎿嶄綔" width="360" align="center" fixed="right"> diff --git a/web_src/src/components/dialog/StreamProxyEdit.vue b/web_src/src/components/dialog/StreamProxyEdit.vue index c9330fd..fa09cf8 100644 --- a/web_src/src/components/dialog/StreamProxyEdit.vue +++ b/web_src/src/components/dialog/StreamProxyEdit.vue @@ -106,6 +106,7 @@ <el-checkbox label="鍚敤" v-model="proxyParam.enable" ></el-checkbox> <el-checkbox label="杞琀LS" v-model="proxyParam.enable_hls" ></el-checkbox> <el-checkbox label="MP4褰曞埗" v-model="proxyParam.enable_mp4" ></el-checkbox> + <el-checkbox label="鏃犱汉瑙傜湅鑷姩鍒犻櫎" v-model="proxyParam.enable_remove_none_reader" ></el-checkbox> </div> </el-form-item> @@ -169,6 +170,7 @@ enable: true, enable_hls: true, enable_mp4: false, + enable_remove_none_reader: false, platformGbId: null, mediaServerId: "auto", }, -- Gitblit v1.8.0