From 5ba39861d73ee8c0332a2e37c1e5e65531f14f28 Mon Sep 17 00:00:00 2001 From: panlinlin <648540858@qq.com> Date: 星期二, 06 四月 2021 18:08:58 +0800 Subject: [PATCH] 修复添加级联平台是三个布尔字段无效的bug --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java | 21 +++++++ src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java | 2 web_src/src/components/dialog/platformEdit.vue | 24 +------- src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java | 11 ++- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 4 + web_src/src/components/PushVideoList.vue | 2 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java | 18 ++++++ src/main/resources/wvp.sqlite | 0 src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java | 6 +- src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java | 56 ++++++++++++++++++ 10 files changed, 112 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java index 0aec885..56d5e9c 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java @@ -81,7 +81,7 @@ /** * 鍏佽浜戝彴鎺у埗 */ - private boolean PTZEnable; + private boolean ptz; /** * RTCP娴佷繚娲� @@ -220,12 +220,12 @@ this.characterSet = characterSet; } - public boolean isPTZEnable() { - return PTZEnable; + public boolean isPtz() { + return ptz; } - public void setPTZEnable(boolean PTZEnable) { - this.PTZEnable = PTZEnable; + public void setPtz(boolean ptz) { + this.ptz = ptz; } public boolean isRtcp() { @@ -251,4 +251,5 @@ public void setChannelCount(int channelCount) { this.channelCount = channelCount; } + } 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 0065b21..835dd9c 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 @@ -117,6 +117,10 @@ if (logger.isDebugEnabled()) { logger.debug("ZLM HOOK on_play API璋冪敤锛屽弬鏁帮細" + json.toString()); } + ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_play, json); + if (subscribe != null ) { + subscribe.response(json); + } JSONObject ret = new JSONObject(); ret.put("code", 0); ret.put("msg", "success"); diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java index 5aee00c..1633f43 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java @@ -70,6 +70,27 @@ return event; } + public void removeSubscribe(HookType type, JSONObject hookResponse) { + Map<JSONObject, Event> eventMap = allSubscribes.get(type); + if (eventMap == null) { + return; + } + for (JSONObject key : eventMap.keySet()) { + Boolean result = null; + for (String s : key.keySet()) { + if (result == null) { + result = key.getString(s).equals(hookResponse.getString(s)); + }else { + result = result && key.getString(s).equals(hookResponse.getString(s)); + } + + } + if (result) { + eventMap.remove(key); + } + } + } + /** * 鑾峰彇鏌愪釜绫诲瀷鐨勬墍鏈夌殑璁㈤槄 * @param type diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java index 1bf5162..659502e 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java @@ -42,6 +42,9 @@ @Autowired private IStreamPushService streamPushService; + @Autowired + private ZLMHttpHookSubscribe subscribe; + public void updateMediaList() { storager.clearMediaList(); @@ -66,6 +69,15 @@ if (streamPushItems != null) { storager.updateMediaList(streamPushItems); + for (StreamPushItem streamPushItem : streamPushItems) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("app", streamPushItem.getApp()); + jsonObject.put("stream", streamPushItem.getStream()); + subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_play,jsonObject,(response)->{ + System.out.println(1222211111); + updateMedia(response.getString("app"), response.getString("stream")); + }); + } } })); @@ -73,6 +85,12 @@ public void addMedia(String app, String streamId) { //浣跨敤寮傛鏇存柊鎺ㄦ祦 + updateMedia(app, streamId); + } + + + public void updateMedia(String app, String streamId) { + //浣跨敤寮傛鏇存柊鎺ㄦ祦 zlmresTfulUtils.getMediaList(app, streamId, "rtmp", json->{ if (json == null) return; 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 edce411..6e0bc60 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 @@ -123,7 +123,7 @@ param.put("ffmpeg.cmd","%s -fflags nobuffer -rtsp_transport tcp -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s"); param.put("hook.enable","1"); param.put("hook.on_flow_report",""); - param.put("hook.on_play",""); + param.put("hook.on_play",String.format("%s/on_play", hookPrex)); param.put("hook.on_http_access",""); param.put("hook.on_publish",String.format("%s/on_publish", hookPrex)); param.put("hook.on_record_mp4",""); diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java index 257ca9e..3049e5b 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java @@ -14,10 +14,10 @@ public interface ParentPlatformMapper { @Insert("INSERT INTO parent_platform (enable, name, serverGBId, serverGBDomain, serverIP, serverPort, deviceGBId, deviceIp, " + - " devicePort, username, password, expires, keepTimeout, transport, characterSet, PTZEnable, rtcp, " + + " devicePort, username, password, expires, keepTimeout, transport, characterSet, ptz, rtcp, " + " status) " + " VALUES (${enable}, '${name}', '${serverGBId}', '${serverGBDomain}', '${serverIP}', ${serverPort}, '${deviceGBId}', '${deviceIp}', " + - " '${devicePort}', '${username}', '${password}', '${expires}', '${keepTimeout}', '${transport}', '${characterSet}', ${PTZEnable}, ${rtcp}, " + + " '${devicePort}', '${username}', '${password}', '${expires}', '${keepTimeout}', '${transport}', '${characterSet}', ${ptz}, ${rtcp}, " + " ${status})") int addParentPlatform(ParentPlatform parentPlatform); @@ -36,7 +36,7 @@ "keepTimeout=#{keepTimeout}, " + "transport=#{transport}, " + "characterSet=#{characterSet}, " + - "PTZEnable=#{PTZEnable}, " + + "ptz=#{ptz}, " + "rtcp=#{rtcp}, " + "status=#{status} " + "WHERE serverGBId=#{serverGBId}") diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java new file mode 100644 index 0000000..675fc01 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java @@ -0,0 +1,56 @@ +package com.genersoft.iot.vmp.vmanager.server; + +import com.genersoft.iot.vmp.VManageBootstrap; +import com.genersoft.iot.vmp.utils.SpringBeanFactory; +import com.genersoft.iot.vmp.vmanager.gbStream.bean.GbStreamParam; +import gov.nist.javax.sip.SipStackImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.web.bind.annotation.*; + +import javax.sip.ListeningPoint; +import javax.sip.ObjectInUseException; +import javax.sip.SipProvider; +import java.util.Iterator; + +@CrossOrigin +@RestController +@RequestMapping("/api/server") +public class ServerController { + + @Autowired + private ConfigurableApplicationContext context; + + + @RequestMapping(value = "/restart") + @ResponseBody + public Object restart(){ + Thread restartThread = new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(3000); + SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider"); + SipStackImpl stack = (SipStackImpl)up.getSipStack(); + stack.stop(); + Iterator listener = stack.getListeningPoints(); + while (listener.hasNext()) { + stack.deleteListeningPoint((ListeningPoint) listener.next()); + } + Iterator providers = stack.getSipProviders(); + while (providers.hasNext()) { + stack.deleteSipProvider((SipProvider) providers.next()); + } + VManageBootstrap.restart(); + } catch (InterruptedException ignored) { + } catch (ObjectInUseException e) { + e.printStackTrace(); + } + } + }); + + restartThread.setDaemon(false); + restartThread.start(); + return "success"; + } +} diff --git a/src/main/resources/wvp.sqlite b/src/main/resources/wvp.sqlite index 3cb64cf..2e73cdb 100644 --- a/src/main/resources/wvp.sqlite +++ b/src/main/resources/wvp.sqlite Binary files differ diff --git a/web_src/src/components/PushVideoList.vue b/web_src/src/components/PushVideoList.vue index 6e73f37..1199a39 100644 --- a/web_src/src/components/PushVideoList.vue +++ b/web_src/src/components/PushVideoList.vue @@ -15,8 +15,6 @@ </el-table-column> <el-table-column prop="stream" label="娴両D" width="240" align="center"> </el-table-column> - <el-table-column prop="totalReaderCount" label="鍦ㄧ嚎浜烘暟" width="240" align="center"> - </el-table-column> <el-table-column prop="gbId" label="鍥芥爣缂栫爜" width="150" align="center"> </el-table-column> <el-table-column label="寮�濮嬫椂闂�" align="center" > diff --git a/web_src/src/components/dialog/platformEdit.vue b/web_src/src/components/dialog/platformEdit.vue index 4a916e8..c3c5ac9 100644 --- a/web_src/src/components/dialog/platformEdit.vue +++ b/web_src/src/components/dialog/platformEdit.vue @@ -75,7 +75,7 @@ </el-form-item> <el-form-item label="鍏朵粬閫夐」"> <el-checkbox label="鍚敤" v-model="platform.enable" @change="checkExpires"></el-checkbox> - <el-checkbox label="浜戝彴鎺у埗" v-model="platform.PTZEnable"></el-checkbox> + <el-checkbox label="浜戝彴鎺у埗" v-model="platform.ptz"></el-checkbox> <el-checkbox label="RTCP淇濇椿" v-model="platform.rtcp"></el-checkbox> </el-form-item> <el-form-item> @@ -120,28 +120,10 @@ showDialog: false, isLoging: false, onSubmit_text: "绔嬪嵆鍒涘缓", - // platform: { - // enable: false, - // PTZEnable: true, - // rtcp: false, - // name: null, - // serverGBId: null, - // serverGBDomain: null, - // serverIP: null, - // serverPort: null, - // deviceGBId: null, - // deviceIp: null, - // devicePort: null, - // username: null, - // password: null, - // expires: 300, - // keepTimeout: 60, - // transport: "UDP", - // characterSet: "GB2312", - // }, + platform: { enable: true, - PTZEnable: true, + ptz: true, rtcp: false, name: "娴嬭瘯001", serverGBId: "34020000002000000001", -- Gitblit v1.8.0