# 视频智能理解平台 **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 可成功访问该项目!