用 iptv-org 免费获取全球直播源,省去手动找源的痛苦
背景:找直播源有多烦
如果你像我一样偶尔想看看海外新闻、体育直播或一些冷门频道,通常只有两条路:
- 买付费 IPTV 服务——每个月几十块,频道还经常不稳定。
- 上各种论坛、百度云搜“直播源.m3u”——结果 80% 过期,剩下 20% 是盗链,播两分钟就断。
直到我发现了 iptv-org/iptv。这个项目在 GitHub 上每天稳定更新,今天刚破了 120k stars。它其实就是一个大仓库,收录了全球各地公开的 IPTV 频道(注意,是公开的,不是盗版),以标准的 m3u 格式提供。你不需要注册账号,直接复制链接就能用 VLC、Kodi、PotPlayer 播放。
核心功能:比你想象的更全
这个项目不只有一个 m3u 文件。它按频道分类生成了多个子列表,你在 https://iptv-org.github.io/iptv/ 上看一眼就知道:
- 按语言:
index/english.m3u、index/chinese.m3u等。 - 按国家:
index/us.m3u、index/cn.m3u。 - 按类型:
categories/news.m3u、categories/sports.m3u。 - 组合:
languages/chinese.m3u同时包含中国大陆、台湾、海外华语频道。
每个频道条目包含:频道名称、logo(可选)、tvg-id、group-title(用于 EPG 导视)。
举个例子,打开 https://iptv-org.github.io/iptv/index/english.m3u,你会看到类似这样:
#EXTM3U
#EXTINF:-1 tvg-id="BBCWorldNews.uk" tvg-name="BBC World News" tvg-logo="https://logoUrl" group-title="News",BBC World News
http://example.com/stream.m3u8
重点来了:这个项目还提供了 REST API,你可以用编程方式查询频道信息,而不是直接解析 m3u 文件。
代码示例:用 Node.js 获取中文频道并输出可用的流地址
很多开发者想把这些频道集成到自己应用里(比如做个自定义电视墙、监控大屏)。直接拿整个 m3u 文件解析太慢,而且很多流已经过期。推荐用 iptv-org 的 API 配合请求重试找出可用的。
先安装依赖:
npm install axios
然后写一个简单的脚本 fetch-iptv.js:
const axios = require('axios');
// 从 iptv-org API 获取中文频道列表
// 文档:https://github.com/iptv-org/api
async function getChineseChannels() {
const response = await axios.get('https://iptv-org.github.io/iptv/index/chinese.m3u');
// 解析 m3u 格式
const lines = response.data.split('\n');
const channels = [];
let current = {};
for (const line of lines) {
if (line.startsWith('#EXTINF:')) {
// 提取 tvg-name 和 group-title
const nameMatch = line.match(/tvg-name="([^"]+)"/);
const groupMatch = line.match(/group-title="([^"]+)"/);
current.name = nameMatch ? nameMatch[1] : 'Unknown';
current.group = groupMatch ? groupMatch[1] : 'Other';
} else if (line.startsWith('http')) {
current.url = line.trim();
channels.push({...current});
current = {};
}
}
return channels;
}
// 测试:过滤出新闻类频道
(async () => {
const all = await getChineseChannels();
const newsChannels = all.filter(ch => ch.group && ch.group.toLowerCase().includes('news'));
console.log(`共找到 ${all.length} 个中文频道,其中新闻类 ${newsChannels.length} 个`);
console.log(newsChannels.slice(0, 3));
})();
运行 node fetch-iptv.js 会输出类似:
共找到 168 个中文频道,其中新闻类 12 个
[
{ name: 'CCTV-13', group: 'News', url: 'http://...' },
{ name: 'Phoenix Infonews', group: 'News', url: 'http://...' },
{ name: 'Xinhua TV', group: 'News', url: 'http://...' }
]
注意:上面的 url 只是示例,实际项目中很多流是来自中国公开直播(比如央视官网的 hls),但因为版权原因,部分国内频道可能被剥离。如果你要找的是中国大陆频道,建议直接使用 iptv-org 的 index/cn.m3u,但很大概率只能拿到海外华语频道。
和同类项目的区别
市面上还有几个类似的开源项目:
- epg.pw / freesat.cn:单个网站维护,更新不及时,经常死链。
- tv.garden:界面好看,但数据量小(几千个频道),且没有 API。
- iptv-org:数据来自社区+爬虫,每天 CI 自动验证链接有效性,有详细的分类和 API。
我的实际体验:iptv-org 的中文频道数量在 150-200 之间,比 tv.garden 多 3 倍。但它的缺点也很明显——链接验证只是简单的 HTTP 响应码检查,很多流返回 200 但实际内容无法解码(比如加密的 HLS 或需要 referer)。所以你要用的话,最好跑一个二次验证(比如用 ffprobe 检查能否解码)。
适用场景与局限
适合这样用
- 个人看新闻/体育:直接用 VLC 打开
https://iptv-org.github.io/iptv/index/chinese.m3u,选你感兴趣的。 - 学习流媒体开发:拿来当测试数据,解析 m3u 格式,练习播放器集成。
- 做数字标牌/大屏:像上面代码一样,用 Node.js 过滤后嵌入到自己的网站里。
千万别这么用
- 商用直播服务:所有频道都是第三方公开流,随时可能失效或变更域名。你拿来卖给客户,明天就可能被投诉。
- 需要稳定高清源的场景:iptv-org 的很多流是 480p 甚至更低,而且可能有缓冲。如果要做电视直播应用,建议购买正规 IPTV 服务商接口。
- 中国大陆内网环境:部分海外 ISP 的流被 GFW 屏蔽,你用国内服务器抓取会直接超时。
快速上手步骤
如果只是想立刻看,不用写一行代码:
- 打开 VLC 媒体播放器(免费,支持 Windows/Mac/Linux)。
- 菜单:媒体 -> 打开网络串流。
- 输入以下任意一个 URL(注意区分语言):
- 全量:
https://iptv-org.github.io/iptv/index.m3u - 中文:
https://iptv-org.github.io/iptv/languages/chinese.m3u - 美国:
https://iptv-org.github.io/iptv/countries/us.m3u
- 全量:
- 点击播放,等几秒缓冲,你就可以开始换台了。
如果你是开发者,想手动验证链接有效性,可以用 ffmpeg:
ffmpeg -i "http://streamUrl" -t 5 -f null - 2>&1 | grep -i "error"
没有报错说明流可用。
总结(严格来说不是总结)
iptv-org 是寻找免费公开直播源的绝佳起点。它最大的价值不是提供稳定服务,而是节省你全网搜索直播源的时间。拿到列表后,你还需要自己做二次验证和过滤。如果你希望一步到位、即开即用,那它不合适;但如果你像我一样喜欢折腾,愿意用一个周末写个脚本把可用源挑出来,那它值得你 star。