この記事は HTTP ライブストリーミング(HLS)に焦点をあてていますが、基本的なコンセプトは他の HTTP ベースのストリーミングプロトコルにも有効です。HLS プロトコルを深く掘り下げることは、この記事の範囲を超えていますが、公開された標準規格を含め、豊富な情報がオンラインで入手可能です:HTTP ライブストリーミング
コンカチネーションとオールド・ウェイ
コンテンツは価値とイコールであり、動画の世界では、1つの動画を他の動画とミックスして新しいコンテンツを作ることで、より多くの価値を生み出すことができる。多くの場合、これは連結、つまり複数の動画をつなぎ合わせる機能によって行われる。さらに、編集リストを使ってクリップを作成することで、ノンリニアエディターの最も基本的な2つの機能が完成します。
連結は有望に見えるが、インフラと運用の両方に負担をもたらす可能性もある。ソーシャル・ビデオ・ポータルを想像してほしい。対象とするデバイスにもよるが、1つの動画につき、数個から数十個の出力形式があり得る。ライブラリの価値を高めるために複数の動画を連結することになれば、ストレージ・コストが大幅に増加し、資産管理も複雑になる。動画の新しい組み合わせが作成されるたびに、一連の固定資産が生成され、保管する必要がある。
HTTPライブ・ストリーミングとマニフェスト・ファイル
マニフェスト駆動のHTTPベース・ストリーミング・プロトコルの導入は、ダイナミックな視聴体験を生み出すためのまったく新しいパラダイムを生み出しました。従来、1 つのコンテンツから複数のクリップを組み合わせて配信する唯一の選択肢は、編集、つまり固定アセットの作成でした。HLS のような技術では、再生可能なアイテムはもはや動画ファイルではなく、単純なテキストファイルなので、動画に編集を加えることは、ワープロで文書に編集を加えることと同じです。
動画プラットフォームにとって、HLS m3u8 マニフェスト ファイルを扱う方法は 2 つあります。最も単純な方法は、m3u8 ファイルを個別の再生可能なアセットとして扱うことです。このモデルでは、m3u8 は分割された TS ファイルと一緒にオリジン サーバーに保存され、デバイスに配信されます。その結果、シンプルで素早く実装することができますが、m3u8ファイルは手動プロセスによってのみ変更することができます。
代わりに、マニフェストを動的に生成されるものとして扱うことで、事実上無限のクリップの組み合わせを視聴者に配信することが可能になります。このモデルでは、m3u8 はオンザフライで生成されるため、サーバーに置かれることはなく、要求されるたびに作成され配信されます。
ダイナミック・マニフェスト生成
マニフェスト ファイルとは何ですか?基本的には、いくつかのメタデータと動画のセグメントへのリンクの組み合わせです。
- 模範的なビデオA
- #EXTM3U
- #EXT-X-MEDIA-SEQUENCE:0(エクスト-エックス-メディア-シーケンス:0
- #EXT-X-TARGETDURATION:10
- #EXTINF:10、
- Exemplary_A_セグメント-01.ts
- #EXTINF:10、
- 例題_A_セグメント-02.ts
上記のm3u8には、10秒ずつの動画セグメントが2つあるので、動画全体の長さは20秒である。模範的なビデオAは、本当に素晴らしいビデオですが、長さは20秒です。では、次のような動画もあるとしましょう:
- ビデオB
- #EXTM3U
- #EXT-X-MEDIA-SEQUENCE:0(エクスト-エックス-メディア-シーケンス:0
- #EXT-X-TARGETDURATION:10
- #EXTINF:10、
- Exemplary_B_セグメント-01.ts
- #EXTINF:10、
- 例題_B_セグメント-02.ts
また、ある視聴者が、ビデオBを最初に、ビデオAを2番目に流して、両方のビデオを組み合わせて見ることに興奮することがわかっているとしよう:
- 素晴らしいビデオ
- #EXTM3U
- #EXT-X-MEDIA-SEQUENCE:0(エクスト-エックス-メディア-シーケンス:0
- #EXT-X-TARGETDURATION:10
- #EXTINF:10、
- Exemplary_B_セグメント-01.ts
- #EXTINF:10、
- 例題_B_セグメント-02.ts
- #EXT-X-DISCONTINUITY
- #EXTINF:10、
- Exemplary_A_セグメント-01.ts
- #EXTINF:10、
- 例題_A_セグメント-02.ts
これで、オリジンに保存する必要のある恒久的なアセットを作成することなく、また、新しいアセットを作成するためにエディタを関与させることなく、瞬時に、ビデオBの後にビデオAが続く新しいビデオをユーザーのために生成しました。
m3u8に小さな追加要素があることにお気づきだろうか:
EXT-X-不連続
m3u8にこのタグを記述すると、プレーヤーは次のビデオセグメントが前回と異なる解像度または異なるオーディオプロファイルであることを期待するようになります。動画がすべて同じ解像度、コーデック、プロファイルでエンコードされている場合、このタグは省略できます。
新しいモデルの拡張
オンザフライのカスタム再生エクスペリエンスを提供できる動画プラットフォームを作成するための重労働は、m3u8 マニフェストを固定資産としてではなく、リクエストごとに生成する必要があるものとして扱うことです。つまり、バックエンドは、動画の各セグメントの場所、アイテムごとのセグメントの総数、および各セグメントの長さを認識していなければなりません。
これをもっとシンプルにする方法がある。たとえば、ファイル名を統一することで、すべてのセグメントについてベースとなるファイル名だけを知っていればよく、セグメントの繰り返しはプログラムで処理することができます。また、最終セグメントを除くすべてのセグメントを同じ継続時間とし、最終セグメントの継続時間のみを保存すればよい。したがって、多くのセグメントを含む 1 つの動画ファイルに対して保存する必要があるのは、 ベースパス、ベースファイル名、セグメント数、平均セグメント長、最終セグメントの長さだけです。
長編タイトルでさえもシーンの組み合わせとみなすことで、あるいはさらにシーンをショットの組み合わせとみなすことで、ダイナミックなマニフェスト生成によって解き放たれるパワーは驚くほど大きくなる。早期に計画し構築すれば、配信プラットフォームのアーキテクチャは、運用コストやインフラストラクチャのコストを増加させることなく、非常に多くの柔軟性を実現できます。