V0TV 是一个现代化的自托管影视聚合平台,支持多源内容聚合、智能播放控制、跨设备数据同步等功能。基于 Next.js 14 构建,提供流畅的用户体验和灵活的部署方式。
- 🚀 性能优异 - 基于 Next.js 14 App Router,优化的代码架构
- 🎨 现代化 UI - 响应式设计,支持浅色/深色主题
- 🔧 灵活部署 - 支持 Docker、Cloudflare Pages、Vercel 等多种部署方式
- 🔒 隐私优先 - 完全自托管,数据完全掌控
- 🌐 多端同步 - 跨设备播放进度、收藏等数据同步
- 📱 PWA 支持 - 可安装为应用,离线访问
- 🔍 智能聚合搜索 - 多源影视内容聚合,自动优选最佳播放源
- 📺 高清播放 - 基于 ArtPlayer 和 HLS.js,支持多种视频格式
- ⏭️ 智能跳过 - 自定义跳过片头片尾,批量设置
- 🎯 断点续播 - 自动记录播放进度,跨设备同步
- ⭐ 收藏管理 - 收藏喜爱的影视,快速访问
- 🎹 键盘快捷键 - 支持快捷键操作(F 键收藏,Ctrl+方向键切集等)
- 📱 响应式设计 - 完美适配桌面、平板、手机
- 🎨 主题切换 - 浅色/深色主题自动切换
- 🔐 用户系统 - 支持多用户,权限管理
- 💾 多种存储 - 支持 LocalStorage、Redis、Upstash、Cloudflare D1
- 🚦 智能测速 - 自动测速选择最快播放源
- 🛡️ 内容过滤 - 可选的成人内容智能过滤
- 📊 播放历史 - 完整的观看历史记录
- ✅ 完全重构的播放页面 - 代码减少 67%,性能大幅提升
- ✅ 模块化架构 - 13 个独立模块,更易维护和扩展
- ✅ 类型安全 - 完整的 TypeScript 类型系统
- ✅ 修复内存泄漏 - 优化的内存管理
- ✅ 更好的错误处理 - 完善的错误边界和恢复机制
- Node.js 18+ 或 Docker
- (可选)Redis 用于多用户部署
📘 需要更完整的部署矩阵、环境变量说明与脚本,请直接阅读 deploy/README.md。
单容器部署(适合个人使用)
# 克隆仓库
git clone https://github.com/telagod/V0TV.git
cd V0TV
# 使用部署脚本
cd deploy/docker
chmod +x deploy-single.sh
./deploy-single.sh访问 http://localhost:3000
Docker Compose + Redis(适合多用户)
cd deploy/docker
chmod +x deploy-redis.sh
./deploy-redis.sh- 适合零成本 + 全球访问量的场景
- 支持 Cloudflare Pages Functions 或 Workers + D1
- 推荐流程:
- Fork 或导入
https://github.com/telagod/V0TV - Cloudflare Pages 构建命令:
pnpm install && pnpm pages:build,产物目录.open-next - 在 Pages Secrets 中配置
PASSWORD、NEXT_PUBLIC_STORAGE_TYPE=d1以及 D1/Upstash 凭据 - 需要全自动脚本时执行
bash scripts/auto-deploy.sh(创建 D1、配置变量、部署一次搞定) - GitHub Actions / 手动部署的完整说明见 deploy/cloudflare/README.md
- Fork 或导入
# 一键安装脚本
curl -fsSL https://raw.githubusercontent.com/telagod/V0TV/main/deploy/vps/install.sh | bash| 部署方式 | 难度 | 成本 | 性能 | 推荐场景 |
|---|---|---|---|---|
| Docker 单容器 | ⭐ | 免费* | ⚡⚡⚡ | 个人使用,快速部署 |
| Docker + Redis | ⭐⭐ | 免费* | ⚡⚡⚡⚡ | 多用户,需要数据同步 |
| Cloudflare Pages/Workers ✨ | ⭐ | 免费 | ⚡⚡⚡⚡⚡ | 全球访问,CDN 加速,自动扩展 |
| Vercel | ⭐ | 免费 | ⚡⚡⚡ | 快速部署,简单管理 |
| Railway | ⭐ | 付费 | ⚡⚡⚡⚡ | 托管服务,简单管理 |
| VPS | ⭐⭐⭐ | 付费 | ⚡⚡⚡⚡⚡ | 完全控制,自定义配置 |
*需要自己的服务器或本地运行
Cloudflare 部署亮点:
- ✅ 一键自动部署脚本 - 零配置
- ✅ D1 数据库自动创建 - 无需手动操作
- ✅ 随机密码自动生成 - 更安全
- ✅ 多用户和管理面板 - 开箱即用
创建 .env 文件:
# 必填:访问密码
PASSWORD=your_secure_password
# 可选:管理员用户名(多用户部署必填)
USERNAME=admin
# 可选:存储类型(默认:localStorage)
NEXT_PUBLIC_STORAGE_TYPE=redis # redis | upstash | d1 | localStorage
# 可选:用户注册开关(默认:false)
NEXT_PUBLIC_ENABLE_REGISTER=false
# Redis 配置(使用 Redis 存储时必填)
REDIS_URL=redis://localhost:6379
# Upstash 配置(使用 Upstash 存储时必填)
UPSTASH_URL=https://xxx.upstash.io
UPSTASH_TOKEN=AX_xxx
# Cloudflare D1 配置(使用 D1 存储时必填)
# 通过 wrangler.toml 配置编辑 config.json 文件:
{
"cache_time": 7200,
"api_site": {
"site1": {
"api": "https://api.example.com/provide/vod",
"name": "资源站名称",
"is_adult": false
},
"site2": {
"api": "https://api2.example.com/provide/vod",
"name": "备用资源站",
"is_adult": false
}
}
}配置方式:
- Docker: 挂载配置文件
-v ./config.json:/app/config.json:ro - Vercel/Cloudflare: 提交到仓库根目录
- 管理员界面: 访问
/admin上传配置
# 克隆仓库
git clone https://github.com/telagod/V0TV.git
cd V0TV
# 安装依赖(推荐使用 pnpm)
pnpm install
# 启动开发服务器
pnpm dev
# 浏览器访问
open http://localhost:3000V0TV/
├── src/
│ ├── app/ # Next.js App Router 页面
│ │ ├── play/ # 播放页面(v0.8.0 重构)
│ │ │ ├── components/ # UI 组件
│ │ │ ├── hooks/ # 自定义 Hooks
│ │ │ ├── types/ # TypeScript 类型
│ │ │ └── utils/ # 工具函数
│ │ ├── admin/ # 管理页面
│ │ └── api/ # API 路由
│ ├── components/ # 全局组件
│ ├── lib/ # 工具库
│ └── styles/ # 样式文件
├── public/ # 静态资源
├── deploy/ # 部署配置
├── docs/ # 文档
└── config.json # 视频源配置
- 框架: Next.js 14 (App Router)
- 语言: TypeScript
- 样式: Tailwind CSS
- 播放器: ArtPlayer
- HLS: HLS.js
- 状态管理: React Hooks
- 数据存储: Redis / Upstash / Cloudflare D1
- 部署: Docker / Vercel / Cloudflare Pages
# 代码检查
pnpm lint
# 代码格式化
pnpm format
# 类型检查
pnpm typecheck
# 构建
pnpm build我们欢迎任何形式的贡献!
- Fork 本仓库
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
请确保:
- 代码符合项目规范(运行
pnpm lint) - 添加必要的测试
- 更新相关文档
❓ 无法登录
# 检查环境变量
echo $PASSWORD
# Docker 重启服务
docker compose restart
# 查看日志
docker compose logs -f❓ 视频无法播放
- 检查
config.json格式是否正确 - 验证视频源 API 是否可用
- 查看浏览器控制台错误信息
- 尝试切换其他播放源
❓ 数据库连接失败
# 测试 Redis 连接
redis-cli -u $REDIS_URL ping
# 检查容器状态
docker compose ps
# 查看 Redis 日志
docker compose logs redis❓ 构建失败
# 清理依赖重新安装
rm -rf node_modules .next
pnpm install
# 清理缓存
pnpm store prune
# 重新构建
pnpm build- 播放页面完全重构
- 模块化架构
- 完整的 TypeScript 类型系统
- 单元测试覆盖
- E2E 测试
- 播放列表功能
- 播放器插件系统
- 自定义主题支持
- 社交分享功能
- 多语言支持(i18n)
- 移动端原生应用
- 字幕同步功能
- 观看统计和推荐
- 完整的 API 文档
- 插件市场
感谢所有为本项目做出贡献的开发者!
本项目基于 MIT License 开源。
本项目站在巨人的肩膀上:
- KatelyaTV - 项目源头,致敬原作者
- Next.js - 强大的 React 框架
- ArtPlayer - 优秀的 HTML5 播放器
- HLS.js - HLS 协议支持
- Tailwind CSS - 实用的 CSS 框架
- Vercel - 优秀的托管平台
- Cloudflare - 全球 CDN 和边缘计算
以及所有开源社区的贡献者们!❤️
本项目仅供学习交流使用,请勿用于商业用途。使用本项目观看的视频内容版权归原作者所有,请支持正版。