Commit 5ba39861d73ee8c0332a2e37c1e5e65531f14f28

Authored by panlinlin
1 parent 87acd73e

修复添加级联平台是三个布尔字段无效的bug

src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java
@@ -81,7 +81,7 @@ public class ParentPlatform { @@ -81,7 +81,7 @@ public class ParentPlatform {
81 /** 81 /**
82 * 允许云台控制 82 * 允许云台控制
83 */ 83 */
84 - private boolean PTZEnable; 84 + private boolean ptz;
85 85
86 /** 86 /**
87 * RTCP流保活 87 * RTCP流保活
@@ -220,12 +220,12 @@ public class ParentPlatform { @@ -220,12 +220,12 @@ public class ParentPlatform {
220 this.characterSet = characterSet; 220 this.characterSet = characterSet;
221 } 221 }
222 222
223 - public boolean isPTZEnable() {  
224 - return PTZEnable; 223 + public boolean isPtz() {
  224 + return ptz;
225 } 225 }
226 226
227 - public void setPTZEnable(boolean PTZEnable) {  
228 - this.PTZEnable = PTZEnable; 227 + public void setPtz(boolean ptz) {
  228 + this.ptz = ptz;
229 } 229 }
230 230
231 public boolean isRtcp() { 231 public boolean isRtcp() {
@@ -251,4 +251,5 @@ public class ParentPlatform { @@ -251,4 +251,5 @@ public class ParentPlatform {
251 public void setChannelCount(int channelCount) { 251 public void setChannelCount(int channelCount) {
252 this.channelCount = channelCount; 252 this.channelCount = channelCount;
253 } 253 }
  254 +
254 } 255 }
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -117,6 +117,10 @@ public class ZLMHttpHookListener { @@ -117,6 +117,10 @@ public class ZLMHttpHookListener {
117 if (logger.isDebugEnabled()) { 117 if (logger.isDebugEnabled()) {
118 logger.debug("ZLM HOOK on_play API调用,参数:" + json.toString()); 118 logger.debug("ZLM HOOK on_play API调用,参数:" + json.toString());
119 } 119 }
  120 + ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_play, json);
  121 + if (subscribe != null ) {
  122 + subscribe.response(json);
  123 + }
120 JSONObject ret = new JSONObject(); 124 JSONObject ret = new JSONObject();
121 ret.put("code", 0); 125 ret.put("code", 0);
122 ret.put("msg", "success"); 126 ret.put("msg", "success");
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java
@@ -70,6 +70,27 @@ public class ZLMHttpHookSubscribe { @@ -70,6 +70,27 @@ public class ZLMHttpHookSubscribe {
70 return event; 70 return event;
71 } 71 }
72 72
  73 + public void removeSubscribe(HookType type, JSONObject hookResponse) {
  74 + Map<JSONObject, Event> eventMap = allSubscribes.get(type);
  75 + if (eventMap == null) {
  76 + return;
  77 + }
  78 + for (JSONObject key : eventMap.keySet()) {
  79 + Boolean result = null;
  80 + for (String s : key.keySet()) {
  81 + if (result == null) {
  82 + result = key.getString(s).equals(hookResponse.getString(s));
  83 + }else {
  84 + result = result && key.getString(s).equals(hookResponse.getString(s));
  85 + }
  86 +
  87 + }
  88 + if (result) {
  89 + eventMap.remove(key);
  90 + }
  91 + }
  92 + }
  93 +
73 /** 94 /**
74 * 获取某个类型的所有的订阅 95 * 获取某个类型的所有的订阅
75 * @param type 96 * @param type
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
@@ -42,6 +42,9 @@ public class ZLMMediaListManager { @@ -42,6 +42,9 @@ public class ZLMMediaListManager {
42 @Autowired 42 @Autowired
43 private IStreamPushService streamPushService; 43 private IStreamPushService streamPushService;
44 44
  45 + @Autowired
  46 + private ZLMHttpHookSubscribe subscribe;
  47 +
45 48
46 public void updateMediaList() { 49 public void updateMediaList() {
47 storager.clearMediaList(); 50 storager.clearMediaList();
@@ -66,6 +69,15 @@ public class ZLMMediaListManager { @@ -66,6 +69,15 @@ public class ZLMMediaListManager {
66 69
67 if (streamPushItems != null) { 70 if (streamPushItems != null) {
68 storager.updateMediaList(streamPushItems); 71 storager.updateMediaList(streamPushItems);
  72 + for (StreamPushItem streamPushItem : streamPushItems) {
  73 + JSONObject jsonObject = new JSONObject();
  74 + jsonObject.put("app", streamPushItem.getApp());
  75 + jsonObject.put("stream", streamPushItem.getStream());
  76 + subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_play,jsonObject,(response)->{
  77 + System.out.println(1222211111);
  78 + updateMedia(response.getString("app"), response.getString("stream"));
  79 + });
  80 + }
69 } 81 }
70 })); 82 }));
71 83
@@ -73,6 +85,12 @@ public class ZLMMediaListManager { @@ -73,6 +85,12 @@ public class ZLMMediaListManager {
73 85
74 public void addMedia(String app, String streamId) { 86 public void addMedia(String app, String streamId) {
75 //使用异步更新推流 87 //使用异步更新推流
  88 + updateMedia(app, streamId);
  89 + }
  90 +
  91 +
  92 + public void updateMedia(String app, String streamId) {
  93 + //使用异步更新推流
76 zlmresTfulUtils.getMediaList(app, streamId, "rtmp", json->{ 94 zlmresTfulUtils.getMediaList(app, streamId, "rtmp", json->{
77 95
78 if (json == null) return; 96 if (json == null) return;
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
@@ -123,7 +123,7 @@ public class ZLMRunner implements CommandLineRunner { @@ -123,7 +123,7 @@ public class ZLMRunner implements CommandLineRunner {
123 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"); 123 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");
124 param.put("hook.enable","1"); 124 param.put("hook.enable","1");
125 param.put("hook.on_flow_report",""); 125 param.put("hook.on_flow_report","");
126 - param.put("hook.on_play",""); 126 + param.put("hook.on_play",String.format("%s/on_play", hookPrex));
127 param.put("hook.on_http_access",""); 127 param.put("hook.on_http_access","");
128 param.put("hook.on_publish",String.format("%s/on_publish", hookPrex)); 128 param.put("hook.on_publish",String.format("%s/on_publish", hookPrex));
129 param.put("hook.on_record_mp4",""); 129 param.put("hook.on_record_mp4","");
src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
@@ -14,10 +14,10 @@ import java.util.List; @@ -14,10 +14,10 @@ import java.util.List;
14 public interface ParentPlatformMapper { 14 public interface ParentPlatformMapper {
15 15
16 @Insert("INSERT INTO parent_platform (enable, name, serverGBId, serverGBDomain, serverIP, serverPort, deviceGBId, deviceIp, " + 16 @Insert("INSERT INTO parent_platform (enable, name, serverGBId, serverGBDomain, serverIP, serverPort, deviceGBId, deviceIp, " +
17 - " devicePort, username, password, expires, keepTimeout, transport, characterSet, PTZEnable, rtcp, " + 17 + " devicePort, username, password, expires, keepTimeout, transport, characterSet, ptz, rtcp, " +
18 " status) " + 18 " status) " +
19 " VALUES (${enable}, '${name}', '${serverGBId}', '${serverGBDomain}', '${serverIP}', ${serverPort}, '${deviceGBId}', '${deviceIp}', " + 19 " VALUES (${enable}, '${name}', '${serverGBId}', '${serverGBDomain}', '${serverIP}', ${serverPort}, '${deviceGBId}', '${deviceIp}', " +
20 - " '${devicePort}', '${username}', '${password}', '${expires}', '${keepTimeout}', '${transport}', '${characterSet}', ${PTZEnable}, ${rtcp}, " + 20 + " '${devicePort}', '${username}', '${password}', '${expires}', '${keepTimeout}', '${transport}', '${characterSet}', ${ptz}, ${rtcp}, " +
21 " ${status})") 21 " ${status})")
22 int addParentPlatform(ParentPlatform parentPlatform); 22 int addParentPlatform(ParentPlatform parentPlatform);
23 23
@@ -36,7 +36,7 @@ public interface ParentPlatformMapper { @@ -36,7 +36,7 @@ public interface ParentPlatformMapper {
36 "keepTimeout=#{keepTimeout}, " + 36 "keepTimeout=#{keepTimeout}, " +
37 "transport=#{transport}, " + 37 "transport=#{transport}, " +
38 "characterSet=#{characterSet}, " + 38 "characterSet=#{characterSet}, " +
39 - "PTZEnable=#{PTZEnable}, " + 39 + "ptz=#{ptz}, " +
40 "rtcp=#{rtcp}, " + 40 "rtcp=#{rtcp}, " +
41 "status=#{status} " + 41 "status=#{status} " +
42 "WHERE serverGBId=#{serverGBId}") 42 "WHERE serverGBId=#{serverGBId}")
src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java 0 → 100644
  1 +package com.genersoft.iot.vmp.vmanager.server;
  2 +
  3 +import com.genersoft.iot.vmp.VManageBootstrap;
  4 +import com.genersoft.iot.vmp.utils.SpringBeanFactory;
  5 +import com.genersoft.iot.vmp.vmanager.gbStream.bean.GbStreamParam;
  6 +import gov.nist.javax.sip.SipStackImpl;
  7 +import org.springframework.beans.factory.annotation.Autowired;
  8 +import org.springframework.context.ConfigurableApplicationContext;
  9 +import org.springframework.web.bind.annotation.*;
  10 +
  11 +import javax.sip.ListeningPoint;
  12 +import javax.sip.ObjectInUseException;
  13 +import javax.sip.SipProvider;
  14 +import java.util.Iterator;
  15 +
  16 +@CrossOrigin
  17 +@RestController
  18 +@RequestMapping("/api/server")
  19 +public class ServerController {
  20 +
  21 + @Autowired
  22 + private ConfigurableApplicationContext context;
  23 +
  24 +
  25 + @RequestMapping(value = "/restart")
  26 + @ResponseBody
  27 + public Object restart(){
  28 + Thread restartThread = new Thread(new Runnable() {
  29 + @Override
  30 + public void run() {
  31 + try {
  32 + Thread.sleep(3000);
  33 + SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
  34 + SipStackImpl stack = (SipStackImpl)up.getSipStack();
  35 + stack.stop();
  36 + Iterator listener = stack.getListeningPoints();
  37 + while (listener.hasNext()) {
  38 + stack.deleteListeningPoint((ListeningPoint) listener.next());
  39 + }
  40 + Iterator providers = stack.getSipProviders();
  41 + while (providers.hasNext()) {
  42 + stack.deleteSipProvider((SipProvider) providers.next());
  43 + }
  44 + VManageBootstrap.restart();
  45 + } catch (InterruptedException ignored) {
  46 + } catch (ObjectInUseException e) {
  47 + e.printStackTrace();
  48 + }
  49 + }
  50 + });
  51 +
  52 + restartThread.setDaemon(false);
  53 + restartThread.start();
  54 + return "success";
  55 + }
  56 +}
src/main/resources/wvp.sqlite
No preview for this file type
web_src/src/components/PushVideoList.vue
@@ -15,8 +15,6 @@ @@ -15,8 +15,6 @@
15 </el-table-column> 15 </el-table-column>
16 <el-table-column prop="stream" label="流ID" width="240" align="center"> 16 <el-table-column prop="stream" label="流ID" width="240" align="center">
17 </el-table-column> 17 </el-table-column>
18 - <el-table-column prop="totalReaderCount" label="在线人数" width="240" align="center">  
19 - </el-table-column>  
20 <el-table-column prop="gbId" label="国标编码" width="150" align="center"> 18 <el-table-column prop="gbId" label="国标编码" width="150" align="center">
21 </el-table-column> 19 </el-table-column>
22 <el-table-column label="开始时间" align="center" > 20 <el-table-column label="开始时间" align="center" >
web_src/src/components/dialog/platformEdit.vue
@@ -75,7 +75,7 @@ @@ -75,7 +75,7 @@
75 </el-form-item> 75 </el-form-item>
76 <el-form-item label="其他选项"> 76 <el-form-item label="其他选项">
77 <el-checkbox label="启用" v-model="platform.enable" @change="checkExpires"></el-checkbox> 77 <el-checkbox label="启用" v-model="platform.enable" @change="checkExpires"></el-checkbox>
78 - <el-checkbox label="云台控制" v-model="platform.PTZEnable"></el-checkbox> 78 + <el-checkbox label="云台控制" v-model="platform.ptz"></el-checkbox>
79 <el-checkbox label="RTCP保活" v-model="platform.rtcp"></el-checkbox> 79 <el-checkbox label="RTCP保活" v-model="platform.rtcp"></el-checkbox>
80 </el-form-item> 80 </el-form-item>
81 <el-form-item> 81 <el-form-item>
@@ -120,28 +120,10 @@ export default { @@ -120,28 +120,10 @@ export default {
120 showDialog: false, 120 showDialog: false,
121 isLoging: false, 121 isLoging: false,
122 onSubmit_text: "立即创建", 122 onSubmit_text: "立即创建",
123 - // platform: {  
124 - // enable: false,  
125 - // PTZEnable: true,  
126 - // rtcp: false,  
127 - // name: null,  
128 - // serverGBId: null,  
129 - // serverGBDomain: null,  
130 - // serverIP: null,  
131 - // serverPort: null,  
132 - // deviceGBId: null,  
133 - // deviceIp: null,  
134 - // devicePort: null,  
135 - // username: null,  
136 - // password: null,  
137 - // expires: 300,  
138 - // keepTimeout: 60,  
139 - // transport: "UDP",  
140 - // characterSet: "GB2312",  
141 - // }, 123 +
142 platform: { 124 platform: {
143 enable: true, 125 enable: true,
144 - PTZEnable: true, 126 + ptz: true,
145 rtcp: false, 127 rtcp: false,
146 name: "测试001", 128 name: "测试001",
147 serverGBId: "34020000002000000001", 129 serverGBId: "34020000002000000001",