HTTPライブストリーミングとは?| HLSストリーミング

HTTPライブストリーミング(HLS)は、ほぼすべてのサーバー上で実行できる広く使用されている動画ストリーミングプロトコルであり、ほとんどのデバイスによってサポートされています。HLSにより、クライアントデバイスはストリームの品質を上げたり下げたりすることで動的なネットワークの変化にシームレスに適応できます。

学習目的

この記事を読み終えると、以下のことができるようになります。

  • HTTPライブストリーミング(HLS)を定義する
  • HLSの仕組みを学ぶ
  • アダプティブビットレートストリーミングの利点を探る

関連コンテンツ


さらに詳しく知りたいとお考えですか?

是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!

当社がお客様の個人データをどのように収集し処理するかについては、Cloudflareのプライバシーポリシーをご確認ください。

記事のリンクをコピーする

HTTPライブストリーミング(HLS)とは?

HTTPライブストリーミング(HLS)は、最も広く使用されている動画ストリーミングプロトコルの1つです。HTTP「ライブ」ストリーミングと呼ばれているものの、オンデマンドストリーミングとライブストリーミングの両方に使用されます。HLSは、動画ファイルを小さいダウンロード可能なHTTPファイルに分割して、HTTPプロトコルを使用して配信します。クライアントデバイスは、これらのHTTPファイルを読み込んで動画として再生します。

HLSの長所の1つは、インターネットに接続されたすべてのデバイスがHTTPをサポートしているので、特殊なサーバーを使用する必要があるストリーミングプロトコルに比べて実装が簡単であることです。もう1つの長所は、HLSストリームが再生を中断することなくネットワークの状態に応じて動画品質を上げたり下げたりすることができることです。これが、ユーザーが動画を視聴しているときに、途中で動画の品質が良くなったり悪くなったりする理由です。この機能のことを「アダプティブビットレート動画配信」または「アダプティブビットレートストリーミング」と呼びます。この機能がないと、ネットワークの状態が遅くなったときに動画をまったく再生できなくなる可能性があります。

HLSは、Apple製品に使用するためにAppleによって開発されましたが、今ではさまざまなデバイスに使用されています。

ストリーミングとは?

ストリーミングは、インターネットを介してユーザーにオーディオ/ビジュアルメディアをユーザーに配信する方法です。メディアファイルをユーザーのデバイスに一度にではなく、少しずつ継続的に送信することで機能します。元のメディアファイルはリモートで保管されるか、ライブストリーミングの場合は、リモートカメラ/マイクを使用してリアルタイムにて作成されます。このようにして、ユーザーのデバイスが最初にファイル全体をダウンロードしなくても動画または音声を再生できます。

HTTPとは?

HTTPは、ネットワークに接続されたデバイス間で情報を転送するためのアプリケーション層プロトコルです。通常のユーザーがアクセスできるすべてのWebサイトやアプリケーションはHTTP経由で実行されます。通常、HTTPを介したデータ転送は、リクエストとレスポンスに基づいています。ほぼすべてのHTTPメッセージはリクエストまたはリクエストに対するレスポンスのいずれかです。

HTTP経由のストリーミングでは、標準的なリクエスト・レスポンスのパターンは適用されません。クライアントとサーバー間の接続はストリームの合間はオープンのままであり、クライアントが動画データのすべてのセグメントを要求しなくても済むように、サーバーは動画データをクライアントにプッシュします。

HLSの仕組み

サーバー:HLSストリームは、(オンデマンドストリーミングでは)メディアファイルが保存されているサーバーまたは(ライブストリーミングでは) ストリームが作成されるサーバーから発信されます。HLSはHTTPベースであるため、通常のWebサーバーすべてがストリームを発信できます。

サーバー上で2つの主なプロセスが実行されます:

  1. エンコーディング:すべてのデバイスが認識して解釈できるように、動画データは再フォーマットされます。HLSはH.264エンコーディングまたはH.265エンコーディングを使用しなければなりません。
  2. セグメント化:動画は長さが数秒のセグメントに分割されます。セグメントの長さは異なりますが、デフォルト値は6秒です(2016年までは10秒でした)。
    • 動画をセグメントに分割することに加えて、HLSは、動画セグメントのインデックスファイルを作成して、それらが属する順序を記録します。
    • また、HLSは異なる品質レベル(480p、720p、1080pなど)で、いくつかの重複するセグメントセットを作成します。

配信:エンコードされた動画セグメントは、クラアイントデバイスがストリームを要求すると、インターネットを介してクライアントデバイスにプッシュされます。通常、コンテンツ配信ネットワーク(CDN)を利用することで地理的に分散した地域にストリームを配信することが可能になります。また、CDNはより速くクライアントに配信するためにストリームをキャッシュします。

クライアントデバイス:クライアントデバイスとは、ストリームを受信して動画を再生するデバイスのことです。たとえば、ユーザーのスマートフォンやノートパソコンなどです。クライアントデバイスは、動画を順序どおりに組み立てるために参照としてインデックスファイルを使用し、必要に応じて、高品質の画像から低品質の画像(またはその逆)に切り替えます。

HLSにおけるアダプティブビットレートストリーミングとは?

HLSがほかのストリーミングプロトコルに比べて優れている点の1つは、アダプティブビットレートストリーミングです。これは、ネットワーク状態が変化したときにストリームの途中で動画品質を調整できることを意味します。これにより、ネットワーク状態が悪化した場合でも動画を再生し続けることができます。逆に、ネットワークがサポートできる最高のレベルまで動画品質を最大化します。

ネットワークの速度が低下すると、ユーザーのビデオプレイヤーはそれを検知し、アダプティブビットレートストリーミングがストリームの品質を引き下げて、動画の再生が停止しないようにします。より多くのネットワーク帯域幅が利用可能になると、アダプティブビットレートストリーミングがストリームの品質を引き上げます。

アダプティブビットレートストリーミングが可能なのは、HLSがセグメンテーションプロセスにて異なる品質レベルで複数の重複するセグメント化されたストリームを作成するからです。ユーザーのビデオプレイヤーは、動画再生時に1つのストリームから別のストリームに切り替えることができます。

HLSはトランスポートプロトコルとしてTCPまたはUDPを使用するか?

TCPUDPはトランスポートプロトコルです。つまり、インターネットを介してコンテンツを配信します。TCPはUDPより確実にデータを配信できる傾向がありますが、UDPは転送中に一部のデータが失われる可能性があるもののずっと速いです。

UDPの方が速いため、多くのストリーミングプロトコルはTCPではなくUDPを使用します。しかし、HLSはTCPを使用します。これにはいくつかの理由があります。

  1. HLSはHTTP経由であり、HTTPプロトコルはTCPで使用するために構築されています(一部例外あり)。
  2. 現代のインターネットは、ストリーミングが最初に開発された頃に比べて、信頼性と効率性が向上しています。今日、世界の多くの地域にて、特にモバイル接続の場合、ユーザー接続性は大幅に改善されています。その結果、ユーザーはすべてのビデオフレームの配信をサポートするのに十分な帯域幅を確保できます。
  3. アダプティブビットレートストリーミングは、TCPの潜在的に遅いデータ配信を補完するのに役立ちます。
  4. ビデオ会議の接続の場合と同様に、HLSストリーミングは「リアルタイム」である必要はありません。数秒の遅れは、フレームの欠落のような悪影響をユーザー体験に及ぼすことはありません。

ストリーミングに一般的に使用されるほかのプロトコル

MPEG-DASHHDSのように、HTTP経由で実行されアダプティブビットレートストリーミングを提供するHLSと同様のプロトコルが数多くあります。RTMPプロトコルまたはHDSで動作していたAdobe Flashは、かつては動画ストリーミングに使用される主な技術でしたが、今では多くのブラウザがAdobe Flashをサポートしていません。RTMPは今も使用されていますが、サポートは減少しています。

CloudflareはHTTPライブストリーミングをサポートしているか

Cloudflareはオンデマンドとライブストリーミングの両方についてHLSをサポートしています。Cloudflare Streamは、動画ストレージ、エンコーディング、カスタマイズ可能なプレーヤーを、120か国以上、330都市以上に広がる、高速で安全、信頼性の高いCloudflareネットワークとシームレスに統合します。これにより、全世界のユーザーは高速・高品質なHLSストリームを受信することができます。Cloudflare Streamの詳細をご確認ください。