菜单

数据模型

相关源文件

本页面记录了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 的引用
feedFeed可选的对完整 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字符串可选的城市位置
categoriesstring[]内容类别(例如,“新闻”、“体育”)
is_nsfw布尔值成人内容标志
logo字符串频道 logo 图像的 URL
network字符串可选的父网络
ownersstring[]可选的公司所有者
alt_namesstring[]频道的替代名称

来源:tests/__data__/input/data/channels.json1-680

Feed 模型

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”)。

地理模型

  • Country:表示一个国家及其代码和名称
  • Region:表示包含多个国家的地理区域
  • Subdivision:表示国家的一部分(州、省等)
  • Timezone:表示 feed 中使用的时区

这些支持模型使得 IPTV 系统能够实现丰富的组织和过滤功能,允许用户按各种标准浏览流。

来源:scripts/commands/playlist/generate.ts46-74 tests/__data__/input/data/feeds.json

系统中的数据流

完整的数据流展示了这些模型如何在整个系统中进行交互

来源:scripts/commands/playlist/generate.ts scripts/commands/api/generate.ts