# 编程学习视频方案 - 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//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. **资料类型扩展**: 新增"视频"和"数据集"两种类型,保留原有类型