×

📺 IPTV

B2C · Xtream · Reseller

IPTV ユーザー管理

アーカイブストレージ層

500 を超える同時クライアントに対応する 3 層アーカイブ システム。

エンコーダ

書き込みバッファ

2 時間のホット ウィンドウ (NVMe または tmpfs)

→ミラー(連続)

HDD RAID 5

50 TB、14 日間の保持

→ オンデマンドでプリフェッチ

プレイバックキャッシュ

1 TB ウォーム キャッシュ、500 以上のクライアント

クライアント

鏡、動かない

Mirror_min_age_ minutes より古いセグメントは、継続的に RAID にコピーされます。

階層

目的

設定

書き込みバッファ

セグメントを 24 時間年中無休で受信し、高速な最近の巻き戻し再生のために 2 時間のホット ウィンドウを保持し、ランダム IO から RAID を保護します。

device_path (ブロックデバイスまたは「tmpfs」)、tmpfs_size_pct (tmpfs の場合は 10 ~ 50% MemAvailable)、mirror_min_age_ minutes、evict_age_ minutes、flush_threshold_percent (強制フラッシュ トリガー)

HDD 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 の順にプローブします。

tmpfs 仮想ディスク (開発/テスト)

各層は、物理ブロック デバイスの代わりに RAM バックアップの tmpfs 仮想ディスクを使用できます。

サイズ (空き RAM %)

割り当ては MemAvailable のパーセンテージとして指定されます (/proc/meminfo から) — ステップ 10、有効な値は 10/20/30/40/50 です。

OOM 安全ガード

計算されたターゲットが現在の MemAvailable の 60% を超える場合、マウントは拒否され、層はオフラインのままになります (Stream.archive_path は次の正常な層に移行します)。

再起動の永続性

tmpfs は RAM 内に存在します。ホストが再起動すると、実行中のバッファの内容はすべて失われます。

tmpfs を使用する場合

次の場合には、write_buffer に tmpfs を使用します: (a) 開発/テスト ボックスに予備の NVMe がないが、統合テストのために完全な DVR パイプラインを実行したい場合、(b) オペレータが NVMe を前払いせずにミラー + アーカイブの動作を検証したい場合、(c) 再起動時の損失が許容される一時的なテスト。

tmpfs の高速フラッシュ

書き込み層が tmpfs の場合、StorageTierFlush はより厳しいデフォルト値、mirror_min_age 2 分、evict_age 15 分を使用します (物理 NVMe の場合は 5 分 / 120 分)。

階層自動プロビジョニングと安全性

層は [Config] > [Storage] > [Storage Tiers] で一度構成され、自動的にプロビジョニングされます。ホスト上で手動で mkfs/mount/fstab を編集する必要はありません。

デフォルトのブートシード

最初の起動時 (DB に書き込み層がない)、システムは 30% の MemAvailable 割り当て、マウント ポイント /mnt/nvme_write を持つ tmpfs バックアップ書き込み層を自動作成します。

健全性とフェイルオーバー

Stream.archive_path/1 は、最初の「正常な」層を返します。マウント + 書き込み可能 + free_pct が安全フロアより上の場合は write_buffer、それ以外の場合はアーカイブ (劣化モード) に戻ります。

ライブサイズの変更

UI で tmpfs_size_pct を変更すると、保存時に umount と新しいサイズでの再マウントがトリガーされます。

ベース URL — OSTV プレーヤー

パッケージフィールド

パッケージAPI

パスワードポリシー

リセラー API

設定

ユーザーフィールド

ユーザー管理

IPTV ユーザー管理

ベース URL — OSTV プレーヤー

OSTV Player アプリケーションを使用すると、ユーザーはサーバーのベース URL (API アドレス) を変更できます。

理由: ベース URL の変更は、管理者/root ユーザーのみを対象としており、サーバー間 (例: 本番環境とテスト環境) を切り替えることができます。

ユーザーフィールド

パッケージAPI

価格と請求期間を含むすべてのアクティブなパッケージのリストを返します。

管理ユーザー (リセラー/プロバイダー) のリスト。

特定の管理ユーザーのクレジット残高を返します。

パッケージフィールド

リセラー API

リセラー/プロバイダー向けの API。

パスワードポリシー

サブスクライバーを作成するときにパスワードが必要です。

最低 8 文字

少なくとも 1 つの大文字 (A ~ Z)

少なくとも 1 つの特殊文字 (!@#$%^&* など)

UIとAPIに適用されます。

設定

階層自動プロビジョニングと安全性

容量 + ファイルシステムの自動検出: 空き NVMe がドロップダウンから選択されると、容量 (GB) が lsblk -bn -o SIZE から読み取られ、現在の FS が blkid から読み取られます (ディスク全体のフォールバックあり)。

ティアフラッシュメカニズム - 連続ミラー

StorageTierFlush GenServer は 60 秒ごとに実行されます。

連続ミラーリングが「60 分待機、バッチ移動」よりも優れている理由: (1) RAID 負荷は均等です。時間境界での 5GB バーストはなく、7MB セグメントが少しずつ発生するだけです。

進行中のセグメントの安全性: ミラーは、find -mmin +5 を介して MIRROR_MIN_AGE_MINUTES よりも古いファイルのみを選択します。

デプロイメントごとのチューニング (.env)

500~1000

サイズのルール:

DVR プレビュー カレンダー

[DVR プレビュー] タブには、ディスク上に録画が存在する日のみを強調表示するサーバーレンダリングのカレンダーが表示されます。

録画のある日はクリック可能 (青) — クリックすると、日時入力にその日の 00:00 が事前に入力されます。

各層マウントの find -min Depth 4 -max Depth 4 -type d を介して Stream.available_dvr_days/1 に実装されます。

B2C プレーヤー API

概要

B2C (Business-to-Consumer) API は、エンドユーザーのプレーヤー アプリケーションに認証とストリーム アクセスを提供します。

認証

ユーザーを認証し、後続の API 呼び出し用の auth_token を取得します。

方法

終点

リクエストボディ

パラメータ

タイプ

必須

説明

はい

ユーザーのログイン名

ユーザーパスワード

リクエストの例

応答フィールド

成功応答 (200)

後続の API 呼び出し用の暗号化された認証トークン

ISO 8601 形式のトークンの有効期限日時

成功時の応答例

エラー応答 (403)

エラー説明メッセージ

HTTPステータスコード

エラー応答の例

ユーザー情報

認証トークンを使用して、認証されたユーザーに関する情報を取得します。

応答フィールド

認証されたユーザーのユーザー名

サーバーメッセージ (存在しない場合は空)

認証ステータス (1 = 認証済み)

アカウントのステータス: アクティブ、禁止、無効、トライアル

アカウントの有効期限 (無制限の場合は null)

現在アクティブな接続の数

ISO 8601 形式のアカウント作成日

許可される同時接続の最大数

許可される出力ストリーム形式のリスト

ユーザーの所有者/再販業者のプロバイダー名 (存在しない場合は null)

プロバイダーのロゴ画像の URL (存在しない場合は null)

プロバイダーの URL 折りたたみロゴ画像 208x208 (存在しない場合は null)

ISO 8601 形式の現在のサーバー時刻

リクエストの例

カテゴリー

タイプ別にフィルタリングされたカテゴリを取得します。

カテゴリの種類: ライブ、VOD、またはシリーズ

文字列としてのカテゴリ ID

カテゴリ表示名

親カテゴリ ID (ルートの場合は 0)

キャッシュ無効化のためのコンテンツの MD5 ハッシュ

リクエストの例

VOD詳細

メタデータやストリーム リンクなど、特定の VOD アイテムの詳細情報を取得します。

VOD ストリーム ID (UUID)

情報オブジェクトフィールド

カバー画像のURL

TMDB識別子

背景画像のURL

ジャンル文字列

あらすじ/説明

キャスト陣

評価値 (0-10)

取締役名

発売日

持続時間 (秒)

フォーマットされた文字列としての期間

カテゴリ ID の配列

アダルト コンテンツの場合は 1、それ以外の場合は 0

VOD オブジェクトのフィールド

VOD ストリーム ID

VODタイトル

追加日 (ISO 8601)

ストリームリンクURL

ビデオ/オーディオ コーデック メタデータ

シリーズ詳細

シーズン番号ごとにグループ化された、全シーズンとエピソードのリストを含むシリーズ情報を取得します。

シリーズID (UUID)

シーズン配列フィールド

シーズン番号

シーズン表示名

シーズンのエピソード数

シーズンの放送日

シーズン概要/説明

シーズンカバー画像のURL

エピソードオブジェクト

季節番号文字列をキーとしたマップ。

エピソードオブジェクトフィールド

エピソードID

TMDB エピソード ID

シーズン内のエピソード番号

エピソードのタイトル

追加日 (ISO 8601)

シーズン番号

エピソード情報オブジェクト (VOD 情報と同じ構造)

ストリームリンクURL

ビデオ/オーディオ コーデック メタデータ

注意事項

トークンの有効期限はユーザーの役割によって異なります: admin = 365 日、other = 30 日|無効なアカウントは認証できません (403 が返されます)|ログインが成功するたびに、ユーザーの last_login タイムスタンプが更新されます|トークンは暗号化され、user_id、ユーザー名、役割、および有効期限が含まれます

成功応答 (200)

/auth エンドポイントから取得した認証トークン