From 19049788564257a1bdc09a0a7411f85c15ba3003 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: Fri, 20 Nov 2020 18:02:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0addParentPlatform,=20queryPar?= =?UTF-8?q?entPlatformList=20=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 +- .../iot/vmp/common/VideoManagerConstants.java | 2 + .../iot/vmp/gb28181/bean/ParentPlatform.java | 227 +++++++++++++++ .../vmp/storager/IVideoManagerStorager.java | 22 ++ .../jdbc/VideoManagerJdbcStoragerImpl.java | 16 ++ .../redis/VideoManagerRedisStoragerImpl.java | 30 ++ .../vmanager/platform/PlatformController.java | 48 ++++ web_src/src/components/ParentPlatformList.vue | 258 ++++++++++++++++++ web_src/src/components/UiHeader.vue | 4 +- web_src/src/router/index.js | 6 + 10 files changed, 616 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java create mode 100644 src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java create mode 100644 web_src/src/components/ParentPlatformList.vue diff --git a/README.md b/README.md index 2cf48b1b..50ca236b 100644 --- a/README.md +++ b/README.md @@ -13,13 +13,6 @@ WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台 # gitee同步仓库 https://gitee.com/18010473990/wvp-GB28181.git -# 截图 -![build_1.png](https://github.com/648540858/wiki/blob/master/images/Screenshot_1.png) -![build_1.png](https://github.com/648540858/wiki/blob/master/images/Screenshot_2.png) -![build_1.png](https://github.com/648540858/wiki/blob/master/images/Screenshot_20201012_151459.png) -![build_1.png](https://github.com/648540858/wiki/blob/master/images/Screenshot_20201012_152643.png) -![build_1.png](https://github.com/648540858/wiki/blob/master/images/Screenshot_20201012_151606.png) - # 1.0 支持特性 1. 视频预览; @@ -43,8 +36,12 @@ https://gitee.com/18010473990/wvp-GB28181.git 19. 支持播放h265, g.711格式的流(需要将closeWaitRTPInfo设为false). # 2.0 支持特性 -# 待实现: - [ ] 国标通道向上级联 + - [ ] WEB添加上级平台 + - [ ] 注册 + - [ ] 通道选择 + - [ ] 通道推送 + - [ ] 点播 - [ ] 添加RTSP视频 - [ ] 添加ONVIF探测局域网内的设备 - [ ] 添加RTMP视频 diff --git a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java index f80fd0ea..32d7d5b8 100644 --- a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java +++ b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java @@ -20,6 +20,8 @@ public class VideoManagerConstants { public static final String PLAY_BLACK_PREFIX = "VMP_playback_"; + public static final String PLATFORM_PREFIX = "VMP_platform_"; + public static final String EVENT_ONLINE_REGISTER = "1"; public static final String EVENT_ONLINE_KEEPLIVE = "2"; 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 new file mode 100644 index 00000000..d6a97cf0 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java @@ -0,0 +1,227 @@ +package com.genersoft.iot.vmp.gb28181.bean; + +public class ParentPlatform { + + /** + * 是否启用 + */ + private boolean enable; + + /** + * 名称 + */ + private String name; + + /** + * SIP服务国标编码 + */ + private String serverGBId; + + /** + * SIP服务国标域 + */ + private String serverGBDomain; + + /** + * SIP服务IP + */ + private String serverIP; + + /** + * SIP服务端口 + */ + private int serverPort; + + /** + * 设备国标编号 + */ + private String deviceGBId; + + /** + * 设备ip + */ + private String deviceIp; + + /** + * 设备端口 + */ + private String devicePort; + + /** + * SIP认证用户名(默认使用设备国标编号) + */ + private String username; + + /** + * SIP认证密码 + */ + private String password; + + /** + * 注册周期 (秒) + */ + private String expires; + + /** + * 心跳周期(秒) + */ + private String keepTimeout; + + /** + * 传输协议 + * UDP/TCP + */ + private String transport; + + /** + * 字符集 + */ + private String characterSet; + + /** + * 允许云台控制 + */ + private boolean PTZEnable; + + /** + * RTCP流保活 + */ + private boolean rtcp; + + + public boolean isEnable() { + return enable; + } + + public void setEnable(boolean enable) { + this.enable = enable; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getServerGBId() { + return serverGBId; + } + + public void setServerGBId(String serverGBId) { + this.serverGBId = serverGBId; + } + + public String getServerGBDomain() { + return serverGBDomain; + } + + public void setServerGBDomain(String serverGBDomain) { + this.serverGBDomain = serverGBDomain; + } + + public String getServerIP() { + return serverIP; + } + + public void setServerIP(String serverIP) { + this.serverIP = serverIP; + } + + public int getServerPort() { + return serverPort; + } + + public void setServerPort(int serverPort) { + this.serverPort = serverPort; + } + + public String getDeviceGBId() { + return deviceGBId; + } + + public void setDeviceGBId(String deviceGBId) { + this.deviceGBId = deviceGBId; + } + + public String getDeviceIp() { + return deviceIp; + } + + public void setDeviceIp(String deviceIp) { + this.deviceIp = deviceIp; + } + + public String getDevicePort() { + return devicePort; + } + + public void setDevicePort(String devicePort) { + this.devicePort = devicePort; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getExpires() { + return expires; + } + + public void setExpires(String expires) { + this.expires = expires; + } + + public String getKeepTimeout() { + return keepTimeout; + } + + public void setKeepTimeout(String keepTimeout) { + this.keepTimeout = keepTimeout; + } + + public String getTransport() { + return transport; + } + + public void setTransport(String transport) { + this.transport = transport; + } + + public String getCharacterSet() { + return characterSet; + } + + public void setCharacterSet(String characterSet) { + this.characterSet = characterSet; + } + + public boolean isPTZEnable() { + return PTZEnable; + } + + public void setPTZEnable(boolean PTZEnable) { + this.PTZEnable = PTZEnable; + } + + public boolean isRtcp() { + return rtcp; + } + + public void setRtcp(boolean rtcp) { + this.rtcp = rtcp; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java index fdf4bc33..8842230a 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.MediaServerConfig; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; /** * @Description:视频设备数据存储接口 @@ -191,4 +192,25 @@ public interface IVideoManagerStorager { StreamInfo queryPlaybackByDevice(String deviceId, String channelId); StreamInfo queryPlaybackBySSRC(String ssrc); + + /** + * 更新或添加上级平台 + * @param parentPlatform + */ + boolean updateParentPlatform(ParentPlatform parentPlatform); + + /** + * 删除上级平台 + * @param parentPlatform + */ + boolean deleteParentPlatform(ParentPlatform parentPlatform); + + + /** + * 分页获取上级平台 + * @param page + * @param count + * @return + */ + public PageResult queryParentPlatformList(int page, int count); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java index 75b9c929..645c8034 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java @@ -7,6 +7,7 @@ import com.genersoft.iot.vmp.common.PageResult; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.MediaServerConfig; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; @@ -213,4 +214,19 @@ public class VideoManagerJdbcStoragerImpl implements IVideoManagerStorager { public StreamInfo queryPlaybackBySSRC(String ssrc) { return null; } + + @Override + public boolean updateParentPlatform(ParentPlatform parentPlatform) { + return false; + } + + @Override + public boolean deleteParentPlatform(ParentPlatform parentPlatform) { + return false; + } + + @Override + public PageResult queryParentPlatformList(int page, int count) { + return null; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java index b013c606..f704d567 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java @@ -8,6 +8,7 @@ import com.genersoft.iot.vmp.common.PageResult; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.MediaServerConfig; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -557,4 +558,33 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager { if (playLeys == null || playLeys.size() == 0) return null; return (StreamInfo)redis.get(playLeys.get(0).toString()); } + + @Override + public boolean updateParentPlatform(ParentPlatform parentPlatform) { + // 存储device + return redis.set(VideoManagerConstants.PLATFORM_PREFIX + parentPlatform.getDeviceGBId(), parentPlatform); + } + + @Override + public boolean deleteParentPlatform(ParentPlatform parentPlatform) { + return false; + } + + @Override + public PageResult queryParentPlatformList(int page, int count) { + PageResult pageResult = new PageResult(); + pageResult.setPage(page); + pageResult.setCount(count); + List resultData = new ArrayList<>(); + List parentPlatformList = redis.scan(VideoManagerConstants.PLATFORM_PREFIX + "*"); + pageResult.setTotal(parentPlatformList.size()); + int maxCount = (page + 1)* count; + for (int i = page * count; i < (pageResult.getTotal() > maxCount ? maxCount : pageResult.getTotal() ); i++) { + ParentPlatform parentPlatform =(ParentPlatform)redis.get((String)parentPlatformList.get(i)); + resultData.add(parentPlatform); + + } + pageResult.setData(resultData); + return pageResult; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java new file mode 100644 index 00000000..9f35dd80 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java @@ -0,0 +1,48 @@ +package com.genersoft.iot.vmp.vmanager.platform; + +import com.genersoft.iot.vmp.common.PageResult; +import com.genersoft.iot.vmp.gb28181.bean.Device; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; +import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +import com.genersoft.iot.vmp.vmanager.device.DeviceController; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin +@RestController +@RequestMapping("/api") +public class PlatformController { + + private final static Logger logger = LoggerFactory.getLogger(PlatformController.class); + + @Autowired + private IVideoManagerStorager storager; + + @GetMapping("/platforms") + public PageResult platforms(int page, int count){ + + if (logger.isDebugEnabled()) { + logger.debug("查询所有上级设备API调用"); + } + return storager.queryParentPlatformList(page, count); + } + + @PostMapping("/platforms/add") + public ResponseEntity addPlatform(ParentPlatform parentPlatform){ + + if (logger.isDebugEnabled()) { + logger.debug("查询所有上级设备API调用"); + } + boolean updateResult = storager.updateParentPlatform(parentPlatform); + if (updateResult) { + return new ResponseEntity<>("success", HttpStatus.OK); + }else { + return new ResponseEntity<>("fail", HttpStatus.OK); + } + } +} diff --git a/web_src/src/components/ParentPlatformList.vue b/web_src/src/components/ParentPlatformList.vue new file mode 100644 index 00000000..947adec7 --- /dev/null +++ b/web_src/src/components/ParentPlatformList.vue @@ -0,0 +1,258 @@ + + + + + diff --git a/web_src/src/components/UiHeader.vue b/web_src/src/components/UiHeader.vue index 67f310a6..3c264cdf 100644 --- a/web_src/src/components/UiHeader.vue +++ b/web_src/src/components/UiHeader.vue @@ -3,8 +3,8 @@ 控制台 设备列表 + 国标级联 - 退出 @@ -23,4 +23,4 @@ export default { } } - \ No newline at end of file + diff --git a/web_src/src/router/index.js b/web_src/src/router/index.js index b8f87053..fa4df8c4 100644 --- a/web_src/src/router/index.js +++ b/web_src/src/router/index.js @@ -5,6 +5,7 @@ import control from '../components/control.vue' import videoList from '../components/videoList.vue' import channelList from '../components/channelList.vue' import login from '../components/Login.vue' +import parentPlatformList from '../components/ParentPlatformList.vue' const originalPush = VueRouter.prototype.push VueRouter.prototype.push = function push(location) { @@ -34,6 +35,11 @@ export default new VueRouter({ path: '/channelList/:deviceId/:parentChannelId/:count/:page', name: 'channelList', component: channelList, + },, + { + path: '/parentPlatformList/:platformId/:count/:page', + name: 'parentPlatformList', + component: parentPlatformList, }, ] })