B2C · Xtream · Reseller





アーカイブストレージ層
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 の順にプローブします。
各層は、物理ブロック デバイスの代わりに RAM バックアップの tmpfs 仮想ディスクを使用できます。
割り当ては MemAvailable のパーセンテージとして指定されます (/proc/meminfo から) — ステップ 10、有効な値は 10/20/30/40/50 です。
計算されたターゲットが現在の MemAvailable の 60% を超える場合、マウントは拒否され、層はオフラインのままになります (Stream.archive_path は次の正常な層に移行します)。
tmpfs は RAM 内に存在します。ホストが再起動すると、実行中のバッファの内容はすべて失われます。
次の場合には、write_buffer に tmpfs を使用します: (a) 開発/テスト ボックスに予備の NVMe がないが、統合テストのために完全な DVR パイプラインを実行したい場合、(b) オペレータが NVMe を前払いせずにミラー + アーカイブの動作を検証したい場合、(c) 再起動時の損失が許容される一時的なテスト。
書き込み層が 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
設定
ユーザーフィールド
ユーザー管理
ベース 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 (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 ストリーム ID (UUID)
カバー画像のURL
TMDB識別子
背景画像のURL
ジャンル文字列
あらすじ/説明
キャスト陣
評価値 (0-10)
取締役名
発売日
持続時間 (秒)
フォーマットされた文字列としての期間
カテゴリ ID の配列
アダルト コンテンツの場合は 1、それ以外の場合は 0
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 エンドポイントから取得した認証トークン