零成本搭建IPTV直播源自动更新系统
☁️ 零成本搭建 IPTV 直播源自动更新系统
—— 基于 GitHub Actions × Cloudflare Pages 的全自动化方案
核心思想:一次配置,永久自动。告别手动找源的烦恼。
所需资源:GitHub 账号(免费)+ Cloudflare 账号(免费)—— 零成本,纯免费
📑 目录

1. 技术架构与运行原理
本方案选用开源项目 iptv-sources 作为核心引擎,其完整的运行链路如下:
flowchart LR
A[GitHub Actions<br>定时触发] --> B[Node.js 抓取脚本]
B --> C[多公开源采集]
C --> D[HTTP 可用性检测]
D --> E[失效剔除 · 有效保留]
E --> F[渲染 M3U/TXT]
F --> G[Cloudflare Pages<br>全球 CDN 分发]
G --> H[终端播放器]
💡 核心优势:整个流程完全自动化,用户只需完成一次初始配置即可长期使用。每年可节省数百元的服务器租赁费用,同时 CDN 加速带来的低延迟特性使播放体验优于自建服务器。
2. 前置准备事项
2.1 GitHub 账号
访问 github.com 完成注册。免费套餐每月提供 2000 分钟 的 Actions 执行时长,对每两小时运行一次的场景而言绰绰有余。
2.2 Cloudflare 账号
在 dash.cloudflare.com 注册。Pages 服务的免费层包含:
- 每月 500 次 构建请求
- 无限带宽 与全球节点 CDN 加速
- 足以支撑家庭用户的全部访问需求
3. 分步部署指南
3.1 Fork 项目仓库
登录 GitHub 后访问 iptv-sources 项目主页,点击右上角的 Fork 按钮将仓库复制至个人账号下。这一操作会创建一份完全属于你自己的项目副本,后续所有修改均在此副本上进行。
3.2 连接 Cloudflare Pages
# 操作路径
Cloudflare Dashboard → Workers & Pages → Pages → Create a Pages → Connect to Git
按提示授权 Cloudflare 读取 GitHub 仓库列表,选中刚刚 Fork 的项目:
| 配置项 | 填写值 |
|---|---|
| 项目名称 | 自定义,如 my-iptv-source |
| 生产分支 | main |
| 构建命令 | pnpm build:static |
| 输出目录 | m3u |
完成设置后点击 Save and Deploy。
3.3 配置 GitHub Secrets
为了让 GitHub Actions 能自动将生成的文件部署到 Cloudflare,需要配置认证凭据:
① 获取 Cloudflare API Token
Cloudflare Dashboard → My Profile → API Tokens → Create Token
# 选择 "Edit Cloudflare Workers" 模板
# 权限: Account.Workers:* 、 Account.Pages:* 、 Zone.Settings:*
② 获取 Account ID
在 Cloudflare Dashboard 右侧找到 Account ID 并复制。
③ 添加 Secrets
进入 GitHub 仓库的 Settings → Secrets and variables → Actions → New repository secret,依次添加:
| Secret 名称 | 值 |
|---|---|
CLOUDFLARE_API_TOKEN |
上一步创建的 API Token |
CLOUDFLARE_ACCOUNT_ID |
你的 Account ID |
PROJECT_NAME |
Cloudflare Pages 中的项目名称 |
3.4 手动触发首次构建
# GitHub 仓库页面操作
Actions 标签 → Deploy to Cloudflare → Run workflow → main 分支 → Run workflow
工作流执行时间约 3-5 分钟。执行完成后,访问以下链接验证结果:
https://你的项目名.pages.dev/youhun.m3u
https://你的项目名.pages.dev/all.m3u
4. 个性化定制选项
4.1 频道分类调整
项目根目录下的 config.ts 文件提供了丰富的定制能力:
| 功能 | 说明 |
|---|---|
| 频道分组 | 将央视、卫视、地方台分别归类 |
| 白名单/黑名单 | 指定需要收录或排除的频道 |
| 输出格式 | 支持 M3U / TXT / JSON |
4.2 更新频率配置
在 .github/workflows/deploy.yml 中修改 cron 表达式:
# 每 2 小时执行一次(默认)
cron: '0 */2 * * *'
# 每 6 小时执行一次
cron: '0 */6 * * *'
# 每天凌晨 4 点执行一次
cron: '0 4 * * *'
⚠️ 注意:考虑到源站可能对高频请求有限制机制,建议更新间隔设置在 2 小时以上。
5. 播放器对接方法
部署完成后获得的 M3U 地址可被绝大多数主流播放器识别:
| 播放器 | 配置方法 |
|---|---|
| VLC | 媒体 → 打开网络串流 → 粘贴 M3U 地址 |
| PotPlayer | Ctrl+U → 粘贴 M3U 地址 |
| Kodi | 安装 PVR IPTV Simple Client → 填入 M3U + EPG 地址 |
| TVBox | 设置 → 配置地址 → 填入 M3U 地址 |
6. 常见问题排查
| 问题 | 解决方案 |
|---|---|
| M3U 地址返回 404 | 首次部署后 Actions 可能还未执行,手动触发一次即可 |
| pages.dev 域名被屏蔽 | 绑定自定义域名,或在 Cloudflare 中开启代理功能 |
| 免费额度够用吗? | Pages 每月 500 次构建 + Actions 每月 2000 分钟,完全足够 |
| 部分频道无法播放 | 网络环境差异导致,可尝试开启 IPv6 |
🎯 一次配置 · 永久自动 · 全家人共享
—— 告别到处找源的烦恼,拥抱稳定的电视直播体验
评论区 (2)
发表评论
共有 2 条评论
这方案太实用了!以前手动找源累死,现在每两小时自动更新,连服务器钱都省了。用Cloudflare CDN播放确实流畅,再也不卡顿了。
文中说GitHub Actions每月2000分钟“绰绰有余”,但每两小时跑一次,一个月就360次,每次如果超过5分钟不就用超了?而且代码里有没有设置缓存避免重复抓取?希望作者能展开算算实际资源消耗,别让小白踩坑。