





















今天在 GitHub Trending 上看到一个有意思的项目:iptv-org/iptv,一个汇聚全球公开 IPTV 频道的开源项目,一行 M3U 链接就能在任意播放器里看遍天下电视。
iptv-org/iptv 是由社区驱动的开源项目,旨在收录互联网上的公开 IPTV(Internet Protocol Television)频道链接,让用户无需订阅即可免费观看全球电视直播。项目核心特点:
项目采用多仓库架构,生态链完整:
| 子项目 | 仓库 | 作用 |
|---|---|---|
| iptv | 本仓库 | 播放列表维护与分发 |
| database | iptv-org/database | 频道元数据(名称、国家、语言等) |
| api | iptv-org/api | RESTful 接口封装 |
| epg | iptv-org/epg | 电子节目指南生成 |
频道数据以 M3U 格式存储,关键字段包括 #EXTINF 扩展信息:
#EXTINF:-1 tvg-id="CNN.us" tvg-name="CNN" tvg-country="US" tvg-language="English" group-title="News",CNN
https://live.cnn.com/hls/feed/123.m3u8
#EXTINF 行定义元数据,url 行定义实际流地址。项目使用 iptv-playlist-parser 库解析 M3U 文件,关键解析逻辑:
// eslint.config.mjs (项目 ESLint 配置节选)
import typescriptEslint from '@typescript-eslint/eslint-plugin'
import stylistic from '@stylistic/eslint-plugin'
import tsParser from '@typescript-eslint/parser'
import { FlatCompat } from '@eslint/eslintrc'
import globals from 'globals'
export default [
...compat.extends('eslint:recommended', 'plugin:@typescript-eslint/recommended'),
{
plugins: {
'@typescript-eslint': typescriptEslint,
'@stylistic': stylistic
},
languageOptions: {
globals: { ...globals.browser },
parser: tsParser,
ecmaVersion: 'latest',
sourceType: 'module'
},
rules: {
'@stylistic/linebreak-style': ['error', 'windows'],
quotes: ['error', 'single'],
semi: ['error', 'never']
}
}
]
从 package.json 可以看出项目使用的关键技术:
项目通过 GitHub Actions 实现频道链接的自动化校验与播放列表更新:
npm run act:check # 触发 PR 检查工作流
npm run act:format # 触发格式编排工作流
npm run act:update # 触发播放列表更新工作流
# 克隆仓库
git clone https://github.com/iptv-org/iptv.git
cd iptv
# 安装依赖
npm install
# 加载 API 数据(首次安装必需)
npm run api:load
方法一:直接用 VLC 打开
获取主播放列表,复制以下链接到 VLC「打开网络串流」:
https://iptv-org.github.io/iptv/index.m3u
方法二:按国家筛选
获取特定国家的频道列表(如中国):
https://iptv-org.github.io/iptv/channels/cn.m3u
方法三:通过 API 查询
# 获取所有频道
curl "https://api.iptv.org/channels"
# 按国家筛选
curl "https://api.iptv.org/channels?country=cn"
下载节目指南:
# 克隆 EPG 工具
git clone https://github.com/iptv-org/epg.git
cd epg
npm install
# 生成指定频道的节目单
npm run start -- --channels=https://iptv-org.github.io/iptv/channels/cn.m3u
// 使用 @iptv-org/sdk 编程调用
import { Client } from '@iptv-org/sdk'
const client = new Client()
const channels = await client.getChannels({ country: 'CN' })
for (const channel of channels) {
console.log(`${channel.name}: ${channel.url}`)
}
Q: 频道播放不了,提示连接失败? A: 公开频道链接可能随时失效,这是正常现象。尝试刷新播放列表获取最新链接,或切换到同频道的其他源。项目 GitHub 页面会定期自动更新失效链接。
Q: 播放卡顿严重?
A: 优先选择同地区的 CDN 镜像节点,或尝试降低视频码率。也可以使用 m3u-linter 工具(npm run playlist:lint)提前检测链接质量。
Q: 如何贡献新频道?
A: 在 iptv-org/database 仓库提交 issue 或 PR,提供频道名称、国家、语言及官方流地址。项目有严格的贡献指南(CONTRIBUTING.md),需确保来源合法且经版权方授权公开。
Q: 支持回看/点播吗? A: 本项目仅收录实时直播流,不提供回看功能。如需时移播放,需借助 DVR 系统(如 Jellyfin + tvheadend)配合 IPTV 源录制实现。
iptv-org/iptv 是一个维护活跃、覆盖面广的优质开源项目,适合需要获取国际电视信号的技术用户和媒体爱好者。它以极简的 M3U 格式输出数据,兼容所有主流播放器,配套的 EPG 和 API 生态进一步扩展了应用场景。需要注意的是,频道链接的稳定性和版权合规性需要用户自行判断,项目本身仅负责链接聚合,不存储任何视频内容。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。