本文档提供了 IPTV 仓库架构的深入技术概述,解释了核心组件、数据模型和自动化流程如何协同工作以支持该系统。它侧重于实现公共 IPTV 流的收集、处理和分发的内部结构。
有关如何为仓库贡献的信息,请参阅开发与贡献。有关访问和使用播放列表的用户指南,请参阅用户指南。
IPTV 仓库架构旨在
系统建立在几个关键数据模型之上,这些模型代表了 IPTV 生态系统中的实体。
来源:scripts/models/stream.ts5-363 scripts/models/feed.ts4-200
The Stream 类是核心实体,代表具有其元数据的单个 IPTV 流。
Stream 模型的主要特性
来源:scripts/models/stream.ts5-363
The Feed 类代表频道的特定广播源。
Feed 模型对于确定以下内容尤为重要:
来源:scripts/models/feed.ts4-200
播放列表处理系统负责解析、转换和生成 M3U 播放列表。
The PlaylistParser 类
iptv-playlist-parser库解析内容Stream对象来源:scripts/core/playlistParser.ts1-48
系统根据不同标准生成各种播放列表文件。
| 生成器 (Generator) | 目的 | 输出 |
|---|---|---|
CategoriesGenerator | 按内容类别对流进行分组 | categories/*.m3u |
CountriesGenerator | 按国家/地区对流进行分组 | countries/*.m3u |
LanguagesGenerator | 按语言对流进行分组 | languages/*.m3u |
RegionsGenerator | 按地区对流进行分组 | regions/*.m3u |
IndexGenerator | 创建主索引文件 | index.m3u |
IndexCategoryGenerator | 创建类别索引 | index.category.m3u |
IndexCountryGenerator | 创建国家/地区索引 | index.country.m3u |
IndexLanguageGenerator | 创建语言索引 | index.language.m3u |
IndexRegionGenerator | 创建地区索引 | index.region.m3u |
生成过程由generate.ts命令协调,该命令负责整个工作流程。
来源:scripts/commands/playlist/generate.ts28-163 scripts/generators/indexRegionGenerator.ts1-64
流在其生命周期中经历了多个处理步骤。
The format.ts 命令
来源:scripts/commands/playlist/format.ts1-80 m3u-linter.json1-17
系统使用m3u-linter来强制执行流条目的质量标准。
| 规则 | 描述 |
|---|---|
no-empty-lines | 播放列表文件中不允许有空行 |
require-header | M3U 文件必须有正确的头部 |
attribute-quotes | 属性必须使用引号 |
require-info | 每个条目都必须有 EXTINF 标签 |
require-title | 每个条目都必须有标题 |
no-whitespace-before-title | 标题前不允许有空格 |
no-multi-spaces | 不允许有多个空格 |
no-extra-comma | 不允许有多余的逗号 |
space-before-paren | 括号前不允许有空格 |
no-dash | 在特定上下文中不允许使用破折号 |
require-link | 每个条目都必须有一个有效的链接 |
来源:m3u-linter.json1-17 package.json14
系统还为 API 生成 JSON 数据。
The api:generate 命令
来源:scripts/commands/api/generate.ts1-43
该仓库使用 GitHub Actions 工作流来自动化各种任务。
关键自动化组件
| 组件 | 目的 | 实现 |
|---|---|---|
check.yml | 验证拉取请求 | playlist:lint, playlist:validate |
format.yml | 格式化播放列表 | playlist:format |
update.yml | 更新播放列表和 API | playlist:generate, api:generate, readme:update |
deploy | 部署到 GitHub Pages | playlist:deploy, api:deploy |
自动化命令定义在 package.json 中,并通过 GitHub Actions 工作流执行。
系统的整体数据流可总结如下:
该架构使 IPTV 仓库能够高效地收集、处理和分发数以千计的 IPTV 流,并采用标准化格式,使其可供全球用户访问。
来源:package.json3-26 scripts/commands/playlist/generate.ts28-163 scripts/commands/api/generate.ts1-43