ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
HLSコンテンツステアリングによる信頼性の高いストリーム配信
HLSコンテンツステアリングは、負荷や冗長性に応じて、クライアントを異なるサーバに動的に誘導するものです。このフレームワークの最新情報を紹介し、パスウェイクローニングを使用して、動的に生成されたCDNを既存のHLSクライアントに導入する方法について解説します。また、バケットベースのステアリングサーバルールなどで、グローバルなトラフィックステアリングを実現する方法も紹介します。
リソース
関連ビデオ
WWDC21
-
ダウンロード
♪ ♪
こんにちは WWDC へようこそ AppleのAVFoundation チーム のZheng Naiweiです 本セッションでは HLS コンテンツステアリングに追加した 新機能のストリーミング配信の 信頼性向上について説明します
今日は 3 つの主題を 取り上げます コンテンツステアリングをご存じ ない方もご安心ください これは HLS技術の一部で ストリーミングトラフィック を動的に操作でき ストリーミングサービスの 品質を向上させます 軌道に乗せる簡単な 説明をしましょう
新しいパスウェイの複製 作成機能を紹介します ダイナミックステアリング 能力を限界以上に高め ストリーミングサービスの 信頼性をさらに向上させます
最後に 具体的な例を使って ご案内します それでは 早速始めましょう
昔は コンテンツステアリング はなく エラーフォールバック時の バリアント選択は HLS 仕様で 標準化されていませんでした また クライアントの実装が異なれば 次のフォールバックの バリアント選択時に 動作も異なります しかし典型的な方法は マルチバリアントプレイリストの バリアントの順序に 従うことです ストリーミングプロバイダ が CDN を指定したい場合は CDN からすべての バリアントをリストし マルチバリアントプレイリストで 適切に並べる必要があります クライアントプレーヤーが最初の バリアントで失敗した場合 プレイリストの次のバリアント に移ることができ 失敗したバリアントは 選択から除外されます クライアントプレーヤーは CDN1 の 6 Mbps バリアント で問題が発生し CDN1 から 次の 3 Mbps バリアントに 移動し マルチバリアントプレイリスト の順序に従います CDN1 の 3 Mbps バリアント も失敗した場合は クライアントプレーヤーは CDN1 のバリアントなしで CDN2 から 6 Mbps の バリアントに移ります フォールバックのバリアント がなくなるまで繰り返せます プレイリスト作成サーバは フォールバックバリアントの 順序を制御できます そのような制御は クライアントがマルチバリアント プレイリストを要求した時点で発生し いったんプレイリストが 配布されると フォールバックの順序を変更 する方法はありません コンテンツステアリング が ここで登場します これを使うとストリーミング プロバイダは 異なる CDN ホストを持つ パスウェイにグループ化でき
エラーフォールバック動作は 標準化されました パスウェイは優先順に 並べられます この例では 上位の CDN1 パスウェイが最も好ましく CDN2 CDN3 と続きます ストリーミングプロバイダ はサーバもホストし 各クライアントプレーヤーの マニフェストを生成します ステアリングマニフェストは パスウェイ優先順位を定義し プレイヤーは規則に従って バリアントストリームを選択 しフォールバックできます ストリーミングプロバイダ が CDN1 から CND2 へ一部を オフロードしようとしている とします 新しいパスウェイ優先規則で ステアリングマニフェストを 生成し CDN1 から再生している クライアントプレーヤーが ステアリングマニフェストの 更新を要求すると ステアリングサーバは 規則の変更を含む準備された ステアリングマニフェストを クライアントに送信できます クライアントは新しいパスウェイ 優先度規則を解析して 再生セッションに適用します 規則変更はパスウェイ CDN1 と CDN2 の間で 優先順位を切り替え クライアントプレーヤーが CDN2 から切り替えてすぐに 再生できるようにします その後 障害が発生した場合 クライアントはまず パスウェイのフォールバック バリアントを使い果たし 現在のパスウェイ優先度に 従って 最も優先されるパスウェイに フォールバックします CDN2 からのバリアントが すべてエラーになった場合 クライアントプレーヤーは CDN1 の バリアントから開始でき これは次に優先される パスウェイです コンテンツステアリング を 世界規模で適用すると より大きな地域の負荷分散の 問題を解決できます ストリーミングプロバイダ が世界中で運営され 2 つの主要な CDN プロバイダがあるとします この CDN をクライアントプレーヤー に世界的に割り当てるには ステアリングサーバは 2 種類のマニフェストを用意し 一方は CDN1 を もう一方は CDN2 を優先します 次に このステアリング マニフェストを配布し クライアントプレーヤーの 地域に基づき 北南米が CDN1 を利用し 世界の他の地域は CDN2 を 利用するようにします 世界地図の上部に水平に積み 重ねた棒が表示されています CDN1 と CDN2 の間の トラフィック配分を表します 現在 両 CDN は世界の半分の トラフィックに配信しています しかし 時間の経過と共に ストリーミングプロバイダは 世界的な昼間のずれにより CDN2 へのトラフィックの 大幅な増加を観察し 同時に CDN1 への トラフィックは減少しています
プロバイダは欧州地域の CDN1 使用を誘導しました CDN1 を優先する マニフェストを準備し 欧州地域のクライアントに送ります その地域のクライアントプレーヤーは CDN1 に誘導します CDN2 からのオフロードです 世界的なトラフィックは よりバランスが取れました コンテンツステアリング を サポートする HLSマルチバリアントの プレイリストを 見てみましょう EXT-X-CONTENT-STEERING タグは このマルチバリアントプレイリストが コンテンツステアリングの使用を示しています 次に SERVER-URI 属性は クライアントがステアリング マニフェストの更新を 要求する場所を指定します
次のPATHWAY-ID 属性は 起動時の再生用に 選択する最初の パスウェイを指定します 各ストリームにPATHWAY-ID 属性 が指定されていることがわかり パスウェイにグループ化 します 各パスウェイにはバリアント ストリームの同セットがあり 違いは URI とメディア グループ名だけです この例では 2 つの パスウェイがあります つまり CDN1 と CDN2 です 両方とも 2 つの バリアントストリームを含み 6 Mbps の高解像度ビデオと 3 Mbps の低解像度ビデオで 唯一の違いは URI のホスト名だけです 各パスウェイには 2 つの 異なる音声グループもあり URI のホスト名が異なります JSON ドキュメントの マニフェストの例です PATHWAY-PRIORITYフィールドは 優先順の ID リストです 受信側のクライアントプレーヤーは CDN2 より CDN1 を優先します ステアリングサーバは 欧州のクライアントに提供し CDN1 を優先する ステアリングマニフェストです マニフェストのPATHWAY-PRIORITY フィールドの変更で ステアリングサーバはクライアント のポリシーを制御できます コンテンツステアリング の 概要については以上です より詳細な説明を ご希望の方は WWDC21 での私の話を ご確認ください HLS コンテンツステアリング で世界的 なストリーミングを向上させます 拡張可能で信頼性の高い ストリーミングサービスの サポートは これで終わりではありません 企業は多様なクラウドインフラ を利用することができ 過去には想像もつかない ことをツールで実現し 技術の飛躍に 追いつかなければなりません ストリーミングサービス プロバイダが大きく成長し 成長するユーザー基盤の動的 なトラフィック需要を満たす 新しい方法を 試みているとします リアルタイムで CDN サーバ群を動的に生成し 一時的なトラフィックの ストレスを軽減します たとえば CDN3 の 新しい群を生成し それを既存のクライアントに 宣伝したいとします しかしチャレンジは動的に 生成された CDN 情報は マルチバリアントプレイリストに 含まれていないことです 既存のクライアントが 要求したときに 存在しなかったからです では 新しい CDN の出現をクライアントに 伝えるには何ができるでしょうか ここで新機能のパスウェイ クローニングが役立ちます 下位互換性のある新機能で WWDC21 で導入されたコンテンツ ステアリング1.2 を使用します パスウェイクローニングで圧縮した マニフェスト定義を使って サーバは既存のクライアントに 新しい CDN を 発表できます パスウェイの構造が 同一であると仮定すると 新しいパスウェイは既存を コピーと修正で作成できます パスウェイの構造を 見てみましょう 1 つまたは多くのバリアント ストリームで構成されます バリアントストリームは 1 つのパスウェイにのみあり PATHWAY-ID 属性が 指定されていない場合 暗黙的に初期値の「dot」 パスウェイに属します 各ストリームはタイプごとに 0 か 1 のグループを参照し 音声 字幕 クローズド キャプションの中からです グループは異なるパスウェイ からでもバリアント ストリームで 参照されるかもしれません 既存のパスウェイから新しい パスウェイを複製すると そのバリアントストリームを 複製するだけでなく 参照されるメディアグループ もあれば複製します
次に 新しいパスウェイに するために 新しくクローンされた パスウェイのバリアントと レンディションのストリーム の URI を修正します クローンされたパスウェイの 6 Mbps ストリームを例にとってみましょう
このバリアントストリームは 示された URI があるとします 新しいパスウェイの URI に なるように修正する 最も柔軟な方法は URI の 行全体を置き換えることです クローンされたパスウェイごとに URI のフルセットを マニフェストに格納する 必要があります しかし 実際には通常は それよりもうまくいきます ストリーミングアセットを 複数の CDN 間を同じ URI パス構造を保持したまま 展開することは一般的で 同じ URI から提供される アセットは同じ URI ホスト と クエリパラメータを 共有します この場合 マニフェストに ホストとクエリパラメータの 置換品を格納するだけで 複製されたすべての URI の コンポーネントを置き換え 新パスウェイを取得できます
マニフェストでパスウェイ クローニングの定義方法に進みます PATHWAY-CLONES フィールド にオブジェクト配列を追加し 各オブジェクトはクローンされた 新パスウェイを定義します この例では パスウェイ クローンオブジェクトがあり BASE-ID フィールドは CDN1 をクローン元のパスウェイと指定し ID フィールドは新パスウェイ ID を CDN3 と指定します URI 置換規則のオブジェクト を含むフィールドがあります
ホストとクエリパラメータの 置換規則を使っています ストリーム URI の ホスト部分を置き換え クエリパラメータを挿入 または置き換えます この場合 ホスト部分を cdn3.example.com に 置き換え クエリパラメータ "foo"に値 xyz を パラメータ "bar" に値 123 を 追加または設定します
ホストとパラメーター URI の置換を 前の例の URI で 適用してみましょう まず マルチバリアントプレイリストの URI に基づいて解決された バリアントストリーム URI があります
ステアリングマニフェストは ホスト URI 置換規則を使用し URI のホスト部分については cdn3.example.com に 置き換え 新しい URI の新しい ホスト部分を取得しました
クローンされた URI からパス コンポーネントを保持します
URI クエリパラメータ 置換規則を適用します 元の URI にあるため foo パラメーターを置き換えます 次に新しいパラメータの bar パラメータを追加します 新しい URI の置き換えられた クエリパラメータがあります 最終的な URI は新しい パスウェイ CDN3 からの 6Mbps ストリームの URI になります
残りのバリアントと パスウェイレンディションに 同じ URI 置換規則を 適用します 3 Mbps のストリームの場合 元の URI があり ホストとパラメーターの置換規則 を適用し新 URI を取得します 音声と字幕のレンディション についても同様に行います 複製されたバリアントとレンディションに URI 置換規則を適用すると 新しい CDN ホストから提供 する新パスウェイがあります 別の例で ストリーミング プロバイダが 残りの低ビットレート ストリームとは異なり 特別に調整された最速の CDN ホストから 最大帯域幅のビデオと音声 データを提供しましょう ここで安定した ID ごとの URI 置換規則が役立ちます HLS では STABLE-VARIANT-ID と STABLE-RENDITION-ID 属性が バリアントとレンディション の識別に導入されました マルチバリアントプレイリストに 設定することで バリアントやレンディション ストリームを マニフェストのパスウェイ クローンオブジェクトの 安定した ID で参照し ストリームごとの URI 置換規則を割り当てます この特殊な URI 置換ルール を定義するには マルチバリアントプレイリストで バリアントとレンディションに 安定した ID を割り当てる 必要があります STABLE-RENDITION-ID "audio-en-ac3" を AC3 英語音声に割り当て STABLE-VARIANT-ID "video-4k-dv" を 25 Mbps 4K バリアント ストリームに割り当てます 次に ステアリング マニフェストで 安定した ID を 参照することで 2 つの柔軟な置換規則を 追加できます バリアントストリームの場合 "PER-VARIANT-URIS" を "URI-REPLACEMENT" オブジェクトに追加し URI レコードに STABLE-VARIANT- ID の辞書を追加します バリアントストリームの URI を STABLE-VARIANT-ID "video- 4k-dv" に置換を指定します レンディションには "URI- REPLACEMENT" オブジェクトに "PER-RENDITION-URIS" フィールドを追加し URI レコードに STABLE- RENDITION-ID の辞書を設定し レンディションストリームの URI を STABLE-RENDITION-ID "audio-en-ac3" と置換に指定し
URI の置換を適用すると ストリームは cdn3.exmaple. com ホストから提供されます 4K 映像バリアントと AC3 英語音声レンディションを除きます faster.example.com の ホストを指す 特別な URI 置換規則が ある場合 異なる URI パスとクエリ コンポーネントを使用します
パスウェイクローニングではストリーミング プロバイダが新しい CDN フリートを CDN3 が 動的に生成する場合 ステアリングサーバは ステアリングマニフェストに 既存のクライアントのパスウェイクローニング として CDN3 を追加できます また たとえば欧州などの 地域を選択することもでき CDN3 を主要なパスウェイ として優先できます 欧州のクライアントがマニフェストの 更新を取得すると トラフィックを CDN3 に 誘導します この話の最後では ステアリングサーバの 詳細に焦点を移し サーバロジックの実装方法 について具体的な例で 負荷分散のクライアントプレーヤーの トラフィックを説明します 大量のクライアントプレーヤーを 管理調整する方法の 1 つは 分割された規則を適用し クライアントをバケットに入れることで バケットレベルで 規則を適用することです クライアントのセッション状態を 維持することなく ステアリングサーバでバケット を実装するのは簡単です クライアントプレーヤーが初期 マニフェストを要求すると ステアリングサーバ URI で HTTP GET 要求を行います サーバは 12 バケット から一様乱数を生成します マニフェストを返す際 サーバはバケット番号を この場合は 7 を RELOAD- URI 属性に追加します これがクライアントプレーヤーから 次の要求の ステアリングマニフェスト URI になります クライアントプレーヤーが次に マニフェストを要求する際 リクエストパラメータに バケット番号が含まれます サーバはそれを抽出しバケット 番号に基づき規則を適用します では簡単な 2 分割の規則を 見てみましょう この場合 50 %のトラフィックを CDN1 に優先誘導し 他の 50 %のトラフィックは CDN2 に優先誘導します このような規則はバケット 番号の観点から記述できます クライアントプレーヤーのバケット番号が 最初の 6 バケットに該当すると ステアリングマニフェストを パスウェイ優先 CDN1 で返し それ以外の場合はパスウェイ 優先 CDN2 で返します クライアントはバケットに一様に 割り当てられるため 12 バケットを 6 に分割すると トラフィックを 2 分割できます
CDN3 の新しいパスウェイが 動的に生成されたとします サーバはパスウェイクローニング を使って宣伝できますが クライアントはマルチバリアントプレイリスト からそれを知りません ステアリングマニフェストを 構築する際のよくある質問は パスウェイのクローン作成では パスウェイのセットを決定し パスウェイクローニングの配列に 含める必要があります 規則はクライアントのマルチバリアントプレイリストにない パスウェイのクローンを作成することです しかし サーバ側の状態を 維持することなく クライアントセッションに関する サーバはどのように クライアントのマルチバリアントプレイリストの パスウェイを知るのでしょうか?
これを行う 1 つの方法は マルチバリアントプレイリスト生成時に 初期のサーバ URI に クエリパラメータとして パスウェイのセットを 含めることです マルチバリアントプレイリストには CDN1 と CDN2 という 2 つのパスウェイが 含まれています したがって サーバ URI 属性にそれらを含む クエリパラメータとして 使用します そしてクライアントプレーヤーは URI に要求を送り パラメータをステアリング サーバに送信します ステアリングサーバは クライアントのマルチバリアントプレイリストの パスウェイのセットとして パラメータを抽出できます 次に クローンするパスウェイの セットを計算し 利用可能なパスウェイと クライアントのマルチバリアントプレイリストの パスウェイのセットを差し 引くことで計算できます この場合 利用可能な パスウェイは CDN1 2 3 で クライアントのマルチバリアントプレイリストの パスウェイは CDN1 と 2 です したがって 含める必要の あるパスウェイは パスウェイクローニング配列の CDN3 です
利用可能なパスウェイが 3 つある場合 サーバがどのように規則を 変更できるかを見てみましょう この場合 サーバは クライアントのトラフィックを CDN1 2 3 の間で均等に 分割することを望んでいます この規則はクライアントバケット番号 が 12 のバケットのうち 1/3 に該当する場合は CDN1 を優先するパスウェイ優先で クライアントのバケット番号が 2/3 の範囲に該当する場合は CDN2 を優先するパスウェイ 優先を それ以外の場合は CDN3 を優先する パスウェイ優先を返します パスウェイはクライアントトラフィック の 1/3 を提供します 今回説明した内容で独自の 動的ステアリング規則で ステアリングサーバを構築 する十分な準備が整いました ストリーミングの信頼性を 向上させることができます
今年の コンテンツ ステアリングの更新は以上です まだ行っていない方は HLS CDN フォールバック メカニズムとしてご採用ください 汎用性が高く動的な ステアリングを提供します 新しいパスウェイクローニング 機能も活用し サービスの信頼性を 高めてください 技術的な詳細については IETF HLS をご確認ください プレイリスト変更の際は HTTP Live Streamingツールを 利用して検証することを 忘れないでください 最後にご質問やご提案が ございましたら hls-interest@ietf.org までご連絡ください ご参加いただきありがとう ございました
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。