This commit is contained in:
Orange
2025-05-08 14:19:03 +08:00
parent e33d5d7fba
commit 33c50a8e60
28 changed files with 67 additions and 45 deletions

View File

@@ -26,7 +26,7 @@ ruoyi-wvp是基于ruoyi-vue和wvp框架的全部开源的GB/T 28181-2016标准
## 内置功能 ## 内置功能
1. 原若依全部功能:原若依全部功能,包含用户管理、角色管理、部门管理及系统监控等。 1. 原若依全部功能:原若依全部功能,包含用户管理、角色管理、部门管理及系统监控等。
2. 国标设备:国标设备完成注册后,平台自动展示设备详情,支持查看设备通道、云台控制及便捷点播视频等多样化功能。 2. 国标设备:国标设备完成注册后,平台自动展示设备详情,支持查看设备通道及便捷点播视频等多样化功能。
3. 云端录像:用户可轻松查看或下载国标设备所存储的云端录像视频内容。 3. 云端录像:用户可轻松查看或下载国标设备所存储的云端录像视频内容。
4. 推流列表:清晰呈现推流及可推流设备通道信息,支持一键播放视频与便捷国标通道配置等操作。 4. 推流列表:清晰呈现推流及可推流设备通道信息,支持一键播放视频与便捷国标通道配置等操作。
5. 拉流列表:清晰呈现拉流及可拉流设备通道信息,支持一键播放视频与便捷国标通道配置等操作。 5. 拉流列表:清晰呈现拉流及可拉流设备通道信息,支持一键播放视频与便捷国标通道配置等操作。
@@ -36,22 +36,12 @@ ruoyi-wvp是基于ruoyi-vue和wvp框架的全部开源的GB/T 28181-2016标准
9. 通道管理:与行政分组和业务分组深度关联,实现通道精细化和高效化管理,形成多维度的管理逻辑。 9. 通道管理:与行政分组和业务分组深度关联,实现通道精细化和高效化管理,形成多维度的管理逻辑。
10. 节点管理实时查看ZLMediaKit节点的状态、负载及资源分配详情。 10. 节点管理实时查看ZLMediaKit节点的状态、负载及资源分配详情。
11. 分屏监控支持4/6/9分屏自由切换实时掌控多区域画面提升安防巡查效率。 11. 分屏监控支持4/6/9分屏自由切换实时掌控多区域画面提升安防巡查效率。
12. 设备录像:支持点播设备录像和下载功能。
## 非开源功能-onvif协议 ## 非开源功能
1. onvif设备发现内网环境下可一键扫描并查看所有开启ONVIF协议的设备信息实现高效集中管控。 1. onvif设备发现内网环境下可一键扫描并查看所有开启ONVIF协议的设备信息实现高效集中管控。
2. onvif设备嗅探通过IP地址与账号密码自动探测设备快速获取设备信息并启用实时直播功能。 2. onvif设备嗅探通过IP地址与账号密码自动探测设备快速获取设备信息并启用实时直播功能。
3. onvif设备管理实现参数配置及实时视频点播简化多品牌设备管控。 3. onvif设备管理实现参数配置及实时视频点播简化多品牌设备管控。
4. onvif云台功能实现绝对位置移动和连续移动。
## 非开源功能-ISUP协议
1. 设备管理、视频点播、云台控制。
## 非开源功能-rtsp协议
1. 设备管理、视频点播。
## 前端源码 ## 前端源码
@@ -82,15 +72,7 @@ ruoyi-wvp是基于ruoyi-vue和wvp框架的全部开源的GB/T 28181-2016标准
</tr> </tr>
<tr> <tr>
<td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/17/350dcf28536448349a8ab4927a9e192e.png"/></td> <td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/17/350dcf28536448349a8ab4927a9e192e.png"/></td>
<td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/24/aba0df58f83144b4aa9ccf9f444a0238.png"/></td> <td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/17/a383b8369edb421080168fea74e4e4f2.png"/></td>
</tr>
<tr>
<td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/24/37be5453cecb4fe78346ce9e9e468708.png"/></td>
<td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/24/a98953be2b1b4058a81b1a8d524fda11.png"/></td>
</tr>
<tr>
<td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/24/0a83d0787a824e528b21425951f4fd0b.png"/></td>
<td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/24/9fc317f4c6b44623938e5b0a95f5a86f.png"/></td>
</tr> </tr>
<tr> <tr>
<td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/17/34c300506ce74302be2f5bd63fca270f.png"/></td> <td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/17/34c300506ce74302be2f5bd63fca270f.png"/></td>
@@ -119,22 +101,7 @@ ruoyi-wvp是基于ruoyi-vue和wvp框架的全部开源的GB/T 28181-2016标准
<table> <table>
<tr> <tr>
<td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/17/84687cc86b934b70a5940ab44d3f1122.png"/></td> <td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/17/84687cc86b934b70a5940ab44d3f1122.png"/></td>
<td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/24/ae974591674c4580ba9e695108a58e9b.png"/></td> <td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/17/fe10bf8264e3489299e9d26950a2ad24.png"/></td>
</tr>
</table>
## isup播放示例图
<table>
<tr>
<td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/24/8ac1339ac5584a2090f529f61da50093.png"/></td>
</tr>
</table>
## rtsp播放示例图
<table>
<tr>
<td><img src="https://gdhxkj.oss-cn-guangzhou.aliyuncs.com/2025/04/24/e35fc83314c54b9a91eb6ddbe2185e7b.png"/></td>
</tr> </tr>
</table> </table>

View File

@@ -43,6 +43,7 @@ public class CacheController
caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交")); caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理")); caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理"));
caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数")); caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数"));
caches.add(new SysCache(CacheConstants.SYS_WORK_LIST, "工作台数据"));
} }
@PreAuthorize("@ss.hasPermi('monitor:cache:list')") @PreAuthorize("@ss.hasPermi('monitor:cache:list')")

View File

@@ -41,4 +41,9 @@ public class CacheConstants
* 登录账户密码错误次数 redis key * 登录账户密码错误次数 redis key
*/ */
public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:"; public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
/**
* 工作台数据 redis key
*/
public static final String SYS_WORK_LIST = "sys_work_list:";
} }

View File

@@ -21,4 +21,14 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<dependencies>
<!-- 通用工具-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
</dependency>
</dependencies>
</project> </project>

View File

@@ -17,4 +17,13 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<dependencies>
<!-- 通用工具-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
</dependency>
</dependencies>
</project> </project>

View File

@@ -17,4 +17,14 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<dependencies>
<!-- 通用工具-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
</dependency>
</dependencies>
</project> </project>

View File

@@ -85,6 +85,19 @@ public class DeviceQueryController extends BaseController {
return success(deviceService.getDeviceByDeviceId(deviceId)); return success(deviceService.getDeviceByDeviceId(deviceId));
} }
/**
* 查询全部国标设备
*
* @param device 设备
* @return 国标列表
*/
@PreAuthorize("@ss.hasPermi('wvp:device:list')")
@GetMapping("/deviceList")
public AjaxResult deviceList(Device device) {
List<Device> list = deviceService.getAll(device);
return success(list);
}
/** /**
* 分页查询国标设备 * 分页查询国标设备
* *

View File

@@ -1,5 +1,7 @@
package com.ruoyi.wvp.controller; package com.ruoyi.wvp.controller;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.wvp.common.StreamInfo; import com.ruoyi.wvp.common.StreamInfo;
import com.ruoyi.wvp.conf.UserSetting; import com.ruoyi.wvp.conf.UserSetting;
import com.ruoyi.wvp.conf.exception.ControllerException; import com.ruoyi.wvp.conf.exception.ControllerException;
@@ -39,7 +41,7 @@ import java.util.UUID;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/gb_record") @RequestMapping("/api/gb_record")
public class GBRecordController { public class GBRecordController extends BaseController {
@Autowired @Autowired
private SIPCommander cmder; private SIPCommander cmder;
@@ -213,7 +215,7 @@ public class GBRecordController {
@Parameter(name = "channelId", description = "通道国标编号", required = true) @Parameter(name = "channelId", description = "通道国标编号", required = true)
@Parameter(name = "stream", description = "流ID", required = true) @Parameter(name = "stream", description = "流ID", required = true)
@GetMapping("/download/progress/{deviceId}/{channelId}/{stream}") @GetMapping("/download/progress/{deviceId}/{channelId}/{stream}")
public StreamContent getProgress(@PathVariable String deviceId, @PathVariable String channelId, @PathVariable String stream) { public AjaxResult getProgress(@PathVariable String deviceId, @PathVariable String channelId, @PathVariable String stream) {
Device device = deviceService.getDeviceByDeviceId(deviceId); Device device = deviceService.getDeviceByDeviceId(deviceId);
if (device == null) { if (device == null) {
log.warn("[获取历史媒体下载进度] 未找到设备 deviceId: {},channelId:{}", deviceId, channelId); log.warn("[获取历史媒体下载进度] 未找到设备 deviceId: {},channelId:{}", deviceId, channelId);
@@ -229,6 +231,6 @@ public class GBRecordController {
if (downLoadInfo == null) { if (downLoadInfo == null) {
throw new ControllerException(ErrorCode.ERROR404); throw new ControllerException(ErrorCode.ERROR404);
} }
return new StreamContent(downLoadInfo); return success(new StreamContent(downLoadInfo));
} }
} }

View File

@@ -262,6 +262,12 @@ public class PlayController extends BaseController {
return jsonObject; return jsonObject;
} }
/**
* 创建快照 - 抓拍
* @param deviceId
* @param channelId
* @return
*/
@Parameter(name = "deviceId", description = "设备国标编号", required = true) @Parameter(name = "deviceId", description = "设备国标编号", required = true)
@Parameter(name = "channelId", description = "通道国标编号", required = true) @Parameter(name = "channelId", description = "通道国标编号", required = true)
@GetMapping("/snap") @GetMapping("/snap")

View File

@@ -253,10 +253,10 @@ public class WvpServerController extends BaseController {
@GetMapping(value = "/system/info") @GetMapping(value = "/system/info")
@ResponseBody @ResponseBody
public SystemAllInfo getSystemInfo() { public AjaxResult getSystemInfo() {
SystemAllInfo systemAllInfo = redisCatchStorage.getSystemInfo(); SystemAllInfo systemAllInfo = redisCatchStorage.getSystemInfo();
return systemAllInfo; return success(systemAllInfo);
} }
@GetMapping(value = "/media_server/load") @GetMapping(value = "/media_server/load")

View File

@@ -424,7 +424,6 @@ public class SIPCommander implements ISIPCommander {
content.append("a=connection:new\r\n"); content.append("a=connection:new\r\n");
} }
} }
//ssrc //ssrc
content.append("y=" + ssrcInfo.getSsrc() + "\r\n"); content.append("y=" + ssrcInfo.getSsrc() + "\r\n");

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB