HLS Playlist Delta Updatesを使いライブストリームを最適化する – WWDC2020

Session概要

広いプレイバックウィンドウと多くのメタデータを持つライブストリームの配信を最適化するHLSの機能であるPlaylist Delta Updatesについて。
Playlist Delta Updatesがライブストリーム生成時のオーバーヘッドを減少させ、遅めの接続下であっても高品質なバリアントを提供すること、また配信に広告を組み込む方法について。 https://developer.apple.com/videos/play/wwdc2020/10230/

Playlist Deltaについて

大きなPlaylistでのライブストリームを最適化するためのツール

Playlist Delta 更新の目的

クライアントがライブストリームを再生する時、常にプレイリストをリロードし新しいセグメントを探します。
その際、大きなDVRウィンドウや長いイベントを見せたい場合、Playlistはgzipを使っても大きくなります。
大きなPlaylistは取得に時間がかかり、ネットワークに問題がある場合低品質の動画に切り替えられます。

Playlist Delta更新

Playlist Delta更新はHLS Playlistをリロードする新しい方法で、サーバはクライアントに最新の変更だけを送ります。
クライアントはその更新を既に持っているバージョンと結合し、サーバにある現在のバージョンを再構築します。

Delta 更新の流れ

  • サーバコントロールタグの CAN-SKIP-UNTIL=<SL> 属性を用いて使用する
    • <SL> はスキップ制限(skip limit)で、Playlist内のものの古さを秒単位で示し、Delta更新によりスキップされます
    • 常に少なくとも6つのターゲットデュレーションがあります
  • クライアントは最初の完全なPlaylistを少なくとも1回ダウンロードする
  • サーバがPlaylist Delta更新を行う場合、次にそれを要求する時 _HLS_skip デリバリー・ディレクティブを使用できます
  • 生成されたDeltaを使用し、Playlistの以前のバージョンを最新に更新します

Delta 更新の構造

  • Playlistのバージョン(EXT-X-VERSION)は9 or higher
  • Delta更新は下位互換性がない
  • クライアントはメディアシーケンス(EXT-X-MEDIA-SEQUENCE)タグで最後の更新で削除されたセグメントを確認します
  • スキップタグ(EXT-X-SKIP)はスキップ制限の前にPlaylistに追加された全てのセグメントURL行を置き換えます
    • これらの行の1つに適用されているメディアセグメントタグも同様
      • 不連続タグや Program-Date-Timeタグなど
  • SKIPPED-SEGMENTS 属性によりすきスキップされたセグメント数を示す
  • 下記のHLS Playlistでは CAN-SKIP-UNTIL: 36 となっており、最後の36秒以内にDelta更新を要求出来る
  • GET: playlist.m3u8?_HLS_skip=YES リクエストをすることで可能
  • リロードパフォーマンスの向上により、プレイバックの信頼性及びUXの向上となる



Delta 更新後のPlaylist


Playlist Delta更新の拡張機能

  • 日付範囲タグ(EXT-X-DATERANGE)のスキップをサポート
    • サーバは CAN-SKIP-DATERANGES 属性をサーバ制御タグ内で指定可能
    • クライアントは _HLS_skip=v2でリクエストすることで可能
    • v2更新はスキップ制限の前にPlaylistに追加された日付範囲をスキップする
  • これら拡張機能は互換性がない

日付範囲指定でのSkipのサンプル

最新情報をチェックしよう!