RTSP视频流管理系统 - 功能总结
✅ 已实现的功能
1. 轮询报告展示系统 🆕
1.1 后端API
1.2 前端界面
✅ 轮询报告选项卡
- 在视频管理界面新增"轮询报告"标签页
- 列表展示所有轮询报告
- 显示关键指标:成功率、成功数、失败数、总帧数
✅ 报告详情展示
- 点击"查看详情"按钮展开/收起详细信息
- 卡片式展示每个流的状态
- 使用颜色区分成功(绿色✅)和失败(红色❌)
- 显示完整的流信息:
- RTSP URL
- 状态(完成/失败/取消)
- 输出文件路径
- 开始/结束时间
- 实际持续时间 vs 计划持续时间
- 接收帧数和字节数
- 错误信息(如果失败)
2. 定时任务执行系统
2.1 严格定时执行
- ✅ 按照
total_poll_duration_seconds
严格间隔执行
- ✅ 不等待前一轮任务完成
- ✅ 到时间自动开始新一轮
2.2 超时控制
- ✅ 强制超时机制
- ✅ 超时时自动终止当前任务
- ✅ 在报告中标记超时状态
2.3 时间戳管理
- ✅ 每轮任务独立的时间戳目录
- ✅ 避免文件冲突
- ✅ 易于追溯历史记录
3. HTTP服务与主程序融合
3.1 统一启动
- ✅ HTTP服务器与主程序一起启动
- ✅ 共享同一进程
- ✅ 统一的配置管理
3.2 Web管理界面
- ✅ 主页导航
- ✅ 视频管理界面
- ✅ API文档界面
- ✅ 轮询报告界面 🆕
4. 视频播放功能
4.1 在线播放
- ✅ 浏览器内视频播放
- ✅ 支持播放控制(暂停、快进、音量)
- ✅ 支持进度拖动(Range请求)
4.2 视频信息展示
- ✅ 文件名、大小、创建时间
- ✅ 所属时间戳目录
- ✅ 流索引信息
5. 文件管理功能
5.1 时间戳目录管理
- ✅ 列出所有时间戳目录
- ✅ 显示每个目录的视频数量和总大小
- ✅ 展开/收起目录内容
- ✅ 删除整个时间戳目录
5.2 视频文件管理
- ✅ 列出所有视频文件
- ✅ 按时间戳目录分组
- ✅ 删除单个视频文件
- ✅ 实时统计更新
📊 数据展示特性
1. 统计卡片
2. 报告展示 🆕
每个轮询报告包含:
汇总信息
- 生成时间
- 成功率百分比
- 成功流数量
- 失败流数量
- 总接收帧数
详细流信息
对于每一个流(包括失败的流):
- ✅ 流索引
- ✅ RTSP URL
- ✅ 状态(完成/失败/取消)
- ✅ 开始和结束时间
- ✅ 计划时长 vs 实际时长
- ✅ 接收帧数和字节数
- ✅ 输出文件路径
- ✅ 错误信息(如果有)
3. 视觉化设计
- ✅ 状态使用emoji标识(✅成功 / ❌失败)
- ✅ 颜色编码(绿色=成功,红色=失败)
- ✅ 响应式卡片布局
- ✅ 渐变背景设计
- ✅ 平滑动画效果
🔌 API端点总览
视频相关
方法 |
端点 |
功能 |
GET |
/api/videos |
列出所有视频 |
GET |
/api/videos/{timestamp} |
列出指定时间戳的视频 |
DELETE |
/api/video?path={path} |
删除视频文件 |
GET |
/videos/{timestamp}/{filename} |
播放/下载视频 |
时间戳相关
方法 |
端点 |
功能 |
GET |
/api/timestamps |
列出所有时间戳目录 |
DELETE |
/api/timestamp/{timestamp} |
删除时间戳目录 |
报告相关 🆕
方法 |
端点 |
功能 |
GET |
/api/reports |
列出所有轮询报告 |
GET |
/api/report/{timestamp} |
获取详细报告 |
Web界面
方法 |
端点 |
功能 |
GET |
/ |
主页 |
GET |
/manager |
管理界面 |
GET |
/api |
API文档 |
🎯 使用场景
场景1: 监控流拉取状态
- 打开管理界面的"轮询报告"选项卡
- 查看所有轮询的成功率
- 点击查看详情,检查每个流的状态
- 对于失败的流,查看错误信息
场景2: 定期任务执行
- 配置
total_poll_duration_seconds
设置轮询间隔
- 配置
poll_cycles
设置执行轮数
- 系统自动按时间间隔执行任务
- 每轮生成独立的报告
场景3: 视频文件管理
- 在"时间戳目录"选项卡查看所有录制批次
- 展开目录查看视频文件
- 点击播放按钮在线预览
- 删除不需要的文件或整个目录
场景4: API集成
- 通过
/api/reports
获取所有报告列表
- 通过
/api/report/{timestamp}
获取详细数据
- 解析JSON数据进行自定义分析
- 集成到其他监控系统
🔍 报告内容示例
成功的流
{
"stream_index": 1,
"rtsp_url": "rtsp://example.com/stream1",
"status": "完成",
"frames_received": 549,
"actual_duration_seconds": 20,
"error_message": ""
}
失败的流
{
"stream_index": 2,
"rtsp_url": "rtsp://invalid.com/stream2",
"status": "失败",
"frames_received": 0,
"actual_duration_seconds": 3,
"error_message": "连接超时"
}
📝 技术特性
后端
- C++ 实现
- Boost.Asio 异步网络库
- Boost.JSON JSON处理
- FFmpeg 视频处理
- 多线程并发调度
前端
- 原生JavaScript(无框架依赖)
- 响应式设计
- Fetch API异步请求
- HTML5 Video播放器
- CSS Grid/Flexbox布局
数据存储
- JSON格式报告文件
- 文本格式报告(可读性)
- CSV格式流数据(便于分析)
🚀 下一步可能的增强
实时监控
- WebSocket实时推送任务状态
- 进度条实时更新
数据可视化
高级筛选
导出功能
告警系统
📌 注意事项
- 端口占用: HTTP服务默认使用8080端口
- 文件权限: 确保对output目录有读写权限
- RTSP流: 确保RTSP流可访问
- 超时设置: 根据网络情况调整超时参数
- 存储空间: 定期清理旧的视频文件
✨ 总结
当前系统已经实现了完整的RTSP流拉取、管理和监控功能:
- ✅ 严格的定时任务执行机制
- ✅ 完整的轮询报告系统(包括成功和失败的流)
- ✅ 友好的Web管理界面
- ✅ RESTful API接口
- ✅ 在线视频播放
- ✅ 文件管理功能
系统可以通过Web界面或API轻松查看每次轮询的结果,包括所有流的详细状态,无论成功还是失败!