OuonnkiTV :一键自建现代化影视聚合站
OuonnkiTV :一键自建现代化影视聚合站(Vercel & Docker)
OuonnkiTV 是一个基于 React + Vite + TypeScript 的视频聚合前端,支持多视频源导入、跨端播放、历史记录、个性化设置,并可通过 Vercel 一键部署或 Docker 快速上线。实际上还是在LibreTV 的基础上进行的增强。支持和LibreTV一样的视频源的导入。
官网地址:Ouonnki/OuonnkiTV
1. OuonnkiTV 是什么?
OuonnkiTV 是一个 “前端外壳 + 可配置数据源” 的现代化影视聚合应用:
-
⚡ 技术栈:React、Vite、TypeScript、Tailwind、Zustand、xgplayer、Day.js。
-
🧭 体验友好:搜索联想、观看/搜索历史、清空一键化。
-
🧩 多源可配:支持 文件 / JSON 文本 / 远程 URL 三种导入;支持启动时通过环境变量预置。
-
📱 跨端自适应:PC 与移动端布局均衡,长片单集/剧集列表清晰。
-
🧹 轻内容立场:不存储视频,仅聚合第三方源结果用于展示与播放。
2. 快速上手(两种部署方案)
2.1 Vercel 一键部署(最轻量)
适合个人/小团队,零服务器运维;构建产物静态托管,接口经内置代理转发。
步骤一:导入仓库
-
打开 Vercel → New Project → 导入 OuonnkiTV 仓库(Fork 后更便于自定义)。
步骤二:设置构建命令
-
Install Command:
pnpm install -
Build Command:
pnpm build -
Output Directory:
dist
步骤三:配置环境变量(核心)
-
VITE_PROXY_URL→/api/proxy?url=(用于统一代理第三方视频源)
步骤四:Deploy
-
点击 Deploy,等待构建完成即可访问线上地址。
本地/Fork 仓库 → Vercel 导入 → 设置 Build/Env → Deploy → 访问站点
TIPS
推荐 Fork 后在 Vercel 绑定 Fork 仓库,避免直接动上游。
若需自定义域名,在 Vercel 的 Domains 面板添加即可。
2.2 Docker 部署(本地/服务器)
适合已有服务器或需内网部署的场景。
方式一:Docker Compose(推荐)
# 1) 可选:复制环境变量模板
cp .env.docker .env
# 2) 启动服务
docker-compose up -d
# 3) 访问
# http://localhost:3000
方式二:拉取预构建镜像
docker pull ghcr.io/ouonnki/ouonnkitv:latest
docker run -d -p 3000:80 \
-e VITE_PROXY_URL=https://api.codetabs.com/v1/proxy?quest= \
ghcr.io/ouonnki/ouonnkitv:latest
-
浏览器 ⇄ Nginx(容器) ⇄ 代理路径
/api/proxy?url=⇄ 第三方视频源 API
TIPS
服务器需放行 80/443 端口(或自定义映射)。
建议搭配反向代理与 HTTPS 证书(Caddy / Nginx / Traefik)。
3. 本地开发与二次定制
适合换皮肤、改交互、接入你的业务逻辑。
前置环境:Node.js ≥ 20,pnpm ≥ 9.15.4
git clone https://github.com/Ouonnki/OuonnkiTV.git
cd OuonnkiTV
pnpm install
# 开发
dpnm run dev # http://localhost:3000
# 生产构建 + 预览
pnpm run build
pnpm run preview # http://localhost:4173
可定制点
-
主题与样式:Tailwind 原子类;可加入动效(Framer Motion)。
-
状态管理:Zustand;数据结构扁平,易扩展。
-
入口配置:
src/config/*、开发代理/中间件:api/proxy.ts。
src/
components/
pages/
store/ # Zustand 状态
config/ # 全局配置
assets/
api/
proxy.ts # 统一代理逻辑
4. 视频源管理:三种导入方式 + JSON 规范
OuonnkiTV 在设置中提供 文件导入 / JSON 文本 / 远程 URL 三种方式,内置格式校验、去重与错误提示。
最小可用 JSON
{"name": "示例源", "url": "https://api.example.com/search"}
标准数组示例(含可选字段)
[
{
"id": "source1",
"name": "示例视频源",
"url": "https://api.example.com/search",
"detailUrl": "https://api.example.com/detail",
"isEnabled": true
}
]
字段说明
-
name/url:必填; -
detailUrl:可选,缺省与url相同; -
isEnabled:可选,默认true; -
id:建议提供,便于去重与开关控制。
注意:若通过 URL 导入,请确保该地址可直出 JSON,且允许被代理访问。
5. 预置视频源:环境变量一键注入
适合“开箱即用”,部署时直接写入一组默认源。
在部署环境中设置:VITE_INITIAL_VIDEO_SOURCES(值为 JSON 字符串)。
示例(Vercel 环境变量或 .env)
[
{ "id": "source1", "name": "示例源1", "url": "https://api.example1.com", "isEnabled": true },
{ "id": "source2", "name": "示例源2", "url": "https://api.example2.com", "detailUrl": "https://detail.example2.com", "isEnabled": false }
]
6. 播放体验与交互亮点
-
🎬 播放器:基于 xgplayer,支持 HLS/MP4;倍速、进度记忆等常用控件齐全。
-
🧭 检索链路:搜索 → 结果列表 → 详情页 → 播放页,路径清晰;
-
🧹 历史记录:自动记录观看与搜索条目,一键清空;
-
⚙️ 个性化:主题色、默认播放偏好可视化配置。
-
搜索页:关键词与历史联想;
-
详情页:封面、标题、简介、分集;
-
播放页:播放器 + 集数列表 + 返回入口。
7. 常见问题(FAQ)
Q1:Vercel 构建后访问为空白?
A:核对 VITE_PROXY_URL 是否为 /api/proxy?url=;并检查你的第三方视频源是否可达。
Q2:如何既保留我的改动、又能跟上游同步?
A:把自定义放在 custom/* 或独立分支;上游同步时只更新 main。也可使用 GitHub 的 Sync fork 或定时脚本。
Q3:播放器不支持某些格式?
A:默认支持 HLS/MP4,其他格式取决于浏览器与数据源。可在 xgplayer 生态内寻找插件或转码方案。
8. 合规与版权声明
-
本项目 不存储、上传或分发 任何视频,仅做 第三方来源聚合与展示;
-
若涉及侵权,请联系 原始内容提供方 处理;
-
部署与使用产生的法律风险 由使用者自行承担,请遵守当地法规与平台条款。
评论
发表评论