やりたいこと
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フォルダを作成しておきます。
uploaded以下にHLS形式に変換するMP4ファイルをアップロードしておきます。次にElastic Transcoderを選択して、"Create new pipeline"を選択します。Elastic Transcoderでは、複数の変換処理を連続して行うことが可能です。これをパイプラインと読んでいます。それぞれの変換処理はジョブと呼ばれています。パイプラインの設定では、先ほど作成したバケットを選択して下さい。IAM Roleはデフォルトの選択でS3の入出力ができますので問題ありません。
次に"Create New Job"を選択してパイプラインに実際の変換処理(ジョブ)を追加します。
変換処理は、先ほどアップロードしたMP4ファイルを選択します。出力先バケットとして"transcoded"を選択します。変換形式はHLS 1Mを選択しました。Segment Durationが10秒を選択したので、概ね10秒ごとのtsファイルに分類されます。
ジョブを作成すると変換処理が実施されます。
S3の設定
先ほど作成したS3のバケットを見ると、transcodedバケット以下にm3u8ファイルと複数のtsファイルが作成されています。
動作確認のためにtranscoded以下をまとめて公開してしまいます。
動作確認
m3u8ファイルのURLをコピーしてSafariでURLを入力するとHLS再生に成功しました。以上、サーバーのコードを一切書かないでHLS再生が実現できました。