# 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文档和使用说明
