こんにちは!虎の穴ラボのNSSです。
AWSのサービスを活用した、 サーバーレスで動画をストリーミング配信するWebサイト作成してみました。 先日開催した「【とらのあな主催】オタクが最新技術を追うライトニングトークイベント10回目 in 秋葉原」でも 発表させていただきましたが、補足も含めてブログ記事にしました。 長くなってしまったので、前後編に分けてご紹介します。 今回は前編として、AWS Elemental MediaConvertによる動画変換をご紹介します。
イベントの詳細はこちら
イベントでの発表資料はこちら
www.slideshare.net
1. ストリーミング配信について
現在、世間で使用されている主流な動画配信形式は大きく分けて以下の2つです。
- ダウンロード
- ストリーミング
ダウンロードは再生にネット環境が不要というメリットがありつつ、
以下のデメリットがありました。
- 巨大な動画ファイルを全てダウンロードしてから再生するため、待ち時間が長い
- 動画ファイルがストレージを圧迫する
- 動画ファイルが端末に残るので、違法コピーが懸念される。
これに対して、ストリーミングは再生にネット環境が必須であるものの以下のメリットがあります。
- 動画を細切れにダウンロードしながら再生するため、待ち時間が短い
- ダウンロードされたファイルは再生が終わると破棄されるため、ストレージを圧迫しない
- ファイルが残らないので、違法コピーの防止になる
両者は対照的な特徴を持っており、 動画配信ビジネスでは、両者の特徴を活かして利用されています。
ストリーミング配信を行うには元となる動画ファイルをストリーミング配信の形式に変換する必要があります。 これを自分で実装するには、ある程度高い知識が必要です。 また、動画を扱う性質上、Webサーバーとは別のストリーミングサーバーを構築しなければならない場合もあり、 個人で1からストリーミング配信環境を構築するには、高いハードルがありました。
ストリーミング配信の形式はルール(プロトコル)によって多少異なります。 ここでは、代表的な2つのプロトコルをご紹介します。
HTTP Live Streaming (HLS)
アップルが開発したプロトコルで、.m3u8というプレイリストファイル(中身はテキスト)と tsというセグメントファイル(動画ファイルを細切れにしたファイル)で構成された形式です。
MPEG-DASH (Dynamic Adaptive Streaming over HTTP)
MPEGが開発したプロトコルで、.mpdというプレイリストファイルと m4sというセグメントファイルで構成された形式です。
2. AWS Elemental MediaConvertについて
mp4やmovなどの動画ファイルをストリーミング配信の形式に簡単に変換できるサービスです。
AWS Elemental MediaConvert(以下MediaConvert)を使用することで、高度な動画処理やインフラを自前で用意する必要が無くなります。
また、動画変換と同時にサムネイル画像も生成するように設定することができます。
3. MediaConvertを使った動画配信の例
MediaConvertで変換した特定の動画を公開するだけのシンプルなWebサイトを作成します。 システム構成は以下の図の通りです。
前編では、上記図の赤枠部分、MediaConvertを使って動画ファイルからストリーミング形式に変換するまでをご紹介します。
3-1. S3バケットの作成
S3バケットを2つ作成します。
1つは変換元となる動画ファイルを格納し、もう一方は変換されたプレイリストファイルとセグメントファイルを出力するために使用します。
3-2. IAMロールの作成
MediaConvertに定義するIAMロールを作成します。 AWSのIAMコンソールでロールを選択し、ロールの作成をクリックします。 AWSサービスの「このロールを使用するサービスを選択」でリストの中から「MediaConvert」を選択します。 あとは「次へ」を押し続けて、ロールの名称などを入力していけば作成できます。
3-3. ジョブテンプレート作成
MediaConvertのジョブテンプレートを作成します。 設定するのは以下の3項目です。
- 一般設定(テンプレート名など)
- 入力(今回はデフォルト)
- 出力グループ
出力グループは動画やキャプチャー画像(サムネイル画像)をどのような形式で出力するか設定できます。 今回、動画は以下の設定で出力します。
- 名前修飾子(変換ファイル名の末尾):_hls
- 配信プロトコル:HLS
- エンコード設定
- ビデオコーデック:H.264
- 解像度:1280 x 720
- フレームレート:30fps
- ビットレート:5Mbps
続いて、キャプチャーの設定をします。 出力グループの「追加」でファイルグループを選択します。
キャプチャー画像は1枚だけ出力するようにします。
- 名前修飾子(変換ファイル名の末尾):_cap
- ビデオコーデック:Frame Capture to JPEG
- 最大キャプチャー:1
3-4. ジョブの作成
ジョブテンプレートができたら、ジョブを作成します。
入力のS3バケットと動画ファイルを指定します。
以下の例では3-1で作成したS3バケットの中のtest.MOVという動画ファイルを指定しています。
出力も同様です(ファイルは指定しない)。
また、ジョブの設定で3−2で作成したIAMロールを設定します。
ジョブの作成が終わると動画変換が実行されます。
正常に完了すれば、出力先のS3バケットにHLS形式のファイルとキャプチャーが出力されます。
まとめ&次回予告
今回は、MediaConvertで動画ファイルをストリーミング形式に変換する手順についてご紹介しました。
高い技術力や高価なインフラがなくてもストリーミング配信をすることができます。
次回は変換された動画をWeb上に公開する仕組みをご紹介しますので、
ぜひお読みください。
告知
12/7(土)には「とらのあな採用説明会」を開催します。開催場所はなんと大阪です!
関西にお住いのエンジニアの方、是非お気軽に参加ください。
12/17(火)には秋葉原での開催も予定しております。