目次
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タグなど
- これらの行の1つに適用されているメディアセグメントタグも同様
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のサンプル
