HLS Blocking Preload Hintsについて – WWDC2020

Session概要

Low-Latency HLSにおいてBlocking Preload Hintsを実装し、配信遅延を減らし、動画・音声ストリームの信頼性を高める方法について。
CMAF Chunk配信にLL-HLSを統合し、ストリーミングフォーマットを問わず配信を統一する方法について。 https://developer.apple.com/videos/play/wwdc2020/10229/

Blocking Playlist Reload

  • 低遅延HLSの類似機能
    • Playlistの次バージョンを事前にサーバにリクエスト可能
    • サーバはリクエストを保留し、Playlistが更新された時にレスポンスする
  • Preload Hints
    • 目的は部分セグメントの取得
    • 事前にリクエストし応答時間を短縮する
    • 更新されたプレイリストの新規セグメントをサーバにリクエストするラウンドトリップは不要になる
    • オリジンとのラウンドトリップが行われなくなるためHTTP cache fillが促される

Preload Hintについて

Preload Hintは配信パイプライン全体の最適化に役立つため、低遅延HLSで必要とされる機能

低遅延HLSでのPreload Hint

  • 低遅延のプレイリストにはPreload Hintタグが必要
    • EXT-X-PRELOAD-HINT
  • クライアントはプレイリストの取得後、Hint URLをリクエストする
  • クライアントは2つのリクエストを同時にサーバから受け取る
    • サーバはパーシャルセグメントが利用可能になってからクライアントにレスポンスを返す
    • クライアントは通常Blocking Playlist Reloadリクエストも行っており、このレスポンスも同時に返される

Preload Hint の流れ



byte範囲指定のPreload Hint 部分セグメント



  • 通常は上記のように、URLで部分セグメントの範囲を示す
  • タグには状況に応じてバイト範囲の部分セグメントの長さを指定可能
  • byte範囲指定を使うとCMAFのチャンク転送ができ、低遅延HLSだけでなく低遅延DASHとも相互運用可能

CMAFチャンクについて

  • チャンクとは、CMAFがfMP4を呼び出す時の個別に転送可能な単位
  • サーバとクライアント間でチャンク転送エンコーディングが必要
    • 多くのCDNはライブ配信でチャンク転送エンコーディングに未対応
  • クライアントは1回のHTTPリクエストで部分セグメントを毎回取得可能

Preload Hintのサンプル

下記のようにセグメントの取得後にPreload Hintタグが設定され、次にpreloadするセグメントの範囲をbyte指定している

Preload Hintの注意点

  • サーバがPreloadタグの発行後、方針転換(方法の変更)しても違反ではない
    • 例えば、ユーザが途中で挟まれた広告から元の動画に戻りたいために途中で操作すること
  • クライアントは次のプレイリスト更新で以前のPreload Hint URLがないことを認識し、保留中のHintリクエストを撤回し現プレイリストに切り替える
  • 広告などの記録済みコンテンツ(ライブ配信ではない静的動画)はすぐ配信可能
最新情報をチェックしよう!