本文档介绍了IPTV存储库如何将数千个流媒体频道组织到一个结构化的播放列表系统中。它解释了按不同标准(类别、语言、国家和地区)分层的播放列表组织方式以及支持此组织的技术实现。
IPTV存储库通过多种方式提供对相同内容的访问,并根据不同的分类方案进行组织,以满足各种用户需求。这是通过具有聚合和专用播放列表文件的分层播放列表结构来实现的。
来源: README.md25-293 .readme/template.md26-112
主播放列表(index.m3u)包含存储库中所有可用的频道。它作为所有其他专用播放列表的来源,是内容的全面集合。
https://iptv-org.github.io/iptv/index.m3u
此播放列表在播放列表生成过程中由IndexGenerator生成,该生成器选择所有通过内容验证标准的流。
来源: README.md29-35 scripts/commands/playlist/generate.ts144-145
频道按内容类别(例如,体育、新闻、电影)进行组织,并设有主类别索引和各个类别播放列表。
类别索引(index.category.m3u)按内容类别组织所有频道,每个频道都出现在其各自的类别组下。
https://iptv-org.github.io/iptv/index.category.m3u
来源: README.md37-47 scripts/commands/playlist/generate.ts147-148
每个类别都有其自己的专用播放列表文件,其中只包含该类别的频道
| 类别 | 描述 | 播放列表 |
|---|---|---|
| 动画 | 主要是 2D 或 3D 动画 | categories/animation.m3u |
| 商业 | 与商业相关的节目 | categories/business.m3u |
| 新闻 | 新闻广播 | categories/news.m3u |
| 体育 | 体育节目 | categories/sports.m3u |
| ... | ... | ... |
支持的类别及其定义的完整列表维护在.readme/supported-categories.md 文件中。
来源: README.md48-87 .readme/supported-categories.md1-32 scripts/commands/playlist/generate.ts124-125
频道按广播语言组织,方便用户查找特定语言的内容。
语言索引(index.language.m3u)按广播语言组织所有频道
https://iptv-org.github.io/iptv/index.language.m3u
来源: README.md91-101 scripts/commands/playlist/generate.ts156-157
每种语言都有其自己的专用播放列表,其中只包含广播该语言的频道
| 语言 | 通道 | 播放列表 |
|---|---|---|
| 英语 | 2112+ | languages/eng.m3u |
| 西班牙语 | 2071+ | languages/spa.m3u |
| 阿拉伯语 | 393+ | languages/ara.m3u |
| ... | ... | ... |
来源: README.md102-291 scripts/commands/playlist/generate.ts134-135
频道按其广播国家进行组织,使用户能够找到本地内容。
国家索引(index.country.m3u)按目标广播国家组织所有频道
https://iptv-org.github.io/iptv/index.country.m3u
来源: README.md295-305 scripts/commands/playlist/generate.ts150-154
每个国家都有其自己的专用播放列表,其中包含广播到该国家的频道
| 国家 | 通道 | 播放列表 |
|---|---|---|
| 🇺🇸 美国 | 1800+ | countries/us.m3u |
| 🇬🇧 英国 | 300+ | countries/uk.m3u |
| ... | ... | ... |
某些国家还有针对国家内特定地区的细分播放列表(例如,州、省)。
来源: README.md306-345 scripts/commands/playlist/generate.ts127-132
频道按地理区域组织,方便用户查找更广泛区域的内容。
地区索引(index.region.m3u)按目标广播地区组织所有频道
https://iptv-org.github.io/iptv/index.region.m3u
来源: README.md94-111 scripts/commands/playlist/generate.ts158-160
每个地区都有其自己的专用播放列表,其中包含广播到该地区的频道
| 区域 | 播放列表 |
|---|---|
| 非洲 | regions/africa.m3u |
| 美洲 | regions/americas.m3u |
| 亚洲 | regions/asia.m3u |
| 欧洲 | regions/europe.m3u |
| 大洋洲 | regions/oceania.m3u |
此外,还有一个用于全球可用频道的“国际”组。
来源: scripts/generators/indexRegionGenerator.ts1-63 scripts/commands/playlist/generate.ts138-142
播放列表的组织由复杂的模型和生成系统提供支持。下图说明了所涉及的关键组件
来源: scripts/commands/playlist/generate.ts1-164 scripts/models/stream.ts1-390 scripts/core/playlistParser.ts1-49
Stream 类是播放列表组织的核心,代表一个具有所有元数据的单独频道直播流。
每个 Stream 都与一个 Channel(提供类别等元数据)和一个 Feed(提供广播区域和语言信息)相关联。这些关系使得系统能够按各种标准对直播流进行组织。
来源: scripts/models/stream.ts5-333
Feed 类管理着决定直播流出现在哪个国家/地区播放列表中的广播区域信息。
广播区域使用三种格式的代码指定:
c/XX - 国家代码(例如,美国是 c/US)r/XXX - 区域代码(例如,欧洲是 r/EUR)s/XX-XXX - 子区域代码(例如,纽约州是 s/US-NY)特殊代码 r/INT 指定了国际可用的频道。
来源: scripts/models/feed.ts1-201
播放列表生成流程遵循以下步骤:
streams/ 目录中的文件加载原始直播流数据。playlist:generate 命令协调整个流程,生成所有经过组织整理的播放列表文件。
来源: scripts/commands/playlist/generate.ts28-161 scripts/core/playlistParser.ts1-48
播放列表组织系统通过多种分类方案为 IPTV 频道提供灵活的访问。这使用户能够根据他们的特定兴趣、首选语言或地理位置来查找内容。
技术实现利用了一个健壮的数据模型,该模型捕获了直播流、频道、类别、语言和地理实体之间复杂的关联,从而能够自动生成组织良好的播放列表。
有关特定国家播放列表及其结构的信息,请参阅 国家特定播放列表。