B2C · Xtream · Reseller





存档存储层
适用于 500 多个并发客户端的三层归档系统。
编码器
写缓冲区
2小时热窗口(NVMe或tmpfs)
→ 镜像(连续)
硬盘RAID 5
50 TB,保留 14 天
→ 按需预取
播放缓存
1 TB 热缓存,500 多个客户端
客户
早于mirror_min_age_分钟的段将连续复制到 RAID。
等级
目的
设置
写缓冲区
24/7 接收片段,保持 2 小时热窗口以进行快速最近倒回播放,保护 RAID 免受随机 IO 的影响。
device_path(块设备或“tmpfs”)、tmpfs_size_pct(tmpfs 时为 10-50% MemAvailable)、mirror_min_age_ 分钟、evict_age_分钟、flush_threshold_percent(强制刷新触发)
硬盘 RAID 存档
长尾存储可实现完全保留(默认 14 天)。
保留天数、raid_device、nginx_location、min_free_percent
播放缓存(可选)
超过 2 小时的流行文件的读取端缓存(例如 EPG 追赶)。
prefetch_hours、max_sessions、eviction_policy(会话/lru/fifo)
实时写入 × 2h = write_buffer 热窗口大小。
Stream.dvr_file_path/2 按顺序探测 write_buffer →playback_cache →archive。
每个层都可以使用 RAM 支持的 tmpfs 虚拟磁盘,而不是物理块设备。
分配被指定为 MemAvailable 的百分比(来自 /proc/meminfo)——步骤 10,有效值 10/20/30/40/50。
如果计算的目标超过当前 MemAvailable 的 60%,则挂载将被拒绝,并且该层保持脱机状态(Stream.archive_path 会下降到下一个正常的层)。
tmpfs 存在于 RAM 中 — 当主机重新启动时,任何正在运行的缓冲区内容都会丢失。
在以下情况下使用 tmpfs 进行 write_buffer:(a) 开发/测试盒没有备用 NVMe,但您仍希望运行完整的 DVR 管道以进行集成测试,(b) 操作员希望验证镜像 + 存档行为而不预先购买 NVMe,(c) 可以接受重新启动时丢失的临时测试。
当写入层为 tmpfs 时,StorageTierFlush 使用更严格的默认值 —mirror_min_age 2 分钟,evict_age 15 分钟(物理 NVMe 为 5 分钟/120 分钟)。
层通过配置 > 存储 > 存储层配置一次并自动配置 — 无需在主机上进行手动 mkfs/mount/fstab 编辑。
首次启动时(数据库中无写入层),系统会自动创建一个 tmpfs 支持的写入层,分配 30% MemAvailable,挂载点 /mnt/nvme_write。
Stream.archive_path/1 返回第一个“健康”层 — write_buffer(如果 Mount+writable+free_pct 高于安全层),否则回退到存档(降级模式)。
在 UI 中更改 tmpfs_size_pct 会在保存时触发 umount + 重新挂载新大小。
基本 URL — OSTV 播放器
封装字段
包API
密码政策
经销商API
设置
用户字段
用户管理
基本 URL — OSTV 播放器
OSTV 播放器应用程序允许用户更改服务器基本 URL(API 地址)。
原因:更改基本 URL 仅适用于管理员/root 用户,以便他们可以在服务器之间切换(例如生产与测试)。
用户字段
包API
返回所有活动套餐的列表以及价格和计费周期。
管理用户列表(经销商/提供商)。
返回特定管理用户的信用余额。
封装字段
经销商API
面向经销商/提供商的 API。
密码政策
创建订阅者时需要密码。
最少 8 个字符
至少 1 个大写字母 (A-Z)
至少 1 个特殊字符(!@#$%^&* 等)
适用于 UI 和 API。
设置
层自动配置和安全
容量 + 文件系统自动检测:当从下拉列表中选择空闲 NVMe 时,将从 lsblk -bn -o SIZE 读取容量 (GB),并从 blkid 读取当前 FS(使用整个磁盘回退)。
分层冲洗机制——连续镜
StorageTierFlush GenServer 每 60 秒运行一次。
为什么连续镜像胜过“等待 60 分钟,批量移动”:(1) RAID 负载均匀 — 在小时边界内没有 5GB 突发,只有 7MB 段的涓流;
正在进行的段安全:镜像仅通过 find -mmin +5 选取早于 MIRROR_MIN_AGE_MINUTES 的文件。
每次部署调整 (.env)
500–1000
尺寸规则:
DVR 预览日历
DVR 预览选项卡显示服务器呈现的日历,仅突出显示磁盘上存在录制内容的日期。
有录音的日子是可点击的(蓝色)——点击会在日期时间输入中预先填充当天的 00:00;
在 Stream.available_dvr_days/1 中通过每个层挂载上的 find -mindepth 4 -maxdepth 4 -type d 实现;
概述
B2C(企业对消费者)API 为最终用户播放器应用程序提供身份验证和流访问。
对用户进行身份验证并获取 auth_token 以供后续 API 调用使用。
方法
端点
请求正文
范围
类型
必需的
描述
是的
用户登录名
用户密码
请求示例
响应字段
成功响应 (200)
用于后续 API 调用的加密身份验证令牌
ISO 8601 格式的令牌到期日期/时间
成功响应示例
错误响应 (403)
错误描述信息
HTTP 状态码
错误响应示例
使用身份验证令牌检索有关经过身份验证的用户的信息。
响应字段
经过身份验证的用户的用户名
服务器消息(如果没有则为空)
身份验证状态(1 = 已通过身份验证)
帐户状态:活动、禁止、禁用、试用
帐户到期日期(如果无限制则为空)
当前活跃连接数
ISO 8601 格式的帐户创建日期
允许的最大同时连接数
允许的输出流格式列表
用户所有者/经销商的提供商名称(如果没有则为 null)
提供商徽标图像的 URL(如果没有则为 null)
提供商折叠徽标图像 208x208 的 URL(如果没有则为 null)
ISO 8601 格式的当前服务器时间
请求示例
检索按类型过滤的类别。
类别类型:直播、点播或连续剧
字符串形式的类别 ID
类别显示名称
父类别 ID(如果为根,则为 0)
用于缓存失效的内容的 MD5 哈希值
请求示例
检索特定 VOD 项目的详细信息,包括元数据和流链接。
点播流 ID (UUID)
封面图片网址
TMDB标识符
背景图片 URL
流派字符串
情节/描述
演职人员
评分值(0-10)
董事姓名
发售日期
持续时间(以秒为单位)
格式化字符串形式的持续时间
类别 ID 数组
如果是成人内容则为 1,否则为 0
点播流ID
点播标题
添加日期 (ISO 8601)
流链接 URL
视频/音频编解码器元数据
检索包含完整季和剧集列表的系列信息(按季号分组)。
系列 ID (UUID)
季数
季节显示名称
本季剧集数
当季播出日期
季节概述/描述
季节封面图片 URL
地图以季节编号字符串为键。
剧集对象字段
剧集 ID
TMDB 剧集 ID
季内集数
添加日期 (ISO 8601)
季数
剧集信息对象(与 VOD 信息结构相同)
流链接 URL
视频/音频编解码器元数据
令牌过期时间取决于用户角色:admin = 365 天,其他 = 30 天|禁用帐户无法进行身份验证(返回 403)|每次成功登录都会更新用户的last_login 时间戳|令牌经过加密并包含 user_id、用户名、角色和过期时间
成功响应 (200)
从 /auth 端点获取的身份验证令牌