Files
vscode-workbench/.trae/documents/bdcloud_video_plan.md
T

158 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 编程学习视频方案 - BDCloudVideoView 集成计划
## 概述
在编程学习模块中引入百度智能云视频播放器(BDCloudVideoView),支持B站视频和本地视频两种来源,并增强文档/资料绑定功能。
## 当前状态分析
### 现有视频机制
- `Chapter.video_url` - URLField,仅支持外部链接
- `Chapter.video_poster` - ImageField,视频封面图
- 前端 `VideoPlayer` 组件支持 Bilibili/YouTube/Vimeo 嵌入 + 原生 video 标签
- **无本地视频上传功能**
### 现有资料机制
- `CourseMaterial` 模型支持:PDF、代码、文档、压缩包、其他
- 支持文件下载和下载次数统计
- 缺少视频资料、数据集等类型
## 实施方案
### 步骤1:扩展 Chapter 模型 - 增加视频源类型字段
**文件**: `chunyu_project/learn/models.py`
在 `Chapter` 模型中添加:
```python
VIDEO_SOURCE_CHOICES = [
('bilibili', 'B站视频'),
('local', '本地视频'),
]
class Chapter:
# 新增字段
video_source = models.CharField(max_length=20, choices=VIDEO_SOURCE_CHOICES, default='bilibili')
video_local = models.FileField(upload_to='learn/videos/%Y/%m/', blank=True, null=True)
```
### 步骤2:创建数据库迁移
**操作**: `python manage.py makemigrations learn` + `python manage.py migrate`
### 步骤3:更新序列化器
**文件**: `chunyu_project/learn/serializers.py`
- `ChapterSerializer` 增加 `video_source`, `video_local_url` 字段
- 确保前端能获取完整的视频信息
### 步骤4:创建 BDCloudVideoView 组件
**文件**: `chunyu_project_react/src/components/BDCloudVideoView/BDCloudVideoView.tsx`
功能:
- 根据 `video_source` 自动切换播放源
- B站模式:使用百度智能云播放器加载B站视频
- 本地模式:使用百度智能云播放器加载本地视频URL
- 支持视频封面、自动播放、清晰度切换
- 统一的控制栏和UI风格
```typescript
// 核心接口
interface BDCloudVideoViewProps {
videoSource: 'bilibili' | 'local';
bilibiliUrl?: string;
localUrl?: string;
posterUrl?: string;
title?: string;
}
```
### 步骤5:更新 CourseLearn 页面
**文件**: `chunyu_project_react/src/pages/CourseLearn/CourseLearn.tsx`
- 将 `VideoPlayer` 替换为 `BDCloudVideoView`
- 增加视频源切换UI(B站/本地)
- 加载百度智能云播放器 SDK(CDN引入)
### 步骤6:更新 LearnEditor 编辑器
**文件**: `chunyu_project_react/src/pages/LearnEditor/LearnEditor.tsx`
在章节编辑中增加:
- 视频源类型选择器(B站/本地)
- B站URL输入框
- 本地视频上传组件(支持mp4/mov/webm)
- 视频封面上传
### 步骤7:增强 CourseMaterial 资料类型
**文件**: `chunyu_project/learn/models.py`
扩展 `CourseMaterial.FILE_TYPE_CHOICES`:
```python
FILE_TYPE_CHOICES = [
('pdf', 'PDF'),
('code', '代码'),
('doc', '文档'),
('video', '视频'), # 新增
('dataset', '数据集'), # 新增
('zip', '压缩包'),
('other', '其他'),
]
```
### 步骤8:添加视频下载功能
**文件**: `chunyu_project/learn/views.py`
新增API端点:
- `GET /learn/chapters/<pk>/video/download/` - 下载本地视频
- 添加下载统计和权限检查
### 步骤9:前端下载功能集成
**文件**: `chunyu_project_react/src/pages/CourseLearn/CourseLearn.tsx`
- 在播放器组件中添加下载按钮
- 本地视频直接下载
- B站视频提示使用B站客户端下载
### 步骤10:CSS样式适配
**文件**:
- `CourseLearn.css` - 播放器容器样式
- `BDCloudVideoView.css` - 组件专用样式
- 确保在暗色模式下正常显示
## 文件清单
| 文件路径 | 操作 | 说明 |
|---------|------|------|
| `chunyu_project/learn/models.py` | 修改 | 添加 video_source, video_local 字段;扩展资料类型 |
| `chunyu_project/learn/serializers.py` | 修改 | 序列化器增加新字段 |
| `chunyu_project/learn/views.py` | 修改 | 添加视频下载API |
| `chunyu_project/learn/urls.py` | 修改 | 添加视频下载路由 |
| `chunyu_project_react/src/components/BDCloudVideoView/BDCloudVideoView.tsx` | 新建 | 百度智能云播放器组件 |
| `chunyu_project_react/src/components/BDCloudVideoView/index.ts` | 新建 | 导出入口 |
| `chunyu_project_react/src/pages/CourseLearn/CourseLearn.tsx` | 修改 | 替换为BDCloudVideoView |
| `chunyu_project_react/src/pages/LearnEditor/LearnEditor.tsx` | 修改 | 添加视频源选择器和上传组件 |
| `chunyu_project_react/src/pages/CourseLearn/CourseLearn.css` | 修改 | 适配播放器样式 |
| `chunyu_project_react/src/pages/LearnEditor/LearnEditor.css` | 修改 | 适配编辑器样式 |
| `chunyu_project_react/index.html` | 修改 | 引入百度智能云播放器CDN |
## 验证步骤
1. **模型验证**: 运行迁移,确认数据库字段正确添加
2. **后端API验证**: 通过Swagger测试章节CRUD,确认新字段正常
3. **编辑器验证**: 登录后台,编辑章节,验证:
- 可选择视频源类型(B站/本地)
- 可输入B站URL
- 可上传本地视频文件
4. **前端播放器验证**: 访问课程学习页,验证:
- B站视频使用BDCloudVideoView正常播放
- 本地视频使用BDCloudVideoView正常播放
- 视频封面正确显示
5. **资料下载验证**: 验证新增的"视频"和"数据集"类型资料可正常下载
6. **暗色模式验证**: 在暗色模式下检查播放器和编辑器样式
## 假设与决策
1. **视频源默认值**: 默认为 `bilibili`,兼容现有数据
2. **本地视频存储**: 使用 Django FileField 存储在本地文件系统
3. **播放器SDK**: 百度智能云播放器通过CDN引入,无需npm安装
4. **视频格式**: 本地视频支持 mp4、mov、webm 格式
5. **视频大小限制**: 默认限制 500MB,可通过设置调整
6. **资料类型扩展**: 新增"视频"和"数据集"两种类型,保留原有类型