# RTSP视频流管理系统 API 文档 ## 基础信息 - **基础URL**: `http://localhost:8080` - **数据格式**: JSON - **编码**: UTF-8 ## API 端点 ### 1. 视频管理 #### 1.1 列出所有视频 ``` GET /api/videos ``` **响应示例**: ```json { "count": 10, "videos": [ { "filename": "test_stream1.mp4", "full_path": "./output/20251011_082130/test_stream1.mp4", "timestamp_dir": "20251011_082130", "file_size": 787456, "created_time": "2025-10-11 08:21:45", "stream_index": "1" } ] } ``` #### 1.2 列出指定时间戳目录的视频 ``` GET /api/videos/{timestamp} ``` **路径参数**: - `timestamp`: 时间戳目录名,例如 `20251011_082130` --- ### 2. 时间戳目录管理 #### 2.1 列出所有时间戳目录 ``` GET /api/timestamps ``` **响应示例**: ```json { "count": 5, "timestamps": [ { "timestamp": "20251011_082130", "video_count": 2, "total_size": 5748992 } ] } ``` #### 2.2 删除时间戳目录 ``` DELETE /api/timestamp/{timestamp} ``` **路径参数**: - `timestamp`: 要删除的时间戳目录名 **响应示例**: ```json { "success": true, "path": "./output/20251011_082130", "message": "目录删除成功" } ``` --- ### 3. 轮询报告管理 🆕 #### 3.1 列出所有轮询报告 ``` GET /api/reports ``` **响应示例**: ```json { "count": 8, "reports": [ { "timestamp": "20251011_082130", "has_report": true, "summary": { "total_streams": 2, "successful_streams": 2, "failed_streams": 0, "cancelled_streams": 0, "total_bytes": 0, "total_frames": 950, "success_rate": 1.0, "average_duration": 18.0, "earliest_start": "2025-10-11 08:21:30", "latest_end": "2025-10-11 08:21:50" }, "generated_at": "2025-10-11 08:21:50" } ] } ``` **字段说明**: - `total_streams`: 总流数 - `successful_streams`: 成功拉取的流数量 - `failed_streams`: 失败的流数量 - `cancelled_streams`: 取消的流数量 - `success_rate`: 成功率 (0.0-1.0) - `total_frames`: 总接收帧数 - `average_duration`: 平均持续时间(秒) #### 3.2 获取指定时间戳的轮询报告 ``` GET /api/report/{timestamp} ``` **路径参数**: - `timestamp`: 时间戳目录名 **响应示例**: ```json { "report_generated_at": "2025-10-11 08:21:50", "config": { "global_config": { "total_poll_duration_seconds": 60, "max_concurrent_streams": 2, "output_directory": "./output/20251011_082130" }, "streams": [...] }, "scheduler_stats": { "total_tasks": 2, "completed_tasks": 2, "failed_tasks": 0, "cancelled_tasks": 0 }, "streams": [ { "stream_index": 1, "rtsp_url": "rtsp://example.com/stream1", "output_file": "./output/20251011_082130/test_stream2.mp4", "status": "完成", "start_time": "2025-10-11 08:21:30", "end_time": "2025-10-11 08:21:50", "bytes_received": 0, "frames_received": 549, "duration_seconds": 20, "error_message": "", "actual_duration_seconds": 20 } ], "summary": { "total_streams": 2, "successful_streams": 2, "failed_streams": 0, "total_frames": 950, "success_rate": 1.0 } } ``` **流状态说明**: - `完成`: 流成功拉取 - `失败`: 流拉取失败(会有error_message) - `取消`: 流被取消 --- ### 4. 视频文件操作 #### 4.1 删除视频文件 ``` DELETE /api/video?path={path} ``` **查询参数**: - `path`: 视频文件的完整路径 **响应示例**: ```json { "success": true, "path": "./output/20251011_082130/test_stream1.mp4", "message": "文件删除成功" } ``` #### 4.2 播放/下载视频 ``` GET /videos/{timestamp}/{filename} ``` **路径参数**: - `timestamp`: 时间戳目录名 - `filename`: 视频文件名 **功能**: 直接返回视频文件流,支持浏览器播放和下载 --- ## Web 界面 ### 主页 ``` GET / ``` 系统主页,提供快速导航 ### 视频管理界面 ``` GET /manager ``` 完整的视频和报告管理界面,包括: - 时间戳目录浏览 - 所有视频列表 - **轮询报告查看** 🆕 - 视频播放功能 - 文件删除功能 --- ## 错误响应 所有错误响应遵循以下格式: ```json { "error": "错误类型", "message": "详细错误信息" } ``` **常见HTTP状态码**: - `200 OK`: 请求成功 - `400 Bad Request`: 请求参数错误 - `403 Forbidden`: 权限不足 - `404 Not Found`: 资源不存在 - `500 Internal Server Error`: 服务器内部错误 --- ## 使用示例 ### curl 示例 #### 获取所有轮询报告 ```bash curl http://localhost:8080/api/reports ``` #### 获取特定报告详情 ```bash curl http://localhost:8080/api/report/20251011_082130 ``` #### 删除视频文件 ```bash curl -X DELETE "http://localhost:8080/api/video?path=./output/20251011_082130/test_stream1.mp4" ``` ### JavaScript 示例 ```javascript // 获取所有报告 async function loadReports() { const response = await fetch('http://localhost:8080/api/reports'); const data = await response.json(); console.log(`共有 ${data.count} 个报告`); return data.reports; } // 获取特定报告 async function getReport(timestamp) { const response = await fetch(`http://localhost:8080/api/report/${timestamp}`); const report = await response.json(); return report; } ``` --- ## 注意事项 1. **CORS支持**: API支持跨域请求 2. **文件路径安全**: 删除操作会检查文件路径,只能删除output目录下的文件 3. **视频播放**: 支持HTTP Range请求,可以拖动播放进度 4. **轮询报告**: 每次任务执行都会生成独立的JSON报告文件 5. **失败流展示**: 报告中包含所有流的状态,包括失败和未拉取成功的流 ## 更新日志 ### v1.1.0 (2025-10-11) - ✨ 新增轮询报告API (`/api/reports`, `/api/report/{timestamp}`) - ✨ Web界面新增"轮询报告"选项卡 - ✨ 报告展示包含成功和失败的流信息 - 🔧 优化API文档和错误处理