百科.dev
全部条目在线工具AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
M

MoonTVPlus

> 编程语言
开源

MoonTVPlus 是基于 MoonTV v100 二次开发的增强版影视聚合播放器。它在原版基础上新增了外部播放器支持、视频超分、弹幕系统、评论抓取等实用功能,提供更强大的观影体验。

2.9K stars0 点赞1 次浏览
访问官网GitHub

工具介绍

MoonTVPlus 是基于 MoonTV v100 二次开发的增强版影视聚合播放器。它在原版基础上新增了外部播放器支持、视频超分、弹幕系统、评论抓取等实用功能,提供更强大的观影体验。

MoonTVPlus

⚠️ 请某些人停止你的抄袭行为,不要我上什么功能你就抄什么,借鉴≠抄袭

MoonTVPlus 是基于 MoonTV v100 二次开发的增强版影视聚合播放器。它在原版基础上新增了外部播放器支持、视频超分、弹幕系统、评论抓取等实用功能,提供更强大的观影体验。


相对原版新增内容

  • 外部播放器跳转:支持 PotPlayer、VLC、MPV、MX Player、nPlayer、IINA 等多种外部播放器
  • ✨ 视频超分 (Anime4K):使用 WebGPU 技术实现实时视频画质增强(支持 1.5x/2x/3x/4x 超分)
  • 弹幕系统:完整的弹幕搜索、匹配、加载功能,支持弹幕设置持久化、弹幕屏蔽
  • 豆瓣评论抓取:自动抓取并展示豆瓣电影短评,支持分页加载
  • 视频源脚本:支持通过脚本自定义视频源、搜索、详情与播放解析逻辑(实验性)
  • 自定义去广告:你可以自定义你的去广告代码,实现更强力的去广告功能
  • 更快更顺滑:相较原版项目整体速度更快,交互体验更好
  • 观影室:支持多人同步观影、实时聊天、语音通话等功能(实验性)。
  • M3U8完整下载:支持浏览器内合并 m3u8 片段下载,也支持下载到本地文件夹并无感播放本地视频。
  • 服务器离线下载:支持在服务器端下载视频文件,支持断点续传,提前下载到家秒加载 。
  • 私人影库:接入 OpenList、Emby 或小雅,可打造专属私人影库,亦可观看网盘资源。

✨ 功能特性

  • 多源聚合搜索:一次搜索立刻返回全源结果。
  • 丰富详情页:支持剧集列表、演员、年份、简介等完整信息展示。
  • ▶️ 流畅在线播放:集成 HLS.js & ArtPlayer。
  • ❤️ 收藏 + 继续观看:支持 Kvrocks/Redis/Upstash 存储,多端同步进度。
  • PWA:离线缓存、安装到桌面/主屏,移动端原生体验。
  • 响应式布局:桌面侧边栏 + 移动底部导航,自适应各种屏幕尺寸。
  • 智能去广告:自动跳过视频中的切片广告,更可以自定义你的去广告代码以增强去广告功能。

注意:部署后项目为空壳项目,无内置播放源和直播源,需要自行收集

点击查看项目截图

请不要在 B站、小红书、微信公众号、抖音、今日头条或其他中国大陆社交平台发布视频或文章宣传本项目,不授权任何“科技周刊/月刊”类项目或站点收录本项目。

目录

  • 技术栈
  • 部署
  • 配置文件
  • 自动更新
  • 环境变量
  • 外部观影室服务器部署
  • 弹幕后端部署
  • 超分功能说明
  • AndroidTV 使用
  • TVBOX 订阅功能
  • 安全与隐私提醒
  • License
  • 致谢

技术栈

分类 主要依赖
前端框架 Next.js 14 · App Router
UI & 样式 Tailwind CSS 3
语言 TypeScript 4
播放器 ArtPlayer · HLS.js
代码质量 ESLint · Prettier · Jest
部署 Docker · Vercel · Netlify · Cloudflare Workers · EdgeOne Pages

部署

本项目支持 Docker、Vercel、Netlify、Cloudflare Workers 和 EdgeOne Pages 平台 部署。 一键部署到 Zeabur 一键部署到 Render

Cloudflare Workers 部署(通过 GitHub Actions)

Cloudflare Workers 提供免费的边缘计算服务,通过 GitHub Actions 可以实现自动化部署。

前置要求

  1. 一个 Cloudflare 账号
  2. Fork 本项目到你的 GitHub 账号
  3. 准备一个 Upstash Redis 实例(推荐)

配置步骤

1. 获取 Cloudflare API Token 和 Account ID

  • 访问 Cloudflare Dashboard
  • 点击右上角头像 > My Profile > API Tokens
  • 点击 "Create Token",选择 "Edit Cloudflare Workers" 模板
  • 或使用自定义 Token,需要以下权限:
    • Account - Cloudflare Workers Scripts - Edit
    • Account - D1 - Edit(仅在使用 D1 数据库时需要)
  • 创建后复制生成的 API Token
  • 在 Dashboard 首页右侧可以看到你的 Account ID

2. 配置 GitHub Secrets

进入你 Fork 的仓库,点击 Settings > Secrets and variables > Actions > New repository secret,添加以下必需的 Secrets:

必需配置:

Secret 名称 说明 示例值
CLOUDFLARE_API_TOKEN Cloudflare API Token your_api_token_here
CLOUDFLARE_ACCOUNT_ID Cloudflare Account ID abc123def456
USERNAME 站长账号 admin
PASSWORD 站长密码 your_secure_password
NEXT_PUBLIC_STORAGE_TYPE 存储类型 upstash
UPSTASH_URL Upstash Redis URL https://xxx.upstash.io
UPSTASH_TOKEN Upstash Redis Token your_upstash_token

3. 触发部署

配置完成后,有两种方式触发部署:

方式一:手动触发

  • 进入仓库的 Actions 页面
  • 选择 "Deploy to Cloudflare" workflow
  • 点击 "Run workflow" 按钮
  • 选择分支(通常是 main 或 dev)
  • 点击 "Run workflow" 开始部署

方式二:自动触发(可选)

如果想要在推送代码时自动部署,可以修改 .github/workflows/cloudflare-deploy.yml 文件:

yaml
on:
  push:
    branches:
      - main  # 或你的主分支名称
  workflow_dispatch:

4. 查看部署状态

  • 在 Actions 页面可以看到部署进度
  • 部署成功后,访问 https://your-project-name.your-account.workers.dev
  • 也可以在 Cloudflare Dashboard 的 Workers & Pages 中查看部署的应用

5. 绑定自定义域名(可选)

  • 在 Cloudflare Dashboard 中进入你的 Worker
  • 点击 Settings > Triggers > Custom Domains
  • 添加你的自定义域名

6. 使用 D1 数据库(可选)

如果想使用 Cloudflare D1 数据库代替 Upstash Redis,需要进行以下配置:

  1. 在 Cloudflare Dashboard 中创建一个 D1 数据库
  2. 复制数据库 ID
  3. 在 GitHub Secrets 中配置:
    • 将 NEXT_PUBLIC_STORAGE_TYPE 设置为 d1
    • 添加 D1_DATABASE_ID 并填入你的数据库 ID
    • 无需配置 UPSTASH_URL 和 UPSTASH_TOKEN

7. 配置外部定时任务(可选)

可使用外部定时请求/api/cron/mtvpls端点以触发定时任务,或新建一个workers请求触发,推荐每小时请求一次。


EdgeOne Pages 部署(通过 GitHub Actions)

EdgeOne Pages/Makers 支持通过 API Token 在 GitHub Actions 中自动构建并部署,本项目已内置 .github/workflows/edgeone-deploy.yml。

前置要求

  1. 一个腾讯云 EdgeOne 账号
  2. Fork 本项目到你的 GitHub 账号
  3. 准备一个 Turso 数据库实例(推荐,免费 SQLite 云数据库)或 Upstash Redis 实例
  4. 准备 EdgeOne API Token

配置步骤

1. 获取 EdgeOne API Token

  • 进入 EdgeOne Pages/Makers 控制台
  • 在账号或 API Token 相关页面创建用于 CI/CD 的 Token
  • 复制生成的 Token,后续填入 GitHub Secrets

2. 配置 GitHub Secrets

进入你 Fork 的仓库,点击 Settings > Secrets and variables > Actions > New repository secret,添加以下必需的 Secrets:

Secret 名称 说明 示例值
EDGEONE_API_TOKEN EdgeOne API Token your_edgeone_token
USERNAME 站长账号 admin
PASSWORD 站长密码 your_secure_password
NEXT_PUBLIC_STORAGE_TYPE 存储类型 turso 或 upstash

使用 Turso(推荐):

在 Turso 注册账号并创建数据库,然后运行 pnpm init:turso 初始化表结构(需设置 TURSO_URL 和 TURSO_TOKEN 环境变量)。

Secret 名称 说明 示例值
TURSO_URL Turso 数据库 URL libsql://your-db.turso.io
TURSO_TOKEN Turso 访问令牌 your_turso_token

使用 Upstash Redis:

Secret 名称 说明 示例值
UPSTASH_URL Upstash Redis URL https://xxx.upstash.io
UPSTASH_TOKEN Upstash Redis Token your_upstash_token

其他可选环境变量可按需继续添加到 GitHub Secrets,工作流会自动同步已配置且非空的变量到 EdgeOne 项目环境变量中。

3. 触发部署

  • 进入仓库的 Actions 页面
  • 选择 "Deploy to EdgeOne" workflow
  • 点击 "Run workflow"
  • project_name 默认为 moontvplus
  • area 默认为 overseas,即全球可用区(不含中国大陆);如需全球可用区可选择 global
  • sync_environment 默认开启,会在部署后同步环境变量并再次部署以确保新建项目也能读取环境变量

Docker 部署

Kvrocks 存储(推荐)

…

(若指定kvrocks-data目录,需要将所挂载的数据目录权限调整为777否则会导致创建数据库失败)

SQLite 存储

yaml
services:
  moontv-core:
    image: ghcr.io/mtvpls/moontvplus:latest
    container_name: moontv-core
    restart: on-failure
    ports:
      - '3000:3000'
    environment:
      - USERNAME=admin
      - PASSWORD=admin_password
      - NEXT_PUBLIC_STORAGE_TYPE=d1
      - SQLITE_DB_PATH=/app/.data/moontv.db
    volumes:
      - ./data:/app/.data

Redis 存储(有一定的丢数据风险)

…

Upstash 存储

  1. 在 upstash 注册账号并新建一个 Redis 实例,名称任意。
  2. 复制新数据库的 HTTPS ENDPOINT 和 TOKEN
  3. 使用如下 docker compose
yaml
services:
  moontv-core:
    image: ghcr.io/mtvpls/moontvplus:latest
    container_name: moontv-core
    restart: on-failure
    ports:
      - '3000:3000'
    environment:
      - USERNAME=admin
      - PASSWORD=admin_password
      - NEXT_PUBLIC_STORAGE_TYPE=upstash
      - UPSTASH_URL=上面 https 开头的 HTTPS ENDPOINT
      - UPSTASH_TOKEN=上面的 TOKEN

Lite 镜像说明

ghcr.io/mtvpls/moontvplus-lite:latest 为更小的镜像,但不支持启动内置观影室服务,也不支持 SQLite(NEXT_PUBLIC_STORAGE_TYPE=d1)自动初始化方案。

示例:

…

(若指定kvrocks-data目录,需要将所挂载的数据目录权限调整为777否则会导致创建数据库失败)

指定运行 UID/GID:容器默认以 1001:1001(nextjs 用户)运行。可通过 PUID / PGID 环境变量指定容器进程运行时使用的用户/组 ID。挂载宿主机目录时建议将其设为宿主机目录的属主 UID/GID,容器启动时会自动调整进程属主并修正 /data、/app/.data 等数据目录的属主,避免权限问题。

配置文件

完成部署后为空壳应用,无播放源,需要站长在管理后台的配置文件设置中填写配置文件,本版本已不支持无数据库运行。

配置文件示例如下:

json
{
  "cache_time": 7200,
  "api_site": {
    "dyttzy": {
      "api": "http://xxx.com/api.php/provide/vod",
      "name": "示例资源",
      "detail": "http://xxx.com"
    }
    // ...更多站点
  },
  "custom_category": [
    {
      "name": "华语",
      "type": "movie",
      "query": "华语"
    }
  ]
}
  • cache_time:接口缓存时间(秒)。
  • api_site:你可以增删或替换任何资源站,字段说明:
    • key:唯一标识,保持小写字母/数字。
    • api:资源站提供的 vod JSON API 根地址。
    • name:在人机界面中展示的名称。
    • detail:(可选)部分无法通过 API 获取剧集详情的站点,需要提供网页详情根 URL,用于爬取。
  • custom_category:自定义分类配置,用于在导航中添加个性化的影视分类。以 type + query 作为唯一标识。支持以下字段:
    • name:分类显示名称(可选,如不提供则使用 query 作为显示名)
    • type:分类类型,支持 movie(电影)或 tv(电视剧)
    • query:搜索关键词,用于在豆瓣 API 中搜索相关内容

custom_category 支持的自定义分类已知如下:

  • movie:热门、最新、经典、豆瓣高分、冷门佳片、华语、欧美、韩国、日本、动作、喜剧、爱情、科幻、悬疑、恐怖、治愈
  • tv:热门、美剧、英剧、韩剧、日剧、国产剧、港剧、日本动画、综艺、纪录片

也可输入如 "哈利波特" 效果等同于豆瓣搜索

MoonTV 支持标准的苹果 CMS V10 API 格式。

自动更新

可借助 watchtower 自动更新镜像容器

dockge/komodo 等 docker compose UI 也有自动更新功能

环境变量

变量 说明 可选值 默认值
USERNAME 站长账号 任意字符串 无默认,必填字段
PASSWORD 站长密码 任意字符串 无默认,必填字段
CRON_PASSWORD 定时任务 API 访问密码(用于保护 /api/cron 端点) 任意字符串 mtvpls
CRON_WAIT_FOR_COMPLETION 定时任务接口是否等待任务完全结束后再返回响应(true 时返回 200,false 时立即返回 202)。部署在 serverless 平台(如 Vercel)时建议设置为 true,否则响应返回后异步执行可能会被平台杀后台导致任务中断 true/false false
CRON_USER_BATCH_SIZE 定时任务用户批处理大小(控制并发处理的用户数量,影响播放记录和收藏更新任务的并发性能) 正整数 3
SITE_BASE 站点 url 形如 https://example.com 空
NEXT_PUBLIC_SITE_NAME 站点名称 任意字符串 MoonTV
ANNOUNCEMENT 站点公告 任意字符串 本网站仅提供影视信息搜索服务,所有内容均来自第三方网站。本站不存储任何视频资源,不对任何内容的准确性、合法性、完整性负责。
ANNOUNCEMENT_DISPLAY_MODE 公告显示模式 once、every once
NEXT_PUBLIC_STORAGE_TYPE 播放记录/收藏的存储方式 redis、kvrocks、upstash、d1、turso、postgres 无默认,必填字段
KVROCKS_URL kvrocks 连接 url 连接 url 空
REDIS_URL redis 连接 url 连接 url 空

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

TypeScript

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言