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