5.8 KiB
5.8 KiB
编程学习视频方案 - 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 模型中添加:
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风格
// 核心接口
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:
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 |
验证步骤
- 模型验证: 运行迁移,确认数据库字段正确添加
- 后端API验证: 通过Swagger测试章节CRUD,确认新字段正常
- 编辑器验证: 登录后台,编辑章节,验证:
- 可选择视频源类型(B站/本地)
- 可输入B站URL
- 可上传本地视频文件
- 前端播放器验证: 访问课程学习页,验证:
- B站视频使用BDCloudVideoView正常播放
- 本地视频使用BDCloudVideoView正常播放
- 视频封面正确显示
- 资料下载验证: 验证新增的"视频"和"数据集"类型资料可正常下载
- 暗色模式验证: 在暗色模式下检查播放器和编辑器样式
假设与决策
- 视频源默认值: 默认为
bilibili,兼容现有数据 - 本地视频存储: 使用 Django FileField 存储在本地文件系统
- 播放器SDK: 百度智能云播放器通过CDN引入,无需npm安装
- 视频格式: 本地视频支持 mp4、mov、webm 格式
- 视频大小限制: 默认限制 500MB,可通过设置调整
- 资料类型扩展: 新增"视频"和"数据集"两种类型,保留原有类型