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