本页面记录了IPTV系统中使用到的关键数据结构。它描述了驱动播放列表生成和组织系统的主要模型、它们之间的关系以及它们的属性。有关这些模型如何被处理和转换的信息,请参阅流处理。
IPTV系统依赖于几个相互关联的数据模型来表示电视频道、它们的流、广播属性和组织元数据。这些模型构成了根据国家、类别、语言和地区等各种标准组织的播放列表生成的基础。
主要数据模型关系
来源:scripts/models/stream.ts scripts/models/feed.ts tests/__data__/input/data/channels.json tests/__data__/input/data/feeds.json
Stream 类是代表单个 IPTV 流的核心数据模型。它包含视频流的 URL 和各种元数据。
| 属性 | 类型 | 描述 |
|---|---|---|
名称 | 字符串 | 流名称 |
url | 字符串 | 视频流的 URL |
id | 字符串 | 可选的流标识符(通常结合了 channelId 和 feedId) |
channelId | 字符串 | 对频道的引用 |
channel | 渠道 | 可选的对完整 Channel 对象的引用 |
feedId | 字符串 | 对特定 feed 的引用 |
feed | Feed | 可选的对完整 Feed 对象的引用 |
groupTitle | 字符串 | 播放列表的分组类别 |
label | 字符串 | 可选的附加描述符 |
verticalResolution | 数字 | 流分辨率(例如,720、1080) |
isInterlaced | 布尔值 | 流是否使用隔行扫描视频 |
httpReferrer | 字符串 | 访问可能需要的可选 HTTP Referrer |
httpUserAgent | 字符串 | 访问可能需要的可选 HTTP User Agent |
Stream 模型有许多用于检索信息或转换为不同格式的辅助方法
getChannelId()、getFeedId() 等)hasId()、hasQuality() 等)updateName()、updateId() 等)getCategories()、getLanguages() 等)isBroadcastInCountry()、isBroadcastInRegion() 等)toString()、toJSON())来源:scripts/models/stream.ts5-363 scripts/commands/playlist/format.ts39-42
来源:scripts/core/playlistParser.ts22-47 scripts/commands/playlist/format.ts
Channel 模型代表一个具有广播者、内容类型和来源信息的电视频道实体。
| 属性 | 类型 | 描述 |
|---|---|---|
id | 字符串 | 频道的唯一标识符(例如,“BBCNews.uk”) |
名称 | 字符串 | 频道的显示名称 |
country | 字符串 | 频道来源的国家代码 |
subdivision | 字符串 | 国家内部的可选细分区域 |
city | 字符串 | 可选的城市位置 |
categories | string[] | 内容类别(例如,“新闻”、“体育”) |
is_nsfw | 布尔值 | 成人内容标志 |
logo | 字符串 | 频道 logo 图像的 URL |
network | 字符串 | 可选的父网络 |
owners | string[] | 可选的公司所有者 |
alt_names | string[] | 频道的替代名称 |
来源:tests/__data__/input/data/channels.json1-680
Feed 类代表一个频道的特定广播 feed。一个频道可以有多个 feed(例如,SD、HD、地区变体)。
| 属性 | 类型 | 描述 |
|---|---|---|
channelId | 字符串 | 对父频道的引用 |
id | 字符串 | Feed 标识符(例如,“SD”、“HD”、“East”) |
名称 | 字符串 | Feed 的显示名称 |
isMain | 布尔值 | 这是否是该频道的首选 feed |
broadcastAreaCodes | 集合 | Feed 广播的区域 |
languageCodes | 集合 | Feed 中使用的语言 |
timezoneIds | 集合 | Feed 可用的时区 |
videoFormat | 字符串 | 视频格式规范 |
Feed 模型包含用于
withChannel()、withLanguages() 等)isBroadcastInCountry()、isBroadcastInRegion() 等)hasLanguages()、isInternational() 等)来源:scripts/models/feed.ts4-200 tests/__data__/input/data/feeds.json1-830
来源:scripts/models/feed.ts34-61 scripts/models/feed.ts94-129
IPTV系统在多阶段过程中使用这些模型来生成有组织的播放列表
来源:scripts/commands/playlist/generate.ts98-161 scripts/generators/indexRegionGenerator.ts25-62
系统包含几个支持数据模型,有助于组织和分类流
表示内容类别,如“新闻”、“体育”、“电影”等。
表示 feed 中使用的语言(使用语言代码,如“eng”、“spa”、“fra”)。
这些支持模型使得 IPTV 系统能够实现丰富的组织和过滤功能,允许用户按各种标准浏览流。
来源:scripts/commands/playlist/generate.ts46-74 tests/__data__/input/data/feeds.json
完整的数据流展示了这些模型如何在整个系统中进行交互
来源:scripts/commands/playlist/generate.ts scripts/commands/api/generate.ts