# 视频智能理解平台
**Repository Path**: wu563/MediaMind
## Basic Information
- **Project Name**: 视频智能理解平台
- **Description**: 面向内容创作者的视频分析平台,支持多源视频上传、自动提取音频、语音转文字与 AI 内容总结。针对长耗时处理与高并发冲突,采用 消息队列 + 分布式锁 + 分片缓存 构建异步处理链路,提升系统吞吐与稳定性。
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-04-09
- **Last Updated**: 2026-04-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 视频智能理解平台
## 介绍
面向内容创作者的视频分析平台,支持多源视频上传、自动提取音频、语音转文字与 AI 内容总结。针对长耗时处理与高并发冲突,采用 消息队列 + 分布式锁 + 分片缓存 构建异步处理链路,提升系统吞吐与稳定性。
系统可以接入大模型api,自定义提示词,基于 Function Calling 可以实现查询信息和精准总结。
视频平台大多只解决了“存储”和“播放”的问题。DoVideoAI 旨在解决“理解”的问题。 它通过异步架构处理长耗时任务,利用 AI 提取核心价值,让视频不再是黑盒。
## 核心功能
1. 🚀 稳定上传体验
分片断点续传:针对 GB 级大文件(如 4K 课程录像),采用 Redis 维护上传分片状态。实测在 20% 丢包率弱网环境下,上传成功率从 25% 提升至 99%。
秒级响应:引入 RocketMQ 将耗时的“视频分析”动作剥离出主线程。用户上传完成后仅需 50ms 即可得到反馈,后续处理全异步化,彻底告别页面转圈卡死。
2. 🛡️ 高并发防护
分布式锁兜底:使用 Redisson + WatchDog 机制。当多个用户同时上传同一个热门公开课视频时,系统通过 MD5 内容指纹识别,利用分布式锁防止重复转码与 AI 分析,节省算力与 Token 开销。
削峰填谷:Controller 层集成 Redis 令牌桶算法,有效遏制恶意请求与突发流量,保护后端服务不被击穿。
3. 🔄 任务处理流程详解
稳健入口:文件直传 MinIO,避免应用服务器带宽瓶颈。
异步解耦:上传成功后,Controller 仅发送一条消息至 RocketMQ 即刻返回,将长耗时任务留给后台。
安全消费:消费者通过 Redisson 锁住视频 MD5,确保同一视频在同一时刻只有一个线程在处理。
智能重试:针对第三方 AI API 可能的网络抖动,设计了指数退避重试机制,确保任务最终一致性。
## 技术栈
### 后端
SpringBoot + RocketMQ + Redis + MySQL + MyBatis Plus + MinIO + FFmpeg + LangChain4j
### 部署
Docker
### 前端
Vue 3 + Vite
不严谨流程图
```mermaid
graph TD
A[客户端发起请求] --> B{Redis令牌桶限流}
B -- 超过阈值 --> C[拒绝请求 保障可用性]
B -- 获取令牌 --> D[分片并发上传]
D --> E(Redis记录分片状态断点续传)
E --> F[文件上传并合并完成]
F --> G[封装元数据投递RocketMQ]
G --> H[上传接口立即返回 小于50ms]
G --> I[消费者异步拉取消息]
I --> J{计算文件MD5查询去重}
J -- 命中记录 --> K[直接关联并返回历史结果]
J -- 全新视频 --> L[加Redisson分布式锁]
L --> M(WatchDog机制防止长耗时锁过期)
M --> N[调用FFmpeg提取音频]
N --> O[请求硅基流动API生成字幕与总结]
O --> P(指数退避重试兜底网络抖动)
P --> Q[保存结果释放锁并清理资源]
R[用户发起智能问答] --> S[Redis获取最近十轮对话]
S --> T[触发Function Calling机制]
T --> U[数据库检索相关视频信息]
U --> V[大模型结合上下文生成回复]
```
## 我的开发环境
| 组件 | 版本 | 备注 |
| :-------------- | :----------- | :---------------------------------- |
| **JDK** | 21.0.8 | 支持 Spring Boot 3 即可 |
| **Node** | v22.18.0 | 前端构建依赖 |
| **MySQL** | 8.0 | Docker 镜像 `mysql:8.0` |
| **Redis** | Latest (7.x) | Docker 镜像 `redis:latest` |
| **RocketMQ** | 4.9.4 | Docker 镜像 `apache/rocketmq:4.9.4` |
| **LangChain4j** | DeepSeek | 硅基流动送14元免费额度 |
| **FFmpeg** | Latest | 推荐 2025 年后的 Snapshot 版本 |
| **yt-dlp** | Latest | 建议定期 `update` 保持解析库最新 |
## 如何本地部署
### 中间件部署 (Docker Compose)
本项目依赖多个中间件封装为 Docker Compose 文件。
```bash
# 在项目的根目录下,直接一键启动所有服务
# (包含 MySQL, Redis, MinIO, RocketMQ, Dashboard)
docker-compose up -d
```
### 后端配置修改
在启动后端前,还原以下配置:
#### 1. 配置数据库密码
确保与 docker-compose 中的 MySQL 密码一致:
```properties
spring.datasource.password=root
```
#### 2. 配置AI模型密钥
请填入你自己的 API Key(该项目默认使用了硅基流动的api):
```properties
# 不知道api是什么?可以前往 [https://cloud.siliconflow.cn/] 申请密钥,主要也有免费额度
ai.deepseek.api-key=sk-你的密钥xxxxxxxxxxxxxxxx
```
#### 3. 请确保本地已安装 FFmpeg 和 yt-dlp,并填入路径:
```properties
# Windows 环境示例 (注意使用斜杠 /)
tool.ffmpeg.dir=D:/ffmpeg/bin
tool.ytdlp.path=D:/yt-dlp/yt-dlp.exe
# Mac/Linux 环境示例
# tool.ffmpeg.dir=/usr/local/bin
# tool.ytdlp.path=/usr/local/bin/yt-dlp
```
### 启动项目
🟢 启动后端
```properties
cd server
# 启动服务
mvn clean spring-boot:run
# 当看到控制台输出 Started DOVideoApplication in x.xxx seconds 即表示后端启动成功。
```
🔵 启动前端
```properties
cd client
# 1. 安装依赖
npm install
# 2. 启动开发模式
npm run dev
```
访问前端界面内显示地址(默认为接口http://localhost:5173
可成功访问该项目!