菜单

流处理

相关源文件

本文档介绍了 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:流 URL
  • id:唯一标识符,通常格式为 channelId@feedId
  • channel:关联的 Channel 对象,包含元数据
  • feed:关联的 Feed 对象,包含广播和语言信息
  • quality:流质量(例如,720p,1080i)

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

播放列表解析

流处理的第一步是使用 PlaylistParser 类将 M3U 播放列表文件解析为 Stream 对象。

PlaylistParser

  1. 从存储中加载原始 M3U 文件
  2. 使用 iptv-playlist-parser 库解析 M3U 内容
  3. 从解析的数据创建 Stream 对象
  4. 将每个流与其对应的 ChannelFeed 数据相关联
  5. 返回一个可用于进一步处理的流集合

来源:scripts/core/playlistParser.ts1-48

流规范化和格式化

格式化过程确保流经过适当的规范化和组织,以在整个存储库中保持一致性。

URL 规范化

所有流 URL 都使用 normalizeURL() 方法进行规范化,以确保 URL 格式一致。

流格式化过程

playlist:format 命令执行多个规范化步骤

  1. URL 规范化:标准化所有 URL 格式
  2. 重复项移除:移除 URL 重复的流
  3. ID 验证:移除不正确的频道 ID
  4. 流排序:按名称、分辨率、标签和 URL 对流进行排序

此格式化确保了播放列表的一致性并消除了冗余,使其更加可靠和易于维护。

来源:scripts/commands/playlist/format.ts1-80 scripts/models/stream.ts191-195

流验证

流验证确保流符合存储库的标准和政策。验证过程

  1. 检查频道 ID 是否存在于数据库中
  2. 验证流不在阻止列表中(由于版权声明或 NSFW 内容)
  3. 验证流元数据的完整性

可检测到的验证问题示例

问题类型描述操作
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

流组织和公共播放列表生成

在处理和验证之后,流将根据类别、国家/地区、语言和地区组织到各种播放列表中。

流组织过程

流组织过程

  1. 过滤流(例如,从公共播放列表中删除 NSFW 内容)
  2. 按相关元数据对流进行分组
  3. 对每个组内的流进行排序
  4. 为每个分组生成格式化的 M3U 播放列表
  5. 创建提供聚合视图的索引文件

这种有组织的结构使用户可以根据其兴趣或地理位置轻松找到流。

来源:scripts/commands/playlist/generate.ts110-160 scripts/generators/indexRegionGenerator.ts1-64

流输出格式化

生成输出播放列表时,Stream 类的 toString() 方法会使用正确的 M3U 语法格式化每个流,包括

  1. 带有的 #EXTINF

    • 流 ID(tvg-id
    • 用于公共播放列表的 Logo URL(tvg-logo
    • 组标题(group-title
    • HTTP 引用页和用户代理(如果存在)
    • 流标题,包含名称、质量和标签
  2. VLC 选项(#EXTVLCOPT),用于 HTTP 引用页和用户代理(如果需要)

  3. 流 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

流更新工作流

流更新过程通过以下方式维护存储库的运行状况:

  1. 处理提交的流更改(编辑、添加、删除)
  2. 根据这些更改更新流文件
  3. 为 GitHub 问题生成更改摘要

此工作流确保存储库保持最新的高质量流,同时通过 GitHub 问题跟踪更改。

来源:tests/commands/playlist/update.test.ts1-38


本文档涵盖了 IPTV 存储库的核心流处理功能。有关相关主题的更多信息,请参阅 脚本和工具数据模型 页面。