HLSとDASHについて
ライブ配信技術について調べる中でよく利用されているプロトコルHLSとDASHについて相似点と相違点をまとめました。素人知識でRFCなどを参照せずにとりあえずまとめたので、間違いがあるかもしれません。見つけ次第修正したいと思います。
HLS(HTTP Live Streaming)とDASH(MPEG-DASH: Dynamic Adaptive Streaming over HTTP)はともにHTTP上で動画をストリーミング方式で配信するためのプロトコルです。どちらもオンデマンド配信・ライブ配信に利用可能です。
大まかな流れ
HLSとDASHでは次のような流れで動画を配信します。
- エンコーディング
配信する動画を特定の方式でエンコーディングします。 - セグメンテーション
配信する動画を数秒単位でセグメントに分割します。このとき同時にセグメントの順番がわかるようにインデックスファイルを作成します。 - 配信
セグメント化された動画をクライアントの元まで送信します。 - デコーディングと再生
クライアントのデバイスでインデックスファイルを参照して動画ファイルを正しい順番に並べ、デコードして再生します。
アダプティブビットレートストリーミングとは
アダプティブビットレートストリーミングは、ネットワークの状態が変化したときに、ストリームの途中で動画の画質を調整する機能です。MPEG-DASHとHLSはどちらもこの機能を持っています。
動画を配信するサーバがいくつかの画質(480p、720p、1080pなど)であらかじめ動画セグメントをエンコードして多くことで、動画を中断することなく画質を切り替えることができます。このようにすることで、ネットワーク帯域幅が突然減少した場合にビデオが完全に停止するのを防いでいます。
相違点について
HLSとDASHは以下の4点で異なっています。
エンコード形式
HLSではエンコード形式としてH.264かH.265のみ使用可能ですが、DASHでは任意のエンコード形式が使用できます。デバイスのサポート
HLSは、Appleデバイスでサポートされている唯一の形式です。iPhone、MacBook、およびその他のApple製品は、MPEG-DASHで配信された動画を再生できません。e.g. YoutubeではApple系(OS X,iOS)の端末ではHLSで配信し,それ以外ではMPEG-DASHを利用しているらしいです。(参考:HTML5による動画配信が急速にスタンダードに!)
セグメントの長さ
HLSのデフォルトのセグメントの長さは6秒であるのに対し,DASHは2-4秒が最適な長さです。標準化
MPEG-DASHは国際標準となっていますが、HLSは国際標準として公開されていません。