WWDC Quick Look 💓 By SwiftGGTeam
HLS Content Steering でグローバルストリーミングの可用性を向上させる

HLS Content Steering でグローバルストリーミングの可用性を向上させる

元の動画を見る

HLS コンテンツ ステアリングでグローバル ストリーミングの可用性を向上

ハイライト

HLS コンテンツ ステアリングは、ステアリング サーバーを介してプレーヤーとのバイパス チャネルを確立し、コンテンツ プロバイダーは CDN 優先ポリシーをリアルタイムで更新できます。中国の CDN が過負荷になった場合、ステアリング サーバーは、プレイリストを再生成せずに、既存のクライアントの 30% に日本の CDN に切り替えるように指示できます。

主要内容

グローバルなストリーミング配信は、ネットワークの輻輳緩和と障害回復という 2 つの主要な可用性の課題に直面しています。従来のシナリオでは、CDN の優先順位はマスター プレイリストにハードコーディングされており、公開後に変更することはできません。 CDN が過負荷またはダウンすると、既存のクライアントが CDN にリクエストを送信し続けるため、コンテンツ プロバイダーは無力なままになります。

HLS コンテンツ ステアリングを使用すると、マスター プレイリストにステアリング サーバー アドレスを埋め込むことで、プレーヤーが CDN 優先度の更新を定期的に取得できるようになります。コンテンツ プロバイダーは、トラフィック分散を調整し、負荷分散を実行し、ネットワーク障害にリアルタイムで対応できます。すべての決定はサーバー側で行われ、クライアントはステアリング マニフェストの優先リストに従うだけで済みます。

詳細

従来のソリューションの限界

マスター プレイリストにリストされている複数の CDN のバリアント ストリーム (04:45):

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1280000,...
https://cdn-cn.example.com/video/low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,...
https://cdn-cn.example.com/video/mid.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1280000,...
https://cdn-jp.example.com/video/low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,...
https://cdn-jp.example.com/video/mid.m3u8

この方式のプレイリストの優先順位は固定です。コンテンツ プロバイダーは、再生中に CDN の順序を変更したり、既存のクライアントを別の CDN に誘導したりすることはできません。

コンテンツ ステアリングを有効にする

マスタープレイリストに追加EXT-X-CONTENT-STEERINGタグ (05:03):

#EXTM3U
#EXT-X-CONTENT-STEERING:SERVER-URI="/steering?video=abc",PATHWAY-ID="CN"

#EXT-X-STREAM-INF:BANDWIDTH=1280000,PATHWAY-ID="CN"
https://cdn-cn.example.com/video/low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,PATHWAY-ID="CN"
https://cdn-cn.example.com/video/mid.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=1280000,PATHWAY-ID="JP"
https://cdn-jp.example.com/video/low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,PATHWAY-ID="JP"
https://cdn-jp.example.com/video/mid.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=1280000,PATHWAY-ID="SG"
https://cdn-sg.example.com/video/low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,PATHWAY-ID="SG"
https://cdn-sg.example.com/video/mid.m3u8

主要な属性:

プロパティ機能
SERVER-URIステアリングサーバーのアドレス。クライアントはこの URI から定期的に更新を取得します。
PATHWAY-IDバリアント フローが属するパスを定義します。通常、各パスは CDN
PATHWAY-ID(ラベルに記載)再生開始時の初期パスを指定する

バリアントの流れPATHWAY-IDグループ。クライアントはパスを選択した後、このパスのバリアント ストリームからコード レートのみを選択します。

メディア グループを含むプレイリスト

プレイリストにメディアグループ (複数のトラックなど) が合われている機会は、パスごとにメディアグループをコピーし、一义の GROUP-ID (06:28) を切り取ってます。

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="CN-audio",NAME="English",URI="..."
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="JP-audio",NAME="English",URI="..."
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="SG-audio",NAME="English",URI="..."

#EXT-X-STREAM-INF:BANDWIDTH=1280000,PATHWAY-ID="CN",AUDIO="CN-audio"
https://cdn-cn.example.com/video/low.m3u8

ステアリングマニフェストの形式

ステアリング サーバーはステアリング マニフェストを JSON 形式で返します (07:53)。

{
  "VERSION": 1,
  "TTL": 300,
  "RELOAD-URI": "/steering?video=abc&session=xyz",
  "PATHWAY-PRIORITY": ["CN", "JP", "SG"]
}
フィールド機能
VERSIONマニフェスト形式のバージョン
TTLクライアントが次のリクエストまで待機する秒数
RELOAD-URI次のリクエストの URI。クライアント状態またはセッション データを注入できます。
PATHWAY-PRIORITYパス優先順位リスト。最初のものが最も高い優先順位を持ちます。

ステアリング サーバーは、クライアントごとにマニフェストをカスタマイズして、洗練されたトラフィック スケジューリングを実現できます。

クライアントの動作

Content Steering タグを含むマスター プレイリストをロードした後、クライアントは次のプロセスを実行します (06:56)。

  1. 初期選択: 初期パスからのみ (PATHWAY-IDパスが指定されている) はバリアント ストリームから選択されます
  2. 再生開始: 選択したバリアント ストリームとメディア セグメントをロードします
  3. バックグラウンド プル: ステアリング マニフェスト リクエストをステアリング サーバーに並行して送信します。
  4. 評価の切り替え: マニフェストを受信した後、ネットワーク エラーやサポートされていないコーデックによりペナルティが課せられたバリアント ストリームを除外し、最も高い優先順位を持つパスと少なくとも 1 つの適格なバリアント ストリームを選択します。
  5. パス切り替え: 選択したパスが現在のパスと異なる場合は、すぐに切り替えます
  6. 時間制限付き再試行: TTL に従って次のリクエストをスケジュールします。

ネットワーク輻輳シナリオ

中国の CDN がユーザーの急増によって過負荷になっていると仮定します (01:38)。

  1. すべての中国人ユーザーは、最初に CN 優先度が最も高いマニフェストを受け取ります。
  2. ステアリング サーバーは CN CDN 負荷が高すぎることを検出します
  3. JP 優先度を最も高くした新しいマニフェストを中国ユーザーの 30% に送信します。
  4. 評価後、これらのクライアントは JP パスに切り替え、トラフィックは日本の CDN にリダイレクトされます。
  5. 中国 CDN の負荷が軽減されました

障害回復シナリオ

日本から日本の CDN へのネットワーク パスで地域的な障害が発生したとします (02:54)。

  1. 障害が発生する前、日本のユーザーは定期的にステアリング サーバーから優先リストを取得していました。[JP, SG, CN]
  2. ネットワーク障害の後、日本の CDN はペナルティ対象としてマークされます
  3. クライアントは JP パスのバリアント フローを除外し、次に優先度の高い SG パスを選択します。
  4. トラフィックは自動的にシンガポール CDN に切り替わり、ユーザーは気付かずに視聴を続けます。

TTL と負荷分散

TTL は、クライアントがプルする頻度を制御します (09:42)。ステアリング サーバーは次のことができます。

  • 輻輳または障害時の TTL を短縮し、クライアントが新しいポリシーをより速く取得できるようにします。
  • さまざまなクライアントにランダムな TTL オフセットを挿入して、ステアリング サーバーの負荷を分散します。
  • 合格RELOAD-URIステートフルなスケジューリング決定を実装するために、URL でセッション状態を保持します。

重要ポイント

  1. PATHWAY-ID を使用して CDN をグループ化: 各パスは CDN に対応し、バリアント フローはパスごとにグループ化されます。初期パスは再生開始時に CDN を指定し、その後ステアリング マニフェストを通じて動的に調整されます。

  2. ステアリング サーバーは洗練されたスケジューリングを実装: ユーザーの地理的位置、CDN リアルタイム負荷、ネットワーク条件、その他の要素に基づいて、カスタマイズされた優先順位リストをクライアントごとに生成できます。

  3. TTL は、さまざまなシナリオに対応するために動的に調整されます: TTL は、通常の動作中は 300 秒に設定され、CDN のパフォーマンスが低下したり障害が発生したりすると 30 ~ 60 秒に短縮され、クライアントがポリシーの変更に迅速に対応できるようになります。

  4. RELOAD-URI はセッション ステータスを転送します: セッション ID、ユーザー領域、およびその他の情報を URL に含め、ステアリング サーバーはこれらの状態に基づいてより正確なスケジューリング決定を行います。

  5. 既存のクライアントとの下位互換性: コンテンツ ステアリングをサポートしていない古いクライアントは無視されます。EXT-X-CONTENT-STEERINGlabel は、すべてのバリアント ストリームを同等のオプションとして扱い、以前と同様に動作します。

関連セッション

コメント

GitHub Issues · utterances