panlinlin
2021-04-06 5ba39861d73ee8c0332a2e37c1e5e65531f14f28
修复添加级联平台是三个布尔字段无效的bug
9个文件已修改
1个文件已添加
144 ■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/wvp.sqlite 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/PushVideoList.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/dialog/platformEdit.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
    }
}
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");
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
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;
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","");
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}")
src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
New file
@@ -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";
    }
}
src/main/resources/wvp.sqlite
Binary files differ
web_src/src/components/PushVideoList.vue
@@ -15,8 +15,6 @@
                    </el-table-column>
                    <el-table-column prop="stream" label="流ID" 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" >
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",