WWDC Quick Look 💓 By SwiftGGTeam
Optimize live streams with HLS Playlist Delta Updates

Optimize live streams with HLS Playlist Delta Updates

元の動画を見る

ハイライト

Apple は、HLS ライブ プレイリストに対してデルタ アップデートと新しい 2020 DATERANGE スキップ機能を提供します。これにより、クライアントは、大きな DVR ウィンドウをリロードするときに最近の変更のみをダウンロードできるようになり、プレイリストの帯域幅が削減され、再生の安定性が向上します。

主要内容

ライブ ブロードキャスト プレーヤーのアクションは非常に単純です。メディア プレイリストを繰り返しリクエストして、新しいセグメントがあるかどうかを確認します。窓が小さい場合は安価です。ウィンドウは長いゲーム、大きな DVR リプレイ領域になり、プレイリストはますます長くなります。 gzip を使用する場合でも、毎回完全なファイルを再プルすると、時間と帯域幅が消費されます。

このコストは再生品質に影響します。ネットワークが貧弱な場合、プレイリストのリロード自体がスループットを消費し、プレーヤーがより低いビット レートのバリアントに切り替わる可能性があります。実際にユーザーが経験するのは、画質が劣化したり、ライブ配信が遅くなったり、広告やイベントのメタデータが追いつかないことです。

Playlist Delta Updates はリロード方法を解決します。クライアントは最初に完全なプレイリストを取得し、その後の後続のリクエストで HLS スキップ配信ディレクティブを送信します。サーバーは、新しい変更のみを含むデルタ プレイリストと、#EXT-X-SKIPラベル。クライアントはデルタをローカルの古いプレイリストとマージして、サーバー上の現在の完全なプレイリストを取得します。

WWDC20の新機能は、#EXT-X-DATERANGE。多くのライブ ブロードキャストでは、広告、イベント、チャプター、またはタイミング情報が DATERANGE に書き込まれます。セグメントはスキップできますが、メタデータは依然として大きいです。 2020 年の拡張ではサーバーが宣言できるようになりますCAN-SKIP-DATERANGES=YES、クライアント向け_HLS_skip=v2リクエスト、デルタでの再利用RECENTLY-REMOVED-DATERANGESどの古い DATERANGE が削除されたかをクライアントに通知します。

詳細

1. 最初に古いセグメントをスキップできることをサーバーに宣言させます。

(01:11) デルタアップデートはオプションの機能です。サーバーは次の場所にある必要があります#EXT-X-SERVER-CONTROL声明はこちらCAN-SKIP-UNTIL。この値はスキップ制限であり、プレイリスト内のどのくらい古いコンテンツをデルタ アップデートによってスキップできるかを示します。セッションは、ターゲット期間が少なくとも 6 であることを明示的に示しています。

# media playlist advertises delta support
#EXT-X-SERVER-CONTROL:CAN-SKIP-UNTIL=36

# transcript example:
# target duration: 6 seconds
# skip limit: 36 seconds
# visible window starts at segment 0 and ends at segment 20

キーポイント:

  • CAN-SKIP-UNTIL=366 つのターゲット期間に対応し、セッションによって指定された最小要件を満たします。
  • このステートメントはサーバー制御タグ内に配置されます。クライアントは、デルタ更新を確認した後、それを要求しようとします。
  • スキップ制限は、プレイリスト内のどのくらい古いコンテンツをデルタ アップデートによってスキップできるかを示します。
  • トランスクリプトの例はセグメント 0 からセグメント 20 であり、クライアントが完全なウィンドウを取得したことを示すために使用されます。
  • クライアントは、デルタのリクエストを開始する前に、完全なプレイリストを少なくとも 1 回ダウンロードする必要があります。

2. クライアント使用用_HLS_skip=YESデルタプレイリストをリクエストする

(01:3503:31) 次回クライアントがリロードするときに、プレイリスト URL に HLS スキップ配信ディレクティブを追加します。サーバーは次のように返します#EXT-X-SKIP完全なプレイリストを繰り返し送信する代わりに、デルタ プレイリストを送信します。

GET /live/stream.m3u8?_HLS_skip=YES
# delta update returned by the server
#EXT-X-VERSION:9
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-SKIP:SKIPPED-SEGMENTS=19
segment 20
segment 21

キーポイント:

  • _HLS_skip=YESこれは、デルタ更新を要求するクライアントの配信ディレクティブです。 -#EXT-X-MEDIA-SEQUENCE:1完全なプレイリストのセグメント 0 がウィンドウの外に移動されたことをクライアントに伝えます。 -#EXT-X-SKIP:SKIPPED-SEGMENTS=19クライアントがすでに見たセグメント URL 行のバッチと、それらの行に添付されているメディア セグメント タグを置き換えます。
  • セグメント 20 と新しく追加されたセグメント 21 は、スキップ制限後も返す必要がある最新のコンテンツです。
  • クライアントはローカルの古いプレイリストを取得し、ウィンドウからロールアウトしたエントリを削除し、新しいエントリをデルタで追加して現在のプレイリストを再構築します。

3. 使用するCAN-SKIP-DATERANGES大量のメタデータを処理する

(04:1204:38) 2019 デルタ アップデートはセグメントに対して適切に機能します。問題は、長時間の生放送では多くの場合、#EXT-X-DATERANGE。 WWDC20 拡張機能を使用すると、サーバーは DATERANGE もスキップできることを宣言でき、クライアントは次を使用します。v2フォームリクエスト。

# media playlist advertises DATERANGE skipping
#EXT-X-SERVER-CONTROL:CAN-SKIP-UNTIL=36,CAN-SKIP-DATERANGES=YES

# client asks for the v2 form
GET /live/stream.m3u8?_HLS_skip=v2

# returned delta uses playlist version 10
#EXT-X-VERSION:10

キーポイント:

  • CAN-SKIP-DATERANGES=YESこれは、クライアントに対するサーバーの機能ステートメントです。 -_HLS_skip=v2DATERANGE をスキップする新しい形式のクライアント リクエストです。 -#EXT-X-VERSION:10このデルタ更新で DATERANGE スキップが使用されることを示します。
  • DATERANGE はプレイリストのどこにでも表示できますが、セッションの例でそれらを最後に配置しているのは作成者の選択にすぎません。
  • サーバーは、メタデータがデルタを再び拡大するのを防ぐために、スキップ制限よりも前に追加された DATERANGE をスキップします。

4. 使用するRECENTLY-REMOVED-DATERANGESイベントの同期削除

(05:0206:02) DATERANGE は追加されるだけでなく、作成者によってプレイリストから削除されます。 v2 デルタが渡されましたRECENTLY-REMOVED-DATERANGESこれらの削除をクライアントに同期します。

# v2 delta update with removed DATERANGE IDs
#EXT-X-VERSION:10
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-SKIP:SKIPPED-SEGMENTS=19,RECENTLY-REMOVED-DATERANGES="1"
segment 21
#EXT-X-DATERANGE:ID="P"
#EXT-X-DATERANGE:ID="Q"

キーポイント:

  • RECENTLY-REMOVED-DATERANGES="1"ローカル キャッシュ内の DATERANGE ID 1 を削除する必要があることをクライアントに伝えます。
  • DATERANGE P はデルタに表示され、スキップ制限の後に追加された最近の DATERANGE であることを示します。
  • DATERANGE Q は新しい DATERANGE であり、クライアントのマージ後も保持されます。
  • DATERANGE 2 はスキップ制限よりも古く、まだ有効です。クライアントはローカルの古いプレイリストからそれを保持する必要があります。
  • マージ結果には、まだ有効な DATERANGE が含まれており、削除された ID は含まれません。

重要ポイント

1. スポーツのライブ放送用に DVR ウィンドウを拡大します。

  • 何をすべきか: 数十分から数時間のレビューウィンドウを予約し、ユーザーが重要なラウンドをドラッグバックできるようにします。
  • 実行する価値がある理由: プレイリストが長くなった場合、デルタ アップデートを使用すると、クライアントはリロード時に最新の変更のみを取得できるため、大きなウィンドウでの繰り返し送信が削減されます。
  • 開始方法: メディアプレイリスト内#EXT-X-SERVER-CONTROLプラスCAN-SKIP-UNTIL、クライアントが最初に完全なプレイリストを取得していることを確認してから、次のことを観察します。_HLS_skip=YES要求された戻りサイズ。

2. 広告付きライブブロードキャストのメタデータプレッシャーを軽減する

  • やるべきこと: 引き続き、広告機会、広告セグメント、イベントの追跡を作成します。#EXT-X-DATERANGEただし、デルタは時期尚早のメタデータをスキップします。
  • 実行する価値がある理由: WWDC20 についてCAN-SKIP-DATERANGESそして_HLS_skip=v2多数の DATERANGE を含むシナリオを処理するために特別に設計されています。
  • 開始方法: この機能をサポートするストリーミングの場合CAN-SKIP-DATERANGES=YES、デルタで#EXT-X-SKIP戻ってRECENTLY-REMOVED-DATERANGES、テスト プレーヤーを使用して、削除イベントが同期されているかどうかを確認します。

3. ネットワーク接続が弱いユーザーのために高画質を維持する

  • 対処方法: 既存のアダプティブ ビット レート ラダーに加えて、プレイリストのリロードのバイト数を最適化し、メディア スループットに対するコントロール プレーン トラフィックの圧迫を軽減します。
  • 実行する価値がある理由: このセッションでは、大規模なプレイリストを繰り返しダウンロードすると、貧弱なネットワークではプレーヤーの品質が低下する可能性があることを明確に指摘しています。
  • 開始方法: フル プレイリストとデルタ プレイリストの圧縮サイズを記録し、バリアント、ネットワーク タイプ、DVR ウィンドウの長さごとにリロード コストを比較します。

4. HLS サーバーにマージ整合性テストを追加する

  • 内容: 「完全なプレイリスト」と「古いプレイリストとデルタ」が同じ結果を与えることを自動的に検証します。
  • 実行する価値がある理由: デルタ プレイリストは個別に解析できず、クライアントの再生の正確性はマージされた結果に依存します。
  • 開始方法: サーバーテストに古いプレイリストを保存し、リクエストします_HLS_skip=YESまたは_HLS_skip=v2、メディア シーケンスの削除、最近のセグメントの保持、および削除をシミュレートします。RECENTLY-REMOVED-DATERANGES指定されたID。

関連セッション

コメント

GitHub Issues · utterances