From bd570d167be9671f46ec27568b2a591713897323 Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期五, 07 五月 2021 17:24:49 +0800
Subject: [PATCH] 优化直播流点播流程, 添加流代理接口添加直接关联国标功能

---
 web_src/src/components/dialog/platformEdit.vue                                                |    3 -
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java |   60 ++++++++++---------
 web_src/src/components/StreamProxyList.vue                                                    |   17 +++--
 src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java                        |    8 ++
 web_src/src/components/ParentPlatformList.vue                                                 |    2 
 src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java                        |    4 -
 src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java           |   11 ++-
 web_src/src/components/dialog/StreamProxyEdit.vue                                             |   49 ++++++++++++++++
 src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java                  |   20 ++++++
 9 files changed, 127 insertions(+), 47 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java
index f2a2dec..a6f0ae7 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java
@@ -92,10 +92,18 @@
 				DeviceChannel channel = storager.queryChannelInParentPlatform(requesterId, channelId);
 				GbStream gbStream = storager.queryStreamInParentPlatform(requesterId, channelId);
 				// 涓嶆槸閫氶亾鍙兘鏄洿鎾祦
-				if (channel != null || gbStream != null ) {
+				if (channel != null && gbStream == null ) {
 					if (channel.getStatus() == 0) {
 						logger.info("閫氶亾绂荤嚎锛岃繑鍥�400");
 						responseAck(evt, Response.BAD_REQUEST, "channel [" + channel.getChannelId() + "] offline");
+						return;
+					}
+					responseAck(evt, Response.CALL_IS_BEING_FORWARDED); // 閫氶亾瀛樺湪锛屽彂181锛屽懠鍙浆鎺ヤ腑
+				}else if(channel == null && gbStream != null){
+					Boolean streamReady = zlmrtpServerFactory.isStreamReady(gbStream.getApp(), gbStream.getStream());
+					if (!streamReady) {
+						logger.info("[ app={}, stream={} ]閫氶亾绂荤嚎锛岃繑鍥�400",gbStream.getApp(), gbStream.getStream());
+						responseAck(evt, Response.BAD_REQUEST, "channel [" + gbStream.getGbId() + "] offline");
 						return;
 					}
 					responseAck(evt, Response.CALL_IS_BEING_FORWARDED); // 閫氶亾瀛樺湪锛屽彂181锛屽懠鍙浆鎺ヤ腑
@@ -240,34 +248,30 @@
 					// 鍐欏叆redis锛� 瓒呮椂鏃跺洖澶�
 					redisCatchStorage.updateSendRTPSever(sendRtpItem);
 
-					// 妫�娴嬬洿鎾祦鏄惁鍦ㄧ嚎
-					Boolean streamReady = zlmrtpServerFactory.isStreamReady(gbStream.getApp(), gbStream.getStream());
-					if (streamReady) {
-						sendRtpItem.setStatus(1);
-						redisCatchStorage.updateSendRTPSever(sendRtpItem);
-						// TODO 娣诲姞瀵箃cp鐨勬敮鎸�
-						ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo();
-						StringBuffer content = new StringBuffer(200);
-						content.append("v=0\r\n");
-						content.append("o="+"00000"+" 0 0 IN IP4 "+mediaInfo.getWanIp()+"\r\n");
-						content.append("s=Play\r\n");
-						content.append("c=IN IP4 "+mediaInfo.getWanIp()+"\r\n");
-						content.append("t=0 0\r\n");
-						content.append("m=video "+ sendRtpItem.getLocalPort()+" RTP/AVP 96\r\n");
-						content.append("a=sendonly\r\n");
-						content.append("a=rtpmap:96 PS/90000\r\n");
-						content.append("y="+ ssrc + "\r\n");
-						content.append("f=\r\n");
+					sendRtpItem.setStatus(1);
+					redisCatchStorage.updateSendRTPSever(sendRtpItem);
+					// TODO 娣诲姞瀵箃cp鐨勬敮鎸�
+					ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo();
+					StringBuffer content = new StringBuffer(200);
+					content.append("v=0\r\n");
+					content.append("o="+"00000"+" 0 0 IN IP4 "+mediaInfo.getWanIp()+"\r\n");
+					content.append("s=Play\r\n");
+					content.append("c=IN IP4 "+mediaInfo.getWanIp()+"\r\n");
+					content.append("t=0 0\r\n");
+					content.append("m=video "+ sendRtpItem.getLocalPort()+" RTP/AVP 96\r\n");
+					content.append("a=sendonly\r\n");
+					content.append("a=rtpmap:96 PS/90000\r\n");
+					content.append("y="+ ssrc + "\r\n");
+					content.append("f=\r\n");
 
-						try {
-							responseAck(evt, content.toString());
-						} catch (SipException e) {
-							e.printStackTrace();
-						} catch (InvalidArgumentException e) {
-							e.printStackTrace();
-						} catch (ParseException e) {
-							e.printStackTrace();
-						}
+					try {
+						responseAck(evt, content.toString());
+					} catch (SipException e) {
+						e.printStackTrace();
+					} catch (InvalidArgumentException e) {
+						e.printStackTrace();
+					} catch (ParseException e) {
+						e.printStackTrace();
 					}
 				}
 
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java
index f04e756..3f997a6 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java
@@ -16,6 +16,7 @@
     private boolean enable;
     private boolean enable_hls;
     private boolean enable_mp4;
+    private String platformGbId;
 
     public String getType() {
         return type;
@@ -114,4 +115,11 @@
     }
 
 
+    public String getPlatformGbId() {
+        return platformGbId;
+    }
+
+    public void setPlatformGbId(String platformGbId) {
+        this.platformGbId = platformGbId;
+    }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
index ab23a11..b2626e3 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
@@ -59,11 +59,7 @@
                 JSONArray tracks = mediaJSON.getJSONArray("tracks");
                 streamInfo = getStreamInfoByAppAndStream(app, stream, tracks);
             }
-
         }
         return streamInfo;
     }
-
-
-
 }
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 b27970a..a77371f 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
@@ -1,9 +1,11 @@
 package com.genersoft.iot.vmp.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.genersoft.iot.vmp.gb28181.bean.GbStream;
 import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
 import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
+import com.genersoft.iot.vmp.service.IGbStreamService;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
 import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;
@@ -13,6 +15,9 @@
 import com.github.pagehelper.PageInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 瑙嗛浠g悊涓氬姟
@@ -38,6 +43,9 @@
     @Autowired
     private PlatformGbStreamMapper platformGbStreamMapper;
 
+    @Autowired
+    private IGbStreamService gbStreamService;
+
 
     @Override
     public String save(StreamProxyItem param) {
@@ -46,6 +54,7 @@
                 param.getStream() );
         param.setDst_url(dstUrl);
         StringBuffer result = new StringBuffer();
+        boolean streamLive = false;
         // 鏇存柊
         if (videoManagerStorager.queryStreamProxy(param.getApp(), param.getStream()) != null) {
             if (videoManagerStorager.updateStreamProxy(param)) {
@@ -62,9 +71,11 @@
         }else { // 鏂板
             if (videoManagerStorager.addStreamProxy(param)){
                 result.append("淇濆瓨鎴愬姛");
+                streamLive = true;
                 if (param.isEnable()) {
                     JSONObject jsonObject = addStreamProxyToZlm(param);
                     if (jsonObject == null) {
+                        streamLive = false;
                         result.append(", 浣嗘槸鍚敤澶辫触锛岃妫�鏌ユ祦鍦板潃鏄惁鍙敤");
                         param.setEnable(false);
                         videoManagerStorager.updateStreamProxy(param);
@@ -73,6 +84,15 @@
             }
 
         }
+        if (param.getPlatformGbId() != null && streamLive) {
+            List<GbStream> gbStreams = new ArrayList<>();
+            gbStreams.add(param);
+            if (gbStreamService.addPlatformInfo(gbStreams, param.getPlatformGbId())){
+                result.append(",  鍏宠仈鍥芥爣骞冲彴[ " + param.getPlatformGbId() + " ]鎴愬姛");
+            }else {
+                result.append(",  鍏宠仈鍥芥爣骞冲彴[ " + param.getPlatformGbId() + " ]澶辫触");
+            }
+        }
         return result.toString();
     }
 
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 62f732e..2baa999 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
@@ -75,10 +75,15 @@
     @ResponseBody
     public WVPResult del(String app, String stream){
         logger.info("绉婚櫎浠g悊锛� " + app + "/" + stream);
-        streamProxyService.del(app, stream);
         WVPResult<Object> result = new WVPResult<>();
-        result.setCode(0);
-        result.setMsg("success");
+        if (app == null || stream == null) {
+            result.setCode(400);
+            result.setMsg(app == null ?"app涓嶈兘涓簄ull":"stream涓嶈兘涓簄ull");
+        }else {
+            streamProxyService.del(app, stream);
+            result.setCode(0);
+            result.setMsg("success");
+        }
         return result;
     }
 
diff --git a/web_src/src/components/ParentPlatformList.vue b/web_src/src/components/ParentPlatformList.vue
index c4e6b0a..ecc174a 100644
--- a/web_src/src/components/ParentPlatformList.vue
+++ b/web_src/src/components/ParentPlatformList.vue
@@ -156,7 +156,7 @@
 
       this.$axios({
       	method: 'get',
-	url:`/api/platform/query/${that.count}/${that.currentPage}`
+	      url:`/api/platform/query/${that.count}/${that.currentPage}`
       }).then(function (res) {
         that.total = res.data.total;
         that.platformList = res.data.list;
diff --git a/web_src/src/components/StreamProxyList.vue b/web_src/src/components/StreamProxyList.vue
index d71de84..72b878f 100644
--- a/web_src/src/components/StreamProxyList.vue
+++ b/web_src/src/components/StreamProxyList.vue
@@ -33,6 +33,14 @@
 						</template>
 					</el-table-column>
 					<el-table-column prop="gbId" label="鍥芥爣缂栫爜" width="180" align="center" show-overflow-tooltip/>
+          <el-table-column label="鍚敤" width="120" align="center">
+            <template slot-scope="scope">
+              <div slot="reference" class="name-wrapper">
+                <el-tag size="medium" v-if="scope.row.enable">宸插惎鐢�</el-tag>
+                <el-tag size="medium" type="info" v-if="!scope.row.enable">鏈惎鐢�</el-tag>
+              </div>
+            </template>
+          </el-table-column>
 					<el-table-column label="杞琀LS" width="120" align="center">
 						<template slot-scope="scope">
 						<div slot="reference" class="name-wrapper">
@@ -49,14 +57,7 @@
 						</div>
 						</template>
 					</el-table-column>
-					<el-table-column label="鍚敤" width="120" align="center">
-						<template slot-scope="scope">
-						<div slot="reference" class="name-wrapper">
-							<el-tag size="medium" v-if="scope.row.enable">宸插惎鐢�</el-tag>
-							<el-tag size="medium" type="info" v-if="!scope.row.enable">鏈惎鐢�</el-tag>
-						</div>
-						</template>
-					</el-table-column>
+
 
 					<el-table-column label="鎿嶄綔" width="360" align="center" fixed="right">
 						<template slot-scope="scope">
diff --git a/web_src/src/components/dialog/StreamProxyEdit.vue b/web_src/src/components/dialog/StreamProxyEdit.vue
index 1c0d3b9..afc03cc 100644
--- a/web_src/src/components/dialog/StreamProxyEdit.vue
+++ b/web_src/src/components/dialog/StreamProxyEdit.vue
@@ -56,6 +56,22 @@
                   <el-option label="缁勬挱" value="2"></el-option>
                 </el-select>
               </el-form-item>
+              <el-form-item label="鍥芥爣骞冲彴">
+                <el-select
+                  v-model="proxyParam.platformGbId"
+                  style="width: 100%"
+                  placeholder="璇烽�夋嫨鍥芥爣骞冲彴"
+                >
+                  <el-option
+                    v-for="item in platformList"
+                    :key="item.name"
+                    :label="item.name"
+                    :value="item.serverGBId">
+                    <span style="float: left">{{ item.name }}</span>
+                    <span style="float: right; color: #8492a6; font-size: 13px">{{ item.serverGBId }}</span>
+                  </el-option>
+                </el-select>
+              </el-form-item>
               <el-form-item label="鍏朵粬閫夐」">
                 <div style="float: left;">
                   <el-checkbox label="鍚敤" v-model="proxyParam.enable" ></el-checkbox>
@@ -106,6 +122,27 @@
       isLoging: false,
       dialogLoading: false,
       onSubmit_text: "绔嬪嵆鍒涘缓",
+      platformList: [{
+          id: 1,
+          enable: true,
+          name: "141",
+          serverGBId: "34020000002000000001",
+          serverGBDomain: "3402000000",
+          serverIP: "192.168.1.141",
+          serverPort: 15060,
+          deviceGBId: "34020000002000000001",
+          deviceIp: "192.168.1.20",
+          devicePort: "5060",
+          username: "34020000002000000001",
+          password: "12345678",
+          expires: "300",
+          keepTimeout: "60",
+          transport: "UDP",
+          characterSet: "GB2312",
+          ptz: false,
+          rtcp: false,
+          status: true,
+      }],
       proxyParam: {
           name: null,
           type: "default",
@@ -120,6 +157,7 @@
           enable: true,
           enable_hls: true,
           enable_mp4: false,
+          platformGbId: null,
       },
 
       rules: {
@@ -140,6 +178,17 @@
       if (proxyParam != null) {
         this.proxyParam = proxyParam;
       }
+
+      let that = this;
+
+      this.$axios({
+        method: 'get',
+        url:`/api/platform/query/10000/0`
+      }).then(function (res) {
+        that.platformList = res.data.list;
+      }).catch(function (error) {
+        console.log(error);
+      });
     },
     onSubmit: function () {
       console.log("onSubmit");
diff --git a/web_src/src/components/dialog/platformEdit.vue b/web_src/src/components/dialog/platformEdit.vue
index 081603e..968e825 100644
--- a/web_src/src/components/dialog/platformEdit.vue
+++ b/web_src/src/components/dialog/platformEdit.vue
@@ -105,9 +105,6 @@
         callback(new Error("璇疯緭鍏ヨ澶囧浗鏍囩紪鍙�"));
       } else {
         var exit = await this.deviceGBIdExit(value);
-        console.log(exit);
-        console.log(exit == "true");
-        console.log(exit === "true");
         if (exit) {
           callback(new Error("璁惧鍥芥爣缂栧彿宸插瓨鍦�"));
         } else {

--
Gitblit v1.8.0