南京交通局拉流代码

wenhongquan 2a87ea0bd3 `fix` 6 dní pred
build a348127335 `fix` 6 dní pred
include a348127335 `fix` 6 dní pred
src 8cc8a2853f `fix` 6 dní pred
.dockerignore a348127335 `fix` 6 dní pred
API_DOCUMENTATION.md a348127335 `fix` 6 dní pred
CMakeLists.txt 9460d97448 `temp fix` 6 dní pred
CMakePresets.json dec4d20136 `init` 3 týždňov pred
DOCKER_FILES_README.md a348127335 `fix` 6 dní pred
DOCKER_README.md a348127335 `fix` 6 dní pred
Dockerfile 2a87ea0bd3 `fix` 6 dní pred
Dockerfile.old 2a87ea0bd3 `fix` 6 dní pred
FEATURES_SUMMARY.md a348127335 `fix` 6 dní pred
HTTP_API_DOC.md 9bbbc5a546 `` 1 týždeň pred
README.md 9bbbc5a546 `` 1 týždeň pred
VIDEO_PLAYER_GUIDE.md 9bbbc5a546 `` 1 týždeň pred
autocmak.py dec4d20136 `init` 3 týždňov pred
config.json b97f71bafe temp fix 6 dní pred
docker-compose.yml 2a87ea0bd3 `fix` 6 dní pred
docker-network-test.sh 529753e188 `fix` 6 dní pred
docker-start.sh 173d31cc54 `fix` 6 dní pred
docker-stop.sh a348127335 `fix` 6 dní pred
http_server_main.cpp 9bbbc5a546 `` 1 týždeň pred
main.cpp b97f71bafe temp fix 6 dní pred
network-test.sh 173d31cc54 `fix` 6 dní pred
quick-rtsp-test.sh 173d31cc54 `fix` 6 dní pred
rtsp-debug.sh a06d922e05 `fix` 6 dní pred
test_http_api.sh 9bbbc5a546 `` 1 týždeň pred
test_report.sh 442eec1d0c fix 3 týždňov pred
test_report_generation.cpp 442eec1d0c fix 3 týždňov pred
video_manager.html 641c2b105e fix 地址问题 6 dní pred
video_test.html 641c2b105e fix 地址问题 6 dní pred

README.md

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)

  • ✅ 实时统计信息展示
  • ✅ 时间戳目录浏览
  • ✅ 视频文件查看
  • ✅ 一键删除功能
  • ✅ 响应式设计

快速开始

编译项目

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视频流拉取

# 使用默认配置文件
./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管理服务器

# 使用默认参数(目录:./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

快速示例

1. 列出所有时间戳目录

curl http://localhost:8080/api/timestamps

2. 列出所有视频

curl http://localhost:8080/api/videos

3. 列出指定时间戳的视频

curl http://localhost:8080/api/videos/20251010_160000

4. 删除单个视频

curl -X DELETE "http://localhost:8080/api/video?path=./output/20251010_160000/test_stream1.mp4"

5. 删除整个时间戳目录

curl -X DELETE http://localhost:8080/api/timestamp/20251010_160000

测试

运行API测试脚本

./test_http_api.sh

该脚本会自动测试所有API端点并显示结果。

配置文件说明

RTSP拉取程序使用JSON配置文件(默认:config.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文档和使用说明