26
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS S3だけでHLSの原理試作

Posted at

やりたいこと

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
26
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?