Yam TV
视频聚合搜索平台(仅供个人学习,不对外传播使用)
平台
- Android
- iOS
- Web
- MacOS
- Windows
技术栈
- Vue.js
- NestJS
- Docker
- Redis
- SQLite
- Flutter
- JavaScript
视频聚合搜索平台 — 多端、可自托管、支持插件式视频源与直播订阅。
⚠️ 本项目仅供个人学习,不对外传播使用。网站不存储任何视频资源,所有内容均来自第三方网站。
架构概览

- Web 端:Vue 3 + hls.js + Tailwind CSS,支持搜索、播放、管理后台
- Flutter 端:Android / iOS / macOS / Windows,与 Web 共用同一套 API
- 服务端:NestJS,全局前缀
/api,Swagger 文档/api/docs - 存储:Redis(搜索缓存 + 用户同步数据)+ SQLite(管理员账户与权限)
- 部署:Docker compose,镜像推送 GHCR
功能
🔍 搜索与播放
- 多源聚合搜索 — 兼容苹果 CMS V10 JSON 接口,多源轮询合并去重,支持流式 NDJSON 实时推送
- 播放详情 — TMDB 海报与简介刮削,跨源换源保留播放进度
- 短视频模式 — 竖滑换片、全集连播、自动续播
- HLS 去广告 — 规则库(domain / path / regex / exact)+ 启发式算法双级过滤。规则服务端管理,客户端自动同步
🖥 管理功能
- 视频源管理 — 手动添加 / JSON 批量导入 / 远程 URL 订阅,自动 API 去重与 key 冲突分配
- IPTV 直播源 — m3u 订阅解析,频道分组与黑名单过滤
- 用户与权限 — 多用户组 RBAC,per-source 访问控制
- 内容过滤 — 关键词 / 分类 ID / 整源屏蔽,成人源标记
✨ 交互体验
- 暗黑模式 + 毛玻璃 UI
- 播放历史与进度云同步(登录跨设备)
- 收藏系统 + 目录更新角标
- 桌面端悬停预览 / 右键菜单 / 长按倍速
- PWA 支持
平台
| 平台 | 方式 |
|---|---|
| Web | 浏览器直接访问(PWA 可安装) |
| Android | Flutter APK / AAB |
| iOS | Flutter IPA(需自签) |
| macOS | Flutter macOS 构建 |
| Windows | Flutter Windows 构建 |
技术栈
| 组件 | 技术 | 角色 |
|---|---|---|
| 前端 SPA | Vue 3 + Vue Router + Pinia + Tailwind | 搜索 / 播放 / 管理后台 UI |
| 移动/桌面客户端 | Flutter + Material 3 | 多端原生体验,与 Web 共用 API |
| API 服务 | NestJS 11 + TypeScript | 聚合搜索、源管理、鉴权、同步、代理 |
| 搜索缓存 | Redis | 聚合缓存、收藏/进度/历史同步 |
| 用户存储 | SQLite(sql.js WASM) | 管理员账户与组权限 |
| 容器化 | Docker + docker compose | 单命令部署,含 Redis |
| CI/CD | GitHub Actions → GHCR | 自动构建推送 Docker 镜像 |