前回は、Thetaを使用して画像をアップロードすることについてご紹介しました。
今回は、数回に分けて、アップロードした画像を動画に変換し、HLS形式を利用して、
クライアント側へ配信する方法をご紹介したいと思います。
※パフォーマンス改善結果は、現在検証中なので、お待ちください。
第1回目では、なぜ、「HLS形式を利用して配信するのか?」というのを説明したいと思います。
その前に、HLSとは、何かを簡単に説明します。
【HLSとは?】
HLSは、HTTP Live Streamingの略です。
Appleが開発した動画をストリーミング送信するためのプロトコルです。
iOS3.0/Android4.0以降を搭載している端末で利用可能です。
HTTPを利用するので、特別なストリーミングサーバは必要ありません。
Apacheや、Nginxなどの一般的なWebサーバで動画配信が行えるので、
コスト面でも大きなメリットがあります。
それでは、もう少し詳しく説明してみましょう。
まず、HLSの構成は、下記の2つから構成されています。
・MPEG2TSセグメント
→ MPEG2 Transport Stream形式のコンテナに格納された細かく分割された動画ファイル
・.m3u8ファイル
→ セグメントファイルの場所、再生時間、再生順序などが記載されたメタデータファイル
詳しくは、Appleのガイドラインを参照してください。
次にアーキテクチャ概要を見てみましょう。
上図にあるようにHLSは、「Server」、「Distribution」、「Client」の3つで構成されています。
各コンポーネントについて、説明します。
・Serverコンポーネント
→ 動画をMPEG-2 TS形式にエンコードし、動画作成ツールであるffmpegを利用して、細かく分割された
MPEG2TSセグメントファイル(tsファイル)とインデックスファイル(.m3u8ファイル)を作成します。
・Distributionコンポーネント
→ Serverコンポーネントで作成したMPEG2TSセグメントファイル(TSファイル)とインデックスファイル
(.m3u8ファイル)からHTTPを利用してクライアント側へコンテンツを配信します。
・Clientコンポーネント
→ インデックスファイル(.m3u8ファイル)を取得し、動画をダウンロードします。
クライアント側へ動画を配信する流れは下記となります。
①Serverコンポーネント側へ動画の分割要求を行う
②ffmpegを利用し、下記のファイルを作成する
・MPEG2TSセグメントファイル(tsファイル)
・インデックスファイル(.m3u8ファイル)
③HTTPを利用し、Clientコンポーネントへコンテンツを配信する
Client側で、細かく分割されたMPEG2TSセグメントファイルのダウンロード及び、再生を
繰り返すことで、ストリーミング再生の実現が可能となります。
では、HLSは何ができるのかということがわかったところで、なぜこの方式を採用したかを記載したいと思います。
・「HTTP」プロトコルを利用するので、ストリーミングサーバを用意せずに、
一般的なWebサーバで配信するでき、コストを抑えることができる
・細かく分割された動画ファイルをダウンロード及び、再生するので、繰り返すと、ストリーミング配信ができる
・配信方法が非常に容易である
※ffmpegで動画ファイルから下記を作成し、クライアントからインデックスファイルを取得するだけで配信が可能
1.MPEG2TSセグメントファイル(tsファイル)
2.インデックスファイル(.m3u8ファイル)
以上が、HLSを利用した理由となります。
HLSについて、いろいろ紹介したところで、今回は終了します。
次回は、実際にffmegから下記のファイルを作成してみたいと思います。
・MPEG2TSセグメントファイル(tsファイル)
・インデックスファイル(.m3u8ファイル)
皆さん是非見てください。
弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。