# RTSP视频流管理系统 - 使用指南 ## 项目概述 本项目提供了一套完整的RTSP视频流拉取和管理解决方案,包括: 1. **RTSP视频流拉取程序**:支持并发拉取多个RTSP流,按时间戳自动归档 2. **HTTP管理服务器**:提供RESTful API用于查询和删除视频文件 3. **Web管理界面**:可视化的视频文件管理界面 ## 功能特性 ### 1. RTSP视频流拉取(jtjai_media) - ✅ 支持多轮循环拉取 - ✅ 自动按时间戳创建目录(格式:YYYYMMDD_HHMMSS) - ✅ 并发流控制 - ✅ 权重调度算法 - ✅ 自动生成详细报告(JSON、TXT、CSV格式) ### 2. HTTP管理服务器(jtjai_http_server) - ✅ 列出所有时间戳目录 - ✅ 列出所有视频文件 - ✅ 按时间戳查询视频 - ✅ 删除单个视频文件 - ✅ 删除整个时间戳目录 - ✅ RESTful API设计 - ✅ CORS支持 ### 3. Web管理界面(video_manager.html) - ✅ 实时统计信息展示 - ✅ 时间戳目录浏览 - ✅ 视频文件查看 - ✅ 一键删除功能 - ✅ 响应式设计 ## 快速开始 ### 编译项目 ```bash cd /Users/wenhongquan/CLionProjects/jtjai_media # 编译RTSP拉取程序 cmake --build cmake-build-debug --target jtjai_media # 编译HTTP服务器 cmake --build cmake-build-debug --target jtjai_http_server ``` ### 运行RTSP视频流拉取 ```bash # 使用默认配置文件 ./cmake-build-debug/jtjai_media # 或指定配置文件 ./cmake-build-debug/jtjai_media /path/to/config.json ``` **输出目录结构**: ``` output/ ├── 20251010_160000/ # 第1轮拉取(时间戳命名) │ ├── test_stream1.mp4 │ ├── test_stream2.mp4 │ ├── rtsp_report.json │ ├── report.txt │ └── streams.csv ├── 20251010_170000/ # 第2轮拉取 │ ├── test_stream1.mp4 │ ├── test_stream2.mp4 │ ├── rtsp_report.json │ ├── report.txt │ └── streams.csv └── ... ``` ### 运行HTTP管理服务器 ```bash # 使用默认参数(目录:./output,端口:8080) ./cmake-build-debug/jtjai_http_server # 指定输出目录 ./cmake-build-debug/jtjai_http_server ./output # 指定输出目录和端口 ./cmake-build-debug/jtjai_http_server ./output 8080 ``` 服务器启动后会显示: ``` ======================================== RTSP视频流管理HTTP服务器 ======================================== 输出目录: ./output 监听端口: 8080 HTTP服务器已启动,监听端口: 8080 API端点: GET /api/videos - 列出所有视频 GET /api/timestamps - 列出所有时间戳目录 GET /api/videos/{timestamp} - 列出指定时间戳目录的视频 DELETE /api/video?path={path} - 删除指定视频文件 DELETE /api/timestamp/{timestamp} - 删除指定时间戳目录及其所有文件 HTTP服务器已启动,按 Ctrl+C 停止服务器 ``` ### 使用Web管理界面 1. 确保HTTP服务器正在运行 2. 用浏览器打开 `video_manager.html` 文件 3. 界面会自动连接到 `http://localhost:8080` 并加载数据 **主要功能**: - 📊 查看统计信息(目录数、视频数、总大小) - 📁 浏览时间戳目录 - 🎬 查看视频文件详情 - 🗑️ 删除视频文件或整个目录 - 🔄 一键刷新数据 ## API文档 详细的API文档请参考:[HTTP_API_DOC.md](HTTP_API_DOC.md) ### 快速示例 #### 1. 列出所有时间戳目录 ```bash curl http://localhost:8080/api/timestamps ``` #### 2. 列出所有视频 ```bash curl http://localhost:8080/api/videos ``` #### 3. 列出指定时间戳的视频 ```bash curl http://localhost:8080/api/videos/20251010_160000 ``` #### 4. 删除单个视频 ```bash curl -X DELETE "http://localhost:8080/api/video?path=./output/20251010_160000/test_stream1.mp4" ``` #### 5. 删除整个时间戳目录 ```bash curl -X DELETE http://localhost:8080/api/timestamp/20251010_160000 ``` ## 测试 ### 运行API测试脚本 ```bash ./test_http_api.sh ``` 该脚本会自动测试所有API端点并显示结果。 ## 配置文件说明 RTSP拉取程序使用JSON配置文件(默认:`config.json`): ```json { "global_config": { "total_poll_duration_seconds": 60, // 每轮总时长 "max_concurrent_streams": 2, // 最大并发数 "output_directory": "./output", // 基础输出目录 "report_filename": "rtsp_report.json", "connection_timeout_seconds": 3, "read_timeout_seconds": 5, "poll_cycles": 3, // 轮询次数(-1为无限) "cycle_interval_seconds": 30 // 轮询间隔 }, "streams": [ { "rtsp_url": "rtsp://...", "duration_seconds": 15, "weight": 1.0, "output_filename": "test_stream1.mp4" } ] } ``` ## 文件结构 ``` jtjai_media/ ├── include/ │ ├── config.h # 配置管理 │ ├── rtsp_client.h # RTSP客户端 │ ├── scheduler.h # 任务调度器 │ ├── reporter.h # 报告生成器 │ ├── concurrent_calculator.h # 并发计算器 │ └── http_server.h # HTTP服务器 ├── src/ │ ├── config.cpp │ ├── rtsp_client.cpp │ ├── scheduler.cpp │ ├── reporter.cpp │ ├── concurrent_calculator.cpp │ └── http_server.cpp ├── main.cpp # RTSP拉取主程序 ├── http_server_main.cpp # HTTP服务器主程序 ├── video_manager.html # Web管理界面 ├── config.json # 配置文件 ├── HTTP_API_DOC.md # API文档 ├── test_http_api.sh # API测试脚本 └── README.md # 本文件 ``` ## 工作流程 1. **拉取视频流** - 运行 `jtjai_media` 程序 - 根据配置文件拉取RTSP流 - 每轮拉取自动创建时间戳目录 - 生成详细报告 2. **管理视频文件** - 启动 `jtjai_http_server` 服务器 - 通过API或Web界面查看视频 - 按需删除不需要的视频或目录 3. **监控和维护** - 通过Web界面查看统计信息 - 定期清理旧的视频文件 - 检查报告了解拉取状态 ## 注意事项 1. **存储空间**:视频文件会占用大量存储空间,请定期清理 2. **网络带宽**:并发拉取会占用大量带宽,请根据实际情况调整并发数 3. **安全性**:HTTP服务器没有身份验证,不要暴露到公网 4. **路径安全**:删除操作有路径检查,只能删除输出目录内的文件 ## 常见问题 ### Q: 如何修改HTTP服务器端口? A: 启动时指定端口参数:`./jtjai_http_server ./output 9090` ### Q: 如何查看某个时间段的视频? A: 时间戳目录名包含日期时间(YYYYMMDD_HHMMSS),可以通过API按时间戳查询 ### Q: 删除操作可以撤销吗? A: 不可以,删除操作是永久的,请谨慎操作 ### Q: 如何批量删除旧视频? A: 可以使用API遍历时间戳目录,删除指定日期之前的目录 ## 技术栈 - **C++17** - **Boost**:JSON解析、ASIO网络库 - **FFmpeg**:视频流处理 - **HTML/CSS/JavaScript**:Web界面 ## 更新日志 ### 2025-10-10 - ✅ 实现时间戳目录自动创建 - ✅ 添加HTTP管理服务器 - ✅ 创建Web可视化管理界面 - ✅ 完善API文档和使用说明