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