实时监控 CCTV 315 晚会(或任意 CCTV 频道直播),自动截图 + 语音识别 + AI 多模态分析,提取涉事品牌、违规行为、排查关键词,辅助电商平台商品安全治理。
- 双模式支持:315 晚会回放(完整视频流)/ CCTV 直播(定时截图 + 音频流)
- 30 秒分析周期:每轮自动截取 3 张画面 + 30 秒音频
- 语音识别:DashScope paraformer-v2 实时 ASR
- AI 多模态分析:qwen3.5-flash 分析画面 + 语音,输出结构化治理建议
- 智能汇总:自动合并同一事件的多轮分析,按主题分类
- 实时推送:SSE 实时更新前端
- Prompt 可编辑:前端实时调整分析 / 汇总 Prompt,下一轮立即生效
- 排查关键词:一键复制,可直接用于电商平台搜索
| 层 | 技术 |
|---|---|
| 后端 | Python 3.10+ / FastAPI / uvicorn |
| 前端 | React 18 / TypeScript / Vite / Tailwind CSS |
| AI 模型 | DashScope qwen3.5-flash(多模态)/ paraformer-v2(ASR) |
| 数据库 | SQLite(aiosqlite) |
| 流媒体 | FFmpeg / hls.js |
| UI 风格 | iOS Liquid Glass |
- macOS(已测试 macOS 15 Sequoia / Apple Silicon)
- Python 3.10+
- Node.js 18+
- FFmpeg(流媒体处理)
- DashScope API Key(阿里云百炼平台)
# Homebrew(如果没装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# FFmpeg + Node.js
brew install ffmpeg nodegit clone <repo-url>
cd 315_monitorcp .env.example .env
# 编辑 .env,填入你的 DashScope API Key.env 文件内容:
DASHSCOPE_API_KEY=sk-你的API密钥
CAPTURE_MODE=ffmpeg
DashScope API Key 申请:https://dashscope.console.aliyun.com/
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtcd frontend
npm install
cd ..chmod +x start.sh
./start.sh或手动分别启动:
# 终端 1 — 后端
source venv/bin/activate
python -m uvicorn backend.main:app --host 0.0.0.0 --port 8002 --reload
# 终端 2 — 前端
cd frontend
npm run dev -- --port 5180打开浏览器访问 http://localhost:5180
- 在控制面板的「直播源地址」中选择预设:
- CCTV-2 直播:实时监控(截图模式,直播受版权保护)
- 315 晚会回放:回放完整视频流
- 也可手动粘贴任意 CCTV 页面 URL 或 m3u8 地址
- 点击 开始 启动监控
启动 → 每 30 秒一个周期:
├─ 截取 3 张画面(每 10 秒一张)
├─ 录制 30 秒音频 → ASR 语音转写
├─ 截图 + ASR 文本 → qwen3.5-flash 多模态分析
└─ 结果推送前端 → 自动分组合并 → 定期 AI 汇总
右侧「Prompt 配置」面板可实时编辑:
- 实时分析 Prompt:控制每轮 AI 分析的行为
- 汇总 Prompt:控制 AI 汇总的输出格式
- 高亮标注可定制的关键片段(变量、角色、平台、等级)
- 保存后下一轮立即生效
| 回放模式 | 直播模式 | |
|---|---|---|
| 视频 | 完整视频流播放 | 定时截图(每 5 秒刷新) |
| 音频 | 从视频流提取 | 独立音频流 |
| 截图来源 | FFmpeg 从 m3u8 提取帧 | CCTV CDN 实时截图 |
| AI 分析 | 3 张截图 + ASR | 3 张截图 + ASR(效果一致) |
| 说明 | - | 直播视频受 DRM 保护,无法直接获取 |
315_monitor/
├── .env # 环境配置(API Key 等)
├── requirements.txt # Python 依赖
├── start.sh # 一键启动脚本
├── README.md
│
├── backend/ # FastAPI 后端
│ ├── main.py # API 端点、SSE、代理
│ ├── config.py # 配置项、Prompt 定义
│ ├── pipeline.py # 监控管道(30s 周期调度)
│ ├── stream_grabber.py # 截图 + 音频采集(FFmpeg / CDN)
│ ├── cctv_parser.py # CCTV URL 解析(VOD / 直播 API)
│ ├── asr_worker.py # 语音识别(DashScope paraformer-v2)
│ ├── analysis_worker.py # AI 多模态分析(qwen3.5-flash)
│ └── database.py # SQLite 数据库操作
│
├── frontend/ # React + Vite 前端
│ ├── src/
│ │ ├── App.tsx # 主布局(双栏)
│ │ ├── index.css # 全局样式(Liquid Glass)
│ │ └── components/
│ │ ├── ControlPanel.tsx # 启停控制 + 直播源选择
│ │ ├── LivePlayer.tsx # 视频/截图播放器
│ │ ├── ASRPanel.tsx # 语音识别实时显示
│ │ ├── PromptEditor.tsx # Prompt 编辑器(高亮)
│ │ └── InsightPanel.tsx # AI 分析洞察 + 智能汇总
│ ├── package.json
│ ├── vite.config.ts # Vite 配置(代理 → 8002)
│ └── tailwind.config.js
│
└── data/ # 运行时数据(自动创建)
├── monitor.db # SQLite 数据库
├── snapshots/ # 截图文件
└── audio/ # 音频文件
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/status |
管道运行状态 |
| POST | /api/pipeline/start |
启动监控 |
| POST | /api/pipeline/stop |
停止监控 |
| POST | /api/pipeline/pause |
暂停监控 |
| POST | /api/pipeline/resume |
恢复监控 |
| GET | /api/stream |
SSE 实时事件流 |
| GET | /api/cycles/latest |
最新分析结果 |
| GET/POST | /api/prompts |
获取/更新 Prompt |
| POST | /api/analysis/summarize |
AI 汇总 |
| GET | /api/proxy/stream.m3u8 |
HLS 视频代理 |
| GET | /api/proxy/segment |
TS 分片代理 |
| GET | /api/proxy/live-snapshot |
直播截图代理 |
| 服务 | 端口 | 说明 |
|---|---|---|
| 后端 | 8002 | FastAPI API 服务 |
| 前端 | 5180 | Vite 开发服务器 |
前端通过 Vite proxy 将 /api、/snapshots、/audio 请求转发到后端 8002 端口。
Q: 启动后前端白屏? 确认后端已启动且在 8002 端口运行,前端 Vite proxy 才能正常转发请求。
Q: 语音识别为空?
检查 .env 中的 DASHSCOPE_API_KEY 是否正确。ASR 使用 DashScope WebSocket API,需要有效的 API Key。
Q: 直播模式黑屏? CCTV 直播视频受 DRM 保护,无法直接获取视频流。系统会自动切换为截图模式,显示 CDN 实时截图。
Q: 端口被占用?
# 查看占用端口的进程
lsof -i :8002
lsof -i :5180
# 杀掉占用进程
kill <PID>Q: FFmpeg 报错?
确认已通过 brew install ffmpeg 安装,且 ffmpeg 在 PATH 中:
which ffmpeg
ffmpeg -version本系统调用 DashScope API 会产生费用:
- qwen3.5-flash:每轮分析约消耗 1-2K tokens(含图片)
- paraformer-v2:ASR 按音频时长计费
- 停止监控后不再调用 API
建议在 DashScope 控制台设置用量告警。