見出し画像

⑦動画配信の構成(HTTP Live Streaming)

前回の記事はこちら


はじめに

動画配信の構成

今回のシステムでは、AWS S3に保存された動画を、ウェブブラウザを使用して視聴できるようにしたいと思います。

動画配信のプロトコルには、HLS(HTTP Live Streaming) を使用します。

HLSによる動画配信では、専用の動画配信サーバーを必要とせず、Apacheのような通常のHTTP配信機能があれば動画配信が実現できます。

また、CDN(Content Delivery Network) のキャッシュサーバーとも相性が良く、大量のユーザによる同時視聴時でも負荷分散を行うことが可能になります。

今回のシステムでは、負荷分散は不要ですが、専用の配信サーバーが不要、というHLSのメリットを生かして、クラウドサーバー上には配信サーバーを配置しない、いわゆるサーバーレス構造で作っていきたいと思います。

HTTP Live Streaming

HLS(HTTP Live Streaming) とは、Apple社が開発したHTTPベースの動画配信の規格です。

HLSでは、M3U8 というインデックスファイルと、実際の動画ファイルの組み合わせで動画配信を行います。

動画ファイルのコンテナフォーマットとしてはMPEG2-TSが使用されます。
(フラグメント形式のMPEG-4も使用可能です)

M3U8の中身は、再生するMPEG2-TSのURLのリストが記述された、単なるテキストファイルですので、メモ帳などでも作成できます。

M3U8例

ファイルの内容も非常にわかりやすく、ヘッダー情報を記載した後に、#EXT-INFO というタグに動画の長さ(秒)を記載し、その下に動画ファイル(MPEG2-TS)の配信URLを記述します。

配信サーバー側では、このM3U8ファイルと、細切れにされたMPEG2-TSファイルを、HTTPの公開ディレクトリに置いておきます。

M3U8とMPEG2-TSファイルを公開ディレクトリに配置

再生プレイヤーに、このM3U8のURLを指定し、再生を開始すると、再生プレイヤーはHTTP GETで指定されたM3U8を取得します。
M3U8を取得したら、最初に記載されたMPEG2-TSをHTTP GETで取得し、再生を開始します。

HTTP Live Streaming処理イメージ

一つ目のMPEG2-TSの再生が終了する前に、次のMPEG2-TSをバックグラウンドで取得し、時間が来たら2つ目のMPEG2-TSを再生します。

これをリストが終わるまで繰り返すことで、1本の動画を再生しているのです。

HLSは、再生プレイヤー側は色々と処理しなければいけないことがありますが、配信サーバー側は、M3U8もMPEG2-TSも、通常のHTMLと変わらない、単なるHTTPコンテンツです。
その為、HTTP GETでコンテンツを配信できれば、配信サーバーとしては基本OKとなり、非常にサーバー側の実装負荷が低い(=楽な)配信フォーマットと言えます。

今回作成する配信側の構成

動画配信の構成

今回のシステムでは、配信用のHTTPサーバとして、AWS S3の機能を使用しますので、クラウドサーバー上にHTTP配信サーバーを立てる必要はありません。

MPEG2-TSファイルは、クラウドレコーダからアップロードされたものをそのまま使います。

また、M3U8ファイルは、静的なファイルとしては用意せず、再生したい動画の区間を自由に選択できるように、AWS Lambdaの関数で動的に生成したM3U8ファイルを、直接返却するようにします。

【注意!!】
以降の記事では、AWS S3やAWS Lambda関数を一般公開(パブリックアクセス可能な状態)する設定を行います。
しかし、この設定を行うと、URLを知っている人は誰でもアクセスできるようになります。
実装・構築技術的な部分を中心に話を進めるために、簡易的な方法として、パブリックアクセス可能な状態にしていきますが、インターネット上に公開される、という状況を十分理解したうえで、撮影する映像には十分注意してください。

次の記事


この記事が気に入ったらサポートをしてみませんか?