AWS
S3
HLS
Transcoder

AWS S3だけでHLSの原理試作

やりたいこと

Android/iPhoneに動画を配信したい場合、現状ではHTTPストリーミングのHLS(HTTP Live Streaming)が候補になるかと思います。ここでは、AWSを最低限利用して、HLSを実現する試作を行ってみました。

HLSに関しては以下の資料が参考になります。
https://developer.apple.com/jp/documentation/StreamingMediaGuide.pdf

動画ファイルの作成

素材はNHKさんを利用させて頂きます。
http://www.nhk.or.jp/archives/creative/material/

ダウンロードしたMP4ファイルをAmazon Elastic Transcoderを利用してHLS形式にします。HLS形式にするというのは、ダウンロードしたファイルはMP4コンテナにH.264ビデオ、AACオーディオデータ格納されているのですが、これをMPEG2TSというライブ放送用のコンテナに入れ替えます。また複数のTSファイルに変換されるので、そのプレイリストファイル(m3u8)を作成します。

Elastic Transcoderはデータの入出力にS3を利用しますので、以下のようにS3フォルダを作成しておきます。

スクリーンショット 2017-08-06 22.53.09.png

uploaded以下にHLS形式に変換するMP4ファイルをアップロードしておきます。次にElastic Transcoderを選択して、"Create new pipeline"を選択します。Elastic Transcoderでは、複数の変換処理を連続して行うことが可能です。これをパイプラインと読んでいます。それぞれの変換処理はジョブと呼ばれています。パイプラインの設定では、先ほど作成したバケットを選択して下さい。IAM Roleはデフォルトの選択でS3の入出力ができますので問題ありません。

スクリーンショット 2017-08-06 23.01.45.png

次に"Create New Job"を選択してパイプラインに実際の変換処理(ジョブ)を追加します。

スクリーンショット 2017-08-06 23.07.13.png

変換処理は、先ほどアップロードしたMP4ファイルを選択します。出力先バケットとして"transcoded"を選択します。変換形式はHLS 1Mを選択しました。Segment Durationが10秒を選択したので、概ね10秒ごとのtsファイルに分類されます。

スクリーンショット 2017-08-06 23.17.37.png

ジョブを作成すると変換処理が実施されます。

S3の設定

先ほど作成したS3のバケットを見ると、transcodedバケット以下にm3u8ファイルと複数のtsファイルが作成されています。

スクリーンショット 2017-08-06 23.24.02.png

動作確認のためにtranscoded以下をまとめて公開してしまいます。

スクリーンショット 2017-08-06 23.25.22.png

動作確認

m3u8ファイルのURLをコピーしてSafariでURLを入力するとHLS再生に成功しました。以上、サーバーのコードを一切書かないでHLS再生が実現できました。

スクリーンショット 2017-08-06 23.26.25.png