近年、急速に普及が進みつつある AWS (Amazon Web Services)。高いスケーラビリティ、アベイラビリティ、多様なサービスの恩恵など、AWS を利用するメリットは計り知れません。これまでインフラエンジニアが必要だった複雑で高度なサーバ構成も、アプリケーションエンジニアが自分で構築することが可能になりました。また毎月のように新しいサービスが追加され、応用範囲は益々広がりつつあります。
さて、近年、いろいろなサービスで動画配信を行う機会も増えているのではないでしょうか。以前と比べるとだいぶ敷居が下がりましたが、それでも大きな障害となっているのがマルチデバイス対応です。PC、タブレット、スマートフォンなど様々なデバイスやOSが存在し、それぞれ対応している動画フォーマットも異なります。
現在、ワンソースですべてのデバイスに対応するのは技術的に極めて困難で、基本的にはデバイスに合わせてエンコード(トランスコード)を行う必要があります。エンコードは非常に時間と手間のかかる作業で、自動化が望まれております。しかしこれといった決定打はなく、なかなか苦労されている人も多いのではないでしょうか。
そんな中、2015年5月に AWS に動画配信における画期的なサービスが追加されました。Amazon Elastic Transcoder です。Elastic Transcoder はこの問題を一気に解決できる可能性を持っています。
Elastic Transcoder とはアップロードされた動画を様々な形式へとエンコードを行うサービスです。エンコードのワークフローは、トランスコーディングパイプにって定義され、ジョブの作成によって実行されます。また Lambda によって一連の処理を自動化することも可能です。つまり特定のS3のバケットにアップロードされた動画をそれぞれのデバイスに合わせて自動的にエンコードし、指定されたS3バケットに配置することが可能になるのです。
今回使用したAWSのサービスは以下の通りです。
システム構成
設定の流れ
設定の大きな流れは以下の通りとなります。(主要な画面だけを掲載しており、途中かなり省略しています。)
- まず動画格納(オリジナル動画、トランスコード後の動画)用のS3バケットを作成します。
- 次にトランスコーディング用のパイプラインを作成します。
トランスコーディングパイプラインとはエンコード用のワークフローの構造で、動画の場所や、出力先などの定義を行います。トランスコーディングパイプラインは並列処理が可能で、例えば短い動画と長い動画を並列で処理させたり、解像度やストレージごとにトランスコードする設定などが可能です。
- さらに、Lambda でアップロードされた動画を自動トランスコードするためのスクリプト(JavaScript形式)を作成します。
参考
http://qiita.com/con_mame/items/b58a5e017e7c9ab2356b - トランスコード終了後、管理者に自動的にメールで通知するためにSNS(Simple Notification Service)の設定を行うことが可能です。
現在、Elastic Transcoder が出力に対応している動画フォーマットの一覧です。iOSやAndroidなどで広くサポートされているHLS形式もサポートしており、これまで敷居の高かったスマートデバイスへのストリーミング配信も手軽に行うことが可能となります。
動画の利用
トランスコードされた動画は以下の様な形でページに埋め込むことができます。
<video controls src=”http://s3.transcoder.aiit.out.s3-website-ap-northeast-1.amazonaws.com/HLS/aiit-ruby.m3u8″>
コスト
最後にコストについてですが、Amazon の価格表では以下の通りとなっております。
5分の動画を標準解像度でトランスコードするだけであれば、0.017 x 5 = 0.085 ドル = 10円ほどですが、60分の動画を高解像度でトランスコードすると 0.034 x 60 = 2.04 ドル = 250円ほどとなります。単純コストで考えるとそれほど安くありませんが、トランスコードにかかる大きな手間を考えれば、トータルコスト的には非常に魅力的といえるのではないでしょうか。