Atom Video
一个面向开发者的视频技术分享与学习平台,采用 Monorepo 架构,使用 Vue 3、TypeScript 和 NestJS 构建。
项目概述
Atom Video是一个现代化的视频分享平台,为用户提供高质量的视频内容服务。平台采用前后端分离架构,使用最新的Web技术栈,提供流畅、易用且功能丰富的视频观看和分享体验。
核心特性
- 🎥 高质量视频分享与观看
- 👥 活跃的用户社区与互动系统
- 📋 强大的播放列表管理功能
- 🔍 智能内容推荐与搜索
- 🌐 多语言国际化支持
- 🎨 现代化 UI/UX 设计
- ⚡ 高性能与可扩展性架构
- 🔒 完善的用户认证与授权
- 📱 全面响应式设计
- 🌙 深色/亮色主题切换
- ♿ 无障碍支持
- 🔄 实时互动更新
项目开发进度
已完成功能
[x] 核心布局
- [x] 响应式侧边栏(可折叠)
- [x] 顶部导航栏
- [x] 页脚组件
- [x] 暗色/亮色主题切换
[x] 主页功能
- [x] 视频卡片列表
- [x] 标签分类系统
- [x] 无限滚动加载
- [x] 视频推荐算法(基础版)
[x] 用户认证系统
- [x] 登录表单与验证
- [x] 注册功能
- [x] 社交账号登录(Google, GitHub)
- [x] 忘记密码/重置密码
- [x] 记住我功能
- [x] 基于JWT的认证
[x] 国际化支持
- [x] 中文/英文切换
- [x] 自动检测浏览器语言
- [x] 用户语言偏好保存
[x] 视频播放系统
- [x] 视频播放器组件
- [x] 多清晰度切换
- [x] 弹幕系统
- [x] 快捷键控制
- [x] 自适应布局
- [x] 主题适配
- [x] 视频进度记忆功能
- [x] 画中画模式
- [x] 视频截图功能
[x] 用户个人中心
- [x] 用户资料展示
- [x] 用户上传的视频列表
- [x] 关注/取消关注功能
- [x] 无限滚动加载
- [x] 头像上传功能
- [x] 个人数据统计
[x] 视频互动系统
- [x] 评论功能(支持嵌套评论)
- [x] 点赞/取消点赞功能
- [x] 收藏功能
- [x] 分享功能(链接、社交媒体)
- [x] 视频举报功能
[x] 播放列表系统
- [x] 播放列表创建与管理
- [x] 视频添加/移除
- [x] 播放列表权限控制(公开/私有/未上市)
- [x] 播放列表分享
- [x] 视频排序功能
- [x] 播放列表封面设置
[x] 后端模块化架构
- [x] 认证模块 (auth)
- [x] 用户模块 (user)
- [x] 视频模块 (video)
- [x] 标签模块 (tag)
- [x] 搜索模块 (search)
- [x] 评论模块 (comment)
- [x] 收藏模块 (favorite)
- [x] 订阅模块 (subscription)
- [x] 互动模块 (interaction)
- [x] 播放列表模块 (playlist)
- [x] 通用模块 (common)
进行中功能
[ ] 搜索增强系统
- [x] 基础搜索功能
- [ ] 高级过滤选项
- [ ] 搜索建议和自动完成
- [ ] 搜索历史记录
[ ] 用户通知系统
- [ ] 实时通知
- [ ] 通知中心
- [ ] 通知偏好设置
- [ ] 邮件通知集成
[ ] 用户设置中心
- [x] 个人资料编辑
- [x] 账号安全设置
- [ ] 通知设置
- [ ] 隐私设置
- [ ] 个性化推荐设置
[ ] 创作者数据分析
- [ ] 视频数据统计
- [ ] 观众数据分析
- [ ] 互动数据报表
- [ ] 自定义数据导出
技术架构
Atom Video采用Monorepo架构设计,使用pnpm workspaces + Lerna管理多个相关包,支持代码共享、统一版本控制,并简化了协作流程。
前端技术栈
- 核心框架: Vue 3.4.15 + TypeScript
- 构建工具: Vite
- 状态管理: Pinia
- 路由: Vue Router
- UI组件库: Naive UI
- CSS框架: Tailwind CSS
- HTTP客户端: Axios
- 测试: Vitest
后端技术栈
- 框架: Express.js + TypeScript
- 数据库: PostgreSQL
- ORM: Prisma
- 缓存: Redis
- 认证: JWT
- 文档: Swagger/OpenAPI
开发工具
- 包管理器: pnpm 8.15.4
- 代码规范: ESLint + Prettier
- 测试框架: Jest/Vitest
- CI/CD: GitHub Actions
- 容器化: Docker
快速开始
环境要求
- Node.js v18.0.0+
- pnpm v8.15.4+
- PostgreSQL v14.0.0+
- Redis v6.0.0+
安装步骤
- 克隆仓库
bash
git clone https://github.com/FightingTrip/atom-video.git
cd atom-video
- 安装依赖
bash
pnpm install
- 配置环境变量
bash
# 前端环境变量
cd frontend
cp .env.example .env.local
# 后端环境变量
cd ../backend
cp .env.example .env
- 启动开发服务器
bash
# 启动所有服务
pnpm dev
# 或分别启动
pnpm dev:frontend
pnpm dev:backend
# 以Mock模式启动前端(无需后端)
pnpm dev:mock
使用测试账号
平台提供了多种测试账号,方便在开发环境中测试不同用户角色和权限:
管理员账号
账号: admin@atomvideo.com
密码: Admin@123
创作者账号
账号: creator@atomvideo.com
密码: Password123
普通用户账号
账号: user@atomvideo.com
密码: Password123
项目文档
详细文档请参考 docs 目录:
贡献指南
我们欢迎所有形式的贡献,无论是新功能、bug修复还是文档改进。请查看贡献指南了解更多详情。
许可证
本项目采用 MIT 许可证。
Atom Video 优化功能
本次更新为Atom Video视频平台添加了多项现代化功能和性能优化,提升用户体验和交互性能。
视频播放器优化
1. 画中画模式 (PIP)
- 在视频播放时可切换到画中画模式,支持在浏览其他内容的同时继续观看视频
- 通过顶部控制栏中的专用按钮访问
2. 手势控制
- 支持触摸设备上的手势控制:
- 水平滑动调整视频进度
- 垂直滑动调整音量
- 双击切换播放/暂停
3. 视频截图功能
- 用户可以随时截取视频当前帧并下载图片
- 保存的截图可用于分享或归档
4. 视频章节支持
- 显示视频的章节列表,便于快速导航到特定内容部分
- 章节进度可视化显示
- 支持折叠/展开章节列表
用户体验增强
1. 自动播放下一个视频
- 视频结束后自动播放推荐视频或播放队列中的下一个视频
- 带有倒计时和预览的过渡界面
- 用户可随时取消或跳过倒计时
2. 视频播放队列
- 允许用户创建自定义播放队列
- 支持从推荐视频中快速添加到队列
- 提供保存播放队列为永久播放列表的功能
3. 视频质量自动调节
- 根据网络状况自动选择最佳视频质量
- 智能带宽检测和质量调整
- 用户可手动选择特定质量或使用自动模式
社交功能扩展
1. 时间戳评论
- 在评论中插入当前播放时间的时间戳
- 其他用户可点击时间戳跳转到视频的特定时间点
- 支持在评论中@提及其他用户
2. 视频片段分享
- 选择视频的特定片段进行分享
- 自定义片段的开始和结束时间
- 生成带有时间参数的分享链接
3. 更丰富的分享选项
- 支持多种社交平台的分享
- 可设置分享时的起始时间点
- 提供链接复制和二维码分享功能
性能优化
1. 视频预加载
- 自动预加载下一个可能观看的视频
- 根据网络状况和用户设置调整预加载策略
- 显示预加载进度指示
2. 自适应流媒体
- 根据设备和网络条件提供最佳视频质量
- 无缝切换不同质量级别的视频流
- 带宽监测和反馈系统
3. 响应式优化
- 针对移动设备优化的触控界面
- 改进的控件尺寸和交互区域
- 自适应布局适配不同屏幕尺寸
安装说明
所有优化功能已集成到现有代码库中,无需额外安装步骤。
使用方法
画中画模式
点击视频播放器顶部控制栏中的"画中画"按钮启用画中画模式。
手势控制
- 在视频上水平滑动可调整进度
- 垂直滑动可调整音量
- 双击视频可切换播放/暂停状态
视频章节
在视频播放器下方的章节面板中,点击章节标题可跳转到对应时间点。
视频播放队列
- 在推荐视频上点击"+"按钮将视频添加到队列
- 点击"播放队列"按钮查看和管理当前队列
- 可以保存队列为播放列表供将来使用
视频片段分享
- 点击"分享"按钮
- 选择"分享视频片段"
- 设置片段的开始和结束时间
- 点击"分享片段"生成链接
实现技术
- Vue 3 组合式API
- HTML5 视频API
- Naive UI组件库
- 本地存储与会话管理
- 自适应流媒体技术
- 触摸事件处理
- Canvas API (用于截图功能)
兼容性
- 现代浏览器 (Chrome, Firefox, Safari, Edge)
- 移动设备 (iOS 12+, Android 8+)
- 触摸屏和非触摸屏设备
注意事项
- 部分功能(如画中画模式)在某些浏览器中可能不可用
- 视频预加载功能会增加数据使用量,在移动网络下可能会受到限制
- 自动播放功能受浏览器自动播放策略影响,可能需要用户交互后才能启用