目 录CONTENT

文章目录

IPTV 系列①:白嫖全球 TV:一行命令搭建私有 IPTV 直播源管理器

y总
2026-03-28 / 0 评论 / 0 点赞 / 7 阅读 / 14178 字

白嫖全球 TV:一行命令搭建私有 IPTV 直播源管理器

📅 2026-03-28 | 🏷️ #全球IPTV #IPTV实战 #iptv-scraper #Docker #自动化 | 🐴 赛博牛马出品

文章系列:[全球 IPTV 直播源实战系列①]


一、前言

上周想看个香港新闻频道,打开收藏了两周的 IPTV 播放列表——

此频道无法播放
此频道无法播放
此频道无法播放

三个红叉,一个能看的都没有。

这大概是每个 IPTV 玩家都经历过的日常。满世界找源、群里跪求分享、存到本地文档里……结果不是源挂了,就是速度慢成 PPT。最后只能安慰自己:"凑合看吧。"

问题不在源本身,而在于没有人帮你持续维护。

今天介绍的这套方案,用 Docker + iptv-scraper 搭建一个私有 IPTV 直播源管理器,支持抓取全球 100+ 国家的频道,自动测速、自动过滤、自动去重,还能自动注入台标。源挂了?系统每天自动换一批新的,完全不用你管。


二、原理介绍

IPTV 播放原理

IPTV 的播放原理其实很简单。你只需要两个东西:

  • m3u8 播放列表文件:记录了频道名称和对应的视频流地址

  • 支持流媒体的播放器:如 VLC、NPlayer、IPTV Pro

一个典型的 m3u8 文件内容大概长这样:

#EXTINF:-1 tvg-name="ViuTV" tvg-logo="https://example.com/viutv.png",ViuTV 超清
https://stream.example.com/viutv/live.m3u8

播放器读取这个列表,把视频流地址交给解码器解码,就能在屏幕上播出画面了。整个链路是:m3u8 列表 → 播放器 → 解码 → 屏幕

iptv-scraper 工作流程

那么 iptv-scraper 做了什么?它的完整工作流程是这样的:

① 抓取全球源  →  ② 验证去重  →  ③ 速度测试  →  ④ 台标注入  →  ⑤ 输出 m3u

第一步:抓取全球源。 iptv-scraper 从 GitHub 上公开的 IPTV 源列表中抓取频道,支持 100+ 国家和地区,包括香港、台湾、日本、韩国、东南亚、欧美、中东等地区。

第二步:验证去重。 合并所有来源,剔除重复频道,规范化频道名称。

第三步:速度测试。 用 curl 下载视频流的前 512KB,计算实时带宽,自动过滤掉速度低于阈值(默认 500KB/s)的卡顿源。

第四步:台标注入。 自动匹配频道台标 URL,注入到 m3u 文件,让播放列表看起来更专业。

第五步:输出 m3u。 生成 all_merged.m3u 和按地区分类的 m3u 文件,直接导入播放器使用。

整个过程完全自动化,无需人工干预。

2.png

三、环境准备

在开始之前,你需要确保 Docker 已经安装在你的机器上。以下是几种常见环境的安装方式:

环境

安装方式

备注

群晖 NAS

Docker 套件中心直接安装

DSM 7.0+ 自带

绿联 NAS

Docker 管理器安装

UGOS Pro 系统

绿联 D4800

Docker Compose 部署

Debian 基础

Linux 服务器

`curl -fsSL get.docker.com

bash`

通用

macOS / Windows

Docker Desktop

桌面应用

iptv-scraper 对硬件要求很低,1 核 1G 足以运行,但建议在网络条件较好的服务器上部署,速度测试结果会更准确。

如果你已经有《Docker 系列》里搭建好的环境,可以直接跳过这一步。


四、核心部署

步骤 1:克隆项目

git clone https://github.com/xJEYDAin/iptv-scraper.git
cd iptv-scraper

目录结构如下:

iptv-scraper/
├── main.py              # 主程序入口
├── config.py            # 配置文件
├── requirements.txt     # Python 依赖
├── sources/             # 原始源目录(抓取后存放)
├── filtered/            # 过滤后数据
├── cache/               # 缓存目录(测速缓存/验证缓存)
├── output/              # 最终输出目录
│   ├── all_merged.m3u   # 全球合集
│   ├── asia.m3u         # 亚洲频道
│   ├── europe.m3u       # 欧洲频道
│   └── ...
├── alias.txt            # 频道别名映射表
├── logo_map.py          # 台标映射规则
└── docker-compose.yml   # Docker 部署文件

步骤 2:配置环境变量

创建一个 .env 文件,填入以下关键配置:

# 最低速度阈值(KB/s),低于此速度的频道会被过滤
MIN_SPEED_KB=500
# 是否启用速度测试(1=启用,0=跳过)
ENABLE_SPEEDTEST=1
# 速度测试超时时间(秒)
SPEEDTEST_TIMEOUT=10
# 按国家过滤(留空则抓取所有国家)
# 例如:COUNTRIES=HK,TW,JP,KR
COUNTRIES=
# GitHub Actions 模式下自动提交结果
GITHUB_ACTIONS=false

速度阈值 MIN_SPEED_KB=500 的含义是:每秒传输速率低于 500KB 的频道会被自动过滤。这个数值可以按需调整——如果你网络较好,可以降到 300KB 保留更多频道;如果觉得卡顿明显,可以提高到 800KB 甚至 1000KB。

步骤 3:运行抓取

方式一:Docker 一键启动(推荐)

docker-compose up

Docker Compose 会自动安装 Python 环境和所有依赖,全程无需手动配置。

方式二:本地直接运行

pip install -r requirements.txt
python main.py

首次运行会从 GitHub 下载源列表并开始测速,整个过程大概需要 5~15 分钟(取决于网络和频道数量)。运行日志会实时输出到终端:

[INFO] 正在抓取全球源...
[INFO] 发现 1247 个频道来源
[INFO] 开始速度测试...
[TEST] ViuTV HD ............ 2567 KB/s  ✅
[TEST] TVB Pearl ........... 1892 KB/s  ✅
[TEST] NHK World ........... 345 KB/s   ❌ 低于阈值
[INFO] 测速完成:312 通过 / 89 失败 / 超时 23
[INFO] 正在生成 all_merged.m3u...
[INFO] ✅ 完成!共 312 个可用频道

步骤 4:获取 m3u 文件

抓取完成后,在 output/ 目录下会生成以下文件:

文件名

说明

all_merged.m3u

全球合集,包含所有可用频道

asia.m3u

亚洲频道(港澳台/日韩/东南亚)

europe.m3u

欧洲频道

speedtest.json

速度测试详细结果

通过局域网访问或上传到服务器,即可获取稳定的 m3u 链接。


五、VLC 播放验证

拿到 m3u 文件后,用 VLC 导入播放列表即可验证效果。

电脑端 VLC(Windows / macOS / Linux):

  1. 打开 VLC → 菜单栏 媒体打开文件

  2. 选择下载的 all_merged.m3u 文件

  3. 点击"播放"

手机端 VLC(iOS / Android):

  1. 下载 m3u 文件到本地

  2. 用 VLC 打开该文件

  3. VLC 会自动解析频道列表

Android TV 端(IPTV Pro):

  1. 安装 IPTV Pro

  2. 添加播放列表 → 选择 从 URL 导入

  3. 填入 m3u 的 URL 地址(需要 HTTP 服务)

5.png

用 VLC 打开后,你会看到带台标的频道列表,点哪个看哪个,完全不需要再满世界找源了。


六、GitHub Actions 自动更新

手动运行虽然简单,但如果想彻底躺平,还需要让程序每天自动跑、自动更新 GitHub 上的 m3u 文件。

Fork 并配置

  1. Fork 项目 到自己的 GitHub 账号

  2. 开启 Actions 功能(默认启用)

  3. 编辑 .env 文件,设置 GITHUB_ACTIONS=true

定时任务配置

项目内置的 GitHub Actions workflow 在 .github/workflows/scrape.yml,默认每天凌晨 3 点自动运行:

schedule:
  - cron: '0 3 * * *'  # 每天 UTC 3:00 = 北京时间 11:00

如果想改成每 12 小时运行一次,改为:

schedule:
  - cron: '0 */12 * * *'

权限配置

首次运行时,Actions 可能因为没有写权限而失败。需要在 GitHub仓库设置中开启:

  • Settings → Actions → General → Workflow permissions → 勾选 "Read and write permissions"

6.png

启用后,每天凌晨 3 点 GitHub Actions 会自动: 1. 拉取最新源列表 2. 全部频道跑一遍速度测试 3. 生成新的 m3u 文件 4. 自动提交并推送到 GitHub

你只需要把 GitHub 上的 m3u 文件地址配置到播放器里,从此以后,源会自动更新,完全不用管


七、进阶配置预告

上面的基础配置已经能稳定运行了,但 iptv-scraper 还有不少进阶玩法,下一篇文章会深入展开:

别名映射表(alias.txt)

同一个频道在不同源里名字可能不一样,比如"香港无线新闻台"可能叫 TVB News,也可能叫 TVB-N。用 alias.txt 可以把这些不同名字统一映射到一个标准名称:

TVB News,TVB-N,TVBN,无线新闻 → TVB新闻
ViuTV,Viu TV,ViuTV超清 → ViuTV

台标映射(logo_map.py)

默认会从 CDN 抓取台标,但如果某些频道台标匹配不上,可以手动在 logo_map.py 里补充规则,支持精确匹配、前缀匹配、模糊包含三种模式。

地区分类精细化

output/ 下虽然有 asia.m3ueurope.m3u 等分类,但你也可以在 config.py 里自定义地区分组,只保留自己想要的频道。

这些进阶配置在系列第二篇《IPTV 源总是不稳定?我写了一个自动测速过滤系统》里会详细讲解。


八、总结

用 iptv-scraper 搭建的这套 IPTV 直播源管理系统,核心优势就四个字:躺平稳定

  • 自动化:GitHub Actions 每天自动抓取、自动测速、自动更新

  • 全球覆盖:100+ 国家频道,港澳台/日韩/东南亚/欧美全覆盖

  • 速度过滤:500KB/s 阈值自动过滤卡顿源,只保留流畅可看的

  • 台标注入:自动匹配频道台标,播放列表专业好看

  • 零成本:Docker 部署,完全免费,不需要买任何服务

系列后续会深入讲解:

  • 📖 第二篇:测速模块设计 + 多线程缓存机制

  • 📖 第三篇:VLC / IPTV Pro / 自建服务全对比

  • 📖 第四篇:Jellyfin + IPTV Scraper 打造全球直播媒体中心

  • 📖 第五篇:GitHub Actions 定时任务深度配置

  • 📖 第六篇:树莓派低功耗方案

  • 📖 第七篇:14 个免费台标资源站

  • 📖 第八篇:最新可用全球 IPTV 直播源汇总(持续更新)


🐴 赛博牛马出品 | [全球 IPTV 直播源实战系列①]

💡 相关项目iptv-scraper GitHub

0

评论区