From 118e42884e677a99dbdd20349eaad85c96bafeb4 Mon Sep 17 00:00:00 2001 From: panlinlin <648540858@qq.com> Date: 星期四, 22 四月 2021 10:56:13 +0800 Subject: [PATCH] 优化拉流代理 --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java | 7 ++ src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java | 32 ++++++++++ web_src/src/components/StreamProxyList.vue | 34 +++++++---- src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java | 2 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java | 4 + src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java | 19 ++++-- web_src/src/components/dialog/StreamProxyEdit.vue | 28 ++++----- src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 32 ++++++++-- 8 files changed, 114 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java index d701c83..42ad823 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java @@ -43,7 +43,9 @@ builder.add("secret",mediaSecret); if (param != null && param.keySet().size() > 0) { for (String key : param.keySet()){ - builder.add(key, param.get(key).toString()); + if (param.get(key) != null) { + builder.add(key, param.get(key).toString()); + } } } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java index 2ef4cf6..308fa6b 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java @@ -170,7 +170,12 @@ List<StreamProxyItem> streamProxyListForEnable = storager.getStreamProxyListForEnable(true); for (StreamProxyItem streamProxyDto : streamProxyListForEnable) { logger.info("鎭㈠娴佷唬鐞嗭紝" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream()); - streamProxyService.addStreamProxyToZlm(streamProxyDto); + JSONObject jsonObject = streamProxyService.addStreamProxyToZlm(streamProxyDto); + if (jsonObject == null) { + // 璁剧疆涓烘湭鍚敤 + logger.info("鎭㈠娴佷唬鐞嗗け璐ワ紝璇锋鏌ユ祦鍦板潃鍚庨噸鏂板惎鐢�" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream()); + streamProxyService.stop(streamProxyDto.getApp(), streamProxyDto.getStream()); + } } } } 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 023c075..cddc21c 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java @@ -10,7 +10,7 @@ * 淇濆瓨瑙嗛浠g悊 * @param param */ - void save(StreamProxyItem param); + String save(StreamProxyItem param); /** * 娣诲姞瑙嗛浠g悊鍒皕lm 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 e31f0e8..c6286c5 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 @@ -40,23 +40,40 @@ @Override - public void save(StreamProxyItem param) { + public String save(StreamProxyItem param) { MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); String dstUrl = String.format("rtmp://%s:%s/%s/%s", "127.0.0.1", mediaInfo.getRtmpPort(), param.getApp(), param.getStream() ); param.setDst_url(dstUrl); + StringBuffer result = new StringBuffer(); // 鏇存柊 if (videoManagerStorager.queryStreamProxy(param.getApp(), param.getStream()) != null) { - boolean result = videoManagerStorager.updateStreamProxy(param); - if (result && param.isEnable()) { - addStreamProxyToZlm(param); + if (videoManagerStorager.updateStreamProxy(param)) { + result.append("淇濆瓨鎴愬姛"); + if (param.isEnable()){ + JSONObject jsonObject = addStreamProxyToZlm(param); + if (jsonObject == null) { + result.append(", 浣嗘槸鍚敤澶辫触锛岃妫�鏌ユ祦鍦板潃鏄惁鍙敤"); + param.setEnable(false); + videoManagerStorager.updateStreamProxy(param); + } + } } }else { // 鏂板 - boolean result = videoManagerStorager.addStreamProxy(param); - if (result && param.isEnable()) { - addStreamProxyToZlm(param); + if (videoManagerStorager.addStreamProxy(param)){ + result.append("淇濆瓨鎴愬姛"); + if (param.isEnable()) { + JSONObject jsonObject = addStreamProxyToZlm(param); + if (jsonObject == null) { + result.append(", 浣嗘槸鍚敤澶辫触锛岃妫�鏌ユ祦鍦板潃鏄惁鍙敤"); + param.setEnable(false); + videoManagerStorager.updateStreamProxy(param); + } + } } + } + return result.toString(); } @Override @@ -105,6 +122,7 @@ StreamProxyItem streamProxy = videoManagerStorager.queryStreamProxy(app, stream); if (!streamProxy.isEnable() && streamProxy != null) { JSONObject jsonObject = addStreamProxyToZlm(streamProxy); + if (jsonObject == null) return false; if (jsonObject.getInteger("code") == 0) { result = true; streamProxy.setEnable(true); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java new file mode 100644 index 0000000..f8e2c1c --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java @@ -0,0 +1,32 @@ +package com.genersoft.iot.vmp.vmanager.bean; + +public class WVPResult<T> { + + private int code; + private String msg; + private T data; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java index 8914fc1..62f732e 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java @@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.service.IStreamProxyService; +import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -56,10 +57,13 @@ }) @PostMapping(value = "/save") @ResponseBody - public Object save(@RequestBody StreamProxyItem param){ + public WVPResult save(@RequestBody StreamProxyItem param){ logger.info("娣诲姞浠g悊锛� " + JSONObject.toJSONString(param)); - streamProxyService.save(param); - return "success"; + String msg = streamProxyService.save(param); + WVPResult<Object> result = new WVPResult<>(); + result.setCode(0); + result.setMsg(msg); + return result; } @ApiOperation("绉婚櫎浠g悊") @@ -69,10 +73,13 @@ }) @DeleteMapping(value = "/del") @ResponseBody - public Object del(String app, String stream){ + public WVPResult del(String app, String stream){ logger.info("绉婚櫎浠g悊锛� " + app + "/" + stream); streamProxyService.del(app, stream); - return "success"; + WVPResult<Object> result = new WVPResult<>(); + result.setCode(0); + result.setMsg("success"); + return result; } @ApiOperation("鍚敤浠g悊") @@ -85,7 +92,7 @@ public Object start(String app, String stream){ logger.info("鍚敤浠g悊锛� " + app + "/" + stream); boolean result = streamProxyService.start(app, stream); - return "success"; + return result?"success":"fail"; } @ApiOperation("鍋滅敤浠g悊") diff --git a/web_src/src/components/StreamProxyList.vue b/web_src/src/components/StreamProxyList.vue index 6d4183e..ee3d43c 100644 --- a/web_src/src/components/StreamProxyList.vue +++ b/web_src/src/components/StreamProxyList.vue @@ -19,13 +19,13 @@ <el-table-column label="娴佸湴鍧�" width="400" align="center" show-overflow-tooltip > <template slot-scope="scope"> <div slot="reference" class="name-wrapper"> - + <el-tag size="medium" v-if="scope.row.type == 'default'"> - <i class="cpoy-btn el-icon-document-copy" title="鐐瑰嚮鎷疯礉" v-clipboard="scope.row.url" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})"></i> + <i class="cpoy-btn el-icon-document-copy" title="鐐瑰嚮鎷疯礉" v-clipboard="scope.row.url" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})"></i> {{scope.row.url}} </el-tag> <el-tag size="medium" v-if="scope.row.type != 'default'"> - <i class="cpoy-btn el-icon-document-copy" title="鐐瑰嚮鎷疯礉" v-clipboard="scope.row.src_url" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})"></i> + <i class="cpoy-btn el-icon-document-copy" title="鐐瑰嚮鎷疯礉" v-clipboard="scope.row.src_url" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})"></i> {{scope.row.src_url}} </el-tag> </div> @@ -97,7 +97,7 @@ }, data() { return { - streamProxyList: [], + streamProxyList: [], currentPusher: {}, //褰撳墠鎿嶄綔璁惧瀵硅薄 updateLooper: 0, //鏁版嵁鍒锋柊杞鏍囧織 currentDeviceChannelsLenth:0, @@ -177,22 +177,21 @@ console.log(error); that.getListLoading = false; }); - + }, deleteStreamProxy: function(row){ - console.log(1111) let that = this; this.getListLoading = true; that.$axios({ method:"delete", url:"/api/proxy/del", params:{ - app: row.app, - stream: row.stream - } + app: row.app, + stream: row.stream + } }).then((res)=>{ that.getListLoading = false; - that.initData() + that.initData() }).catch(function (error) { console.log(error); that.getListLoading = false; @@ -210,9 +209,18 @@ stream: row.stream } }).then(function (res) { - that.getListLoading = false; - that.startBtnLaoding = false; - that.initData() + that.getListLoading = false; + that.startBtnLaoding = false; + if (res.data == "success"){ + that.initData() + }else { + that.$message({ + showClose: true, + message: "淇濆瓨澶辫触锛岃妫�鏌ュ湴鍧�鏄惁鍙敤锛�", + type: "error", + }); + } + }).catch(function (error) { console.log(error); that.getListLoading = false; diff --git a/web_src/src/components/dialog/StreamProxyEdit.vue b/web_src/src/components/dialog/StreamProxyEdit.vue index d849ec6..66f63ad 100644 --- a/web_src/src/components/dialog/StreamProxyEdit.vue +++ b/web_src/src/components/dialog/StreamProxyEdit.vue @@ -151,22 +151,20 @@ url:`/api/proxy/save`, data: that.proxyParam }).then(function (res) { - console.log(res); - console.log(res.data == "success"); - if (res.data == "success") { - that.$message({ - showClose: true, - message: "淇濆瓨鎴愬姛", - type: "success", - }); - that.showDialog = false; - if (that.listChangeCallback != null) { - that.listChangeCallback(); - } + if (typeof (res.data.code) != "undefined" && res.data.code === 0) { + that.$message({ + showClose: true, + message: res.data.msg, + type: "success", + }); + that.showDialog = false; + if (that.listChangeCallback != null) { + that.listChangeCallback(); } - }).catch(function (error) { - console.log(error); - }); + } + }).catch(function (error) { + console.log(error); + }); }, close: function () { console.log("鍏抽棴娣诲姞瑙嗛骞冲彴"); -- Gitblit v1.8.0