菜单

技术架构

相关源文件

本文档提供了 IPTV 仓库架构的深入技术概述,解释了核心组件、数据模型和自动化流程如何协同工作以支持该系统。它侧重于实现公共 IPTV 流的收集、处理和分发的内部结构。

有关如何为仓库贡献的信息,请参阅开发与贡献。有关访问和使用播放列表的用户指南,请参阅用户指南

系统概览

IPTV 仓库架构旨在

  1. 处理来自各种来源的原始流 URL
  2. 验证和规范化流数据
  3. 按类别、国家/地区、语言和地区组织流
  4. 生成标准化的 M3U 播放列表和 API 数据
  5. 将这些资源部署到 GitHub Pages

架构图

来源:package.json3-26

核心数据模型

系统建立在几个关键数据模型之上,这些模型代表了 IPTV 生态系统中的实体。

数据模型关系

来源:scripts/models/stream.ts5-363 scripts/models/feed.ts4-200

流模型

The Stream 类是核心实体,代表具有其元数据的单个 IPTV 流。

Stream 模型的主要特性

  • 包含基本属性:名称、URL、ID、质量信息
  • 管理 HTTP 头(referrer、user-agent)
  • 处理与 Channel 和 Feed 对象的关联
  • 提供用于规范化和格式化的实用方法

来源:scripts/models/stream.ts5-363

Feed 模型

The Feed 类代表频道的特定广播源。

Feed 模型对于确定以下内容尤为重要:

  • 流以哪些语言进行广播
  • 流可用的地理区域(国家/地区、地区、分支机构)
  • 流是国际性的还是特定地区的

来源:scripts/models/feed.ts4-200

播放列表处理系统

播放列表处理系统负责解析、转换和生成 M3U 播放列表。

播放列表解析

The PlaylistParser

  • 从存储中读取 M3U 文件
  • 使用外部iptv-playlist-parser库解析内容
  • 从解析的项目创建Stream对象
  • 用频道和 Feed 数据丰富流
  • 返回完全填充的 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 命令

  • 规范化流 URL 以确保一致性
  • 根据 URL 删除重复的流
  • 根据已知频道验证流 ID
  • 按名称、分辨率、标签和 URL 对流进行排序
  • 将更改保存回原始文件

来源:scripts/commands/playlist/format.ts1-80 m3u-linter.json1-17

流验证

系统使用m3u-linter来强制执行流条目的质量标准。

规则描述
no-empty-lines播放列表文件中不允许有空行
require-headerM3U 文件必须有正确的头部
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生成

系统还为 API 生成 JSON 数据。

The api:generate 命令

  • 从数据库加载频道和 Feed 数据
  • 解析所有流文件
  • 将每个流转换为 JSON 表示形式
  • 将结果数据保存到 API 仓库

来源:scripts/commands/api/generate.ts1-43

自动化系统

该仓库使用 GitHub Actions 工作流来自动化各种任务。

关键自动化组件

组件目的实现
check.yml验证拉取请求playlist:lint, playlist:validate
format.yml格式化播放列表playlist:format
update.yml更新播放列表和 APIplaylist:generate, api:generate, readme:update
deploy部署到 GitHub Pagesplaylist:deploy, api:deploy

自动化命令定义在 package.json 中,并通过 GitHub Actions 工作流执行。

来源:package.json3-26

数据流

系统的整体数据流可总结如下:

该架构使 IPTV 仓库能够高效地收集、处理和分发数以千计的 IPTV 流,并采用标准化格式,使其可供全球用户访问。

来源:package.json3-26 scripts/commands/playlist/generate.ts28-163 scripts/commands/api/generate.ts1-43