本文档介绍了 IPTV-org/iptv 存储库中 IPTV 流的处理、格式化、规范化和验证过程。它涵盖了从初始解析到最终播放列表生成的流生命周期,重点关注支持系统流处理能力的底层技术实现。
有关使用这些流程的脚本和工具的信息,请参阅 脚本和工具。有关底层数据模型的详细信息,请参阅 数据模型。
IPTV 存储库处理数千个流 URL,为最终用户创建有组织的播放列表。流处理是确保这些流格式正确、已验证并组织到相应播放列表中的核心功能。
来源:scripts/core/playlistParser.ts scripts/commands/playlist/format.ts scripts/commands/playlist/generate.ts scripts/commands/api/generate.ts
流处理的核心是 Stream 类,它代表单个 IPTV 流及其元数据,并提供用于操作、验证和输出格式化的方法。
Stream 的关键属性
name:频道的显示名称url:流 URLid:唯一标识符,通常格式为 channelId@feedIdchannel:关联的 Channel 对象,包含元数据feed:关联的 Feed 对象,包含广播和语言信息quality:流质量(例如,720p,1080i)来源:scripts/models/stream.ts5-333
流处理的第一步是使用 PlaylistParser 类将 M3U 播放列表文件解析为 Stream 对象。
PlaylistParser 类
iptv-playlist-parser 库解析 M3U 内容Stream 对象Channel 和 Feed 数据相关联来源:scripts/core/playlistParser.ts1-48
格式化过程确保流经过适当的规范化和组织,以在整个存储库中保持一致性。
所有流 URL 都使用 normalizeURL() 方法进行规范化,以确保 URL 格式一致。
playlist:format 命令执行多个规范化步骤
此格式化确保了播放列表的一致性并消除了冗余,使其更加可靠和易于维护。
来源:scripts/commands/playlist/format.ts1-80 scripts/models/stream.ts191-195
流验证确保流符合存储库的标准和政策。验证过程
可检测到的验证问题示例
| 问题类型 | 描述 | 操作 |
|---|---|---|
invalid_id | 数据库中未找到频道 ID | 警告 |
blocked | 由于版权声明,流在阻止列表中 | 错误 |
nsfw_content | 流包含未标记为 NSFW 的 NSFW 内容 | 错误 |
wrong_link | 流 URL 无效或不正确 | 警告 |
验证过程对于维护流集合的质量和法律合规性至关重要。
来源:tests/commands/playlist/validate.test.ts1-38 tests/commands/report/create.test.ts1-24
在处理和验证之后,流将根据类别、国家/地区、语言和地区组织到各种播放列表中。
流组织过程
这种有组织的结构使用户可以根据其兴趣或地理位置轻松找到流。
来源:scripts/commands/playlist/generate.ts110-160 scripts/generators/indexRegionGenerator.ts1-64
生成输出播放列表时,Stream 类的 toString() 方法会使用正确的 M3U 语法格式化每个流,包括
带有的 #EXTINF 行
tvg-id)tvg-logo)group-title)VLC 选项(#EXTVLCOPT),用于 HTTP 引用页和用户代理(如果需要)
流 URL
格式化流条目示例
#EXTINF:-1 tvg-id="BBCWorldNews.uk" tvg-logo="https://example.com/logo.png" group-title="News",BBC World News (720p)
http://example.com/stream.m3u8
来源:scripts/models/stream.ts334-362
流更新过程通过以下方式维护存储库的运行状况:
此工作流确保存储库保持最新的高质量流,同时通过 GitHub 问题跟踪更改。
来源:tests/commands/playlist/update.test.ts1-38