你是否厌倦了主流视频平台的强制会员、贴片广告、限区域片源和臃肿客户端?MoonTV(LunaTV) 是一个真正为技术爱好者与影视发烧友打造的开源解决方案——它不是另一个“搬运站”,而是一个可完全自主掌控、跨平台、带同步收藏与播放进度的轻量级影视聚合前端。你只需提供合法公开的影视资源链接(如 M3U8、MP4、HLS 流),它就能为你构建出媲美商业 App 的观影体验,且全程不触碰内容分发,严格遵守法律边界。
核心功能
- 一次搜索,全源比对:输入片名,自动调用你配置的多个解析源并行检索,结果按热度/清晰度/延迟智能排序,彻底解决“搜得到但播不了”的尴尬,省去逐个平台翻找的时间。
- 专业级剧集管理界面:每部影片均展示完整元数据——导演/演员表、上映年份、IMDb 或豆瓣评分(需对接)、剧情简介、分季分集列表,支持点击单集直接播放,追剧逻辑清晰不混乱。
- 真·流畅在线播放体验:深度集成 ArtPlayer(支持倍速、截图、弹幕占位、自定义皮肤)与 HLS.js(完美兼容 Safari 和移动端 H.265 流),实测 1080P+ 视频秒开、拖拽无缓冲。
- 多端无缝续播与收藏同步:在 PC 浏览器收藏一部剧,打开手机 PWA 应用时自动显示“继续观看”;在安卓电视上看到一半,回家用笔记本打开,进度条精准停在上次位置——背后由 Kvrocks/Redis/Upstash 提供毫秒级云端状态同步。
- 安装即用的 PWA 原生体验:无需下载 APK 或安装包,访问网址后点击“添加到主屏幕”,即可获得独立图标、离线缓存首页、后台音频播放等类原生能力,iOS 和 Android 均完美支持。
- 响应式设计覆盖全场景:桌面端采用左侧导航栏 + 内容区经典布局,适配键鼠操作;移动端自动切换为底部 Tab 导航 + 大按钮交互,横屏看剧时自动隐藏 UI,沉浸感拉满。
- 实验性智能跳过切片广告:针对部分将广告硬编码进 HLS 分片的资源(如某些第三方聚合站),LunaTV 可识别常见广告片段时长模式并自动跳过,显著提升观感——虽非万能,但已覆盖主流“伪免费”源的干扰逻辑。
技术亮点
- Next.js 14 App Router 全栈架构:服务端渲染(SSR)保障首屏极速加载与 SEO 友好,同时利用 React Server Components 按需水合,大幅降低客户端 JS 体积,老旧设备也能丝滑运行。
- Tailwind CSS + TypeScript 深度协同:所有 UI 组件通过原子化 CSS 类动态组合,响应式断点、暗色模式切换、主题变量全部声明式控制;TypeScript 提供完整的接口类型定义(含播放源 Schema、用户状态结构),大幅降低二次开发踩坑概率。
- 存储层解耦设计:明确区分“前端播放逻辑”与“用户数据存储”,支持 Kvrocks(推荐,高性能+持久化)、Redis(轻量但需手动配 AOF)、Upstash(Serverless 场景首选)三套方案,避免传统单体项目“一崩全崩”的风险。
- Docker 优先部署哲学:放弃 Node.js 直装方案,强制要求容器化运行。这不仅简化环境依赖(无需本地装 Next.js 构建链),更确保生产环境一致性——你的 Zeabur 一键部署实例,和本地 Docker Compose 启动效果完全一致。
适合哪些人用
它不是给“点开即用”小白的玩具,而是为以下人群量身定制的生产力工具:
- 个人 NAS/家庭服务器玩家:你已有群晖、UnRAID 或树莓派,想把私有影视库(如 Emby/Jellyfin 中的资源)通过 LunaTV 美观呈现,并在手机/电视上随时访问——只需将 LunaTV 部署在内网,再配置反向代理即可。
- 开源影视社区共建者:你是某 GitHub 影视源维护者(如 m3u8-list 项目),希望为用户提供一个稳定、美观、可扩展的播放前端。LunaTV 开放的 Source Plugin 接口,让你能以 20 行代码接入自有解析服务。
真实案例:上海一位独立开发者将 LunaTV 部署在 Zeabur 上,搭配自己整理的 5 个公益字幕组 M3U8 源,分享给小众动漫圈好友;北京某高校实验室用它搭建内部教学片库门户,教师上传纪录片 MP4 链接后,学生可通过统一入口按学科分类浏览、记录学习进度。
快速上手
最简路径(推荐 Zeabur 一键部署):
- 访问 Zeabur LunaTV 模板页,登录后点击 “Deploy”;
- 等待约 2 分钟,Zeabur 自动完成 LunaTV + Kvrocks 数据库双服务部署;
- 进入服务设置 → “Domain” 栏绑定自定义域名(如
tv.yourname.com),开启 HTTPS; - 浏览器访问该域名,初始账号为
admin/admin_password(首次登录后请立即修改); - 进入后台 → “Source Management”,粘贴你准备好的合法影视源 JSON 配置(README 提供标准格式示例)。
若偏好本地 Docker:复制 README 中的 kvrocks 版本 docker-compose.yml,修改 USERNAME 和 PASSWORD,执行 docker-compose up -d 即可,3000 端口即服务入口。
同类对比 / 注意事项
与 Jellyfin、Emby 等媒体服务器不同,LunaTV 不处理转码、不管理本地文件、不提供 DLNA 推送——它专注做一件事:把分散的、已公开的影视流地址,以最佳体验聚合呈现。因此它体积仅 80MB 镜像,内存占用常年低于 200MB,而 Jellyfin 常驻需 1GB+。
⚠️ 关键提醒:
- 无内置资源:部署后是“空壳”,必须自行收集并配置合法来源(严禁爬取版权站);项目方不提供、不背书任何第三方源,责任完全由使用者承担。
- 禁止商业化传播:CC BY-NC-SA 协议明确禁止用于付费服务、广告变现或收录进科技媒体榜单;B站/小红书等平台宣传属直接违约,项目方保留法律追诉权。
- 广告跳过为实验功能:依赖 HLS 分片时间戳特征,对加密流、DASH 协议或动态广告插入(DAI)无效,勿过度依赖。
项目信息
MoonTechLab/LunaTV
GitHub
本项目采用 CC BY-NC-SA 协议,禁止任何商业化行为,任何衍生项目必须保留本项目地址并以相同协议开源
9.8k
今日 +197 stars today
Stars
9.0k
Forks
TypeScript
NOASSERTION
编程语言:TypeScript|GitHub Star 数:9818|开源协议:CC BY-NC-SA|GitHub 项目地址
如果你渴望一个干净、可控、可持续演进的影视播放入口,而非被算法和广告绑架的“流量牧场”,LunaTV 就是你技术栈里缺失的最后一块拼图。






