Amazon Elastic Transcoder によるマルチデバイス動画配信


近年、急速に普及が進みつつある AWS (Amazon Web Services)。高いスケーラビリティ、アベイラビリティ、多様なサービスの恩恵など、AWS を利用するメリットは計り知れません。これまでインフラエンジニアが必要だった複雑で高度なサーバ構成も、アプリケーションエンジニアが自分で構築することが可能になりました。また毎月のように新しいサービスが追加され、応用範囲は益々広がりつつあります。

さて、近年、いろいろなサービスで動画配信を行う機会も増えているのではないでしょうか。以前と比べるとだいぶ敷居が下がりましたが、それでも大きな障害となっているのがマルチデバイス対応です。PC、タブレット、スマートフォンなど様々なデバイスやOSが存在し、それぞれ対応している動画フォーマットも異なります。

現在、ワンソースですべてのデバイスに対応するのは技術的に極めて困難で、基本的にはデバイスに合わせてエンコード(トランスコード)を行う必要があります。エンコードは非常に時間と手間のかかる作業で、自動化が望まれております。しかしこれといった決定打はなく、なかなか苦労されている人も多いのではないでしょうか。

そんな中、2015年5月に AWS に動画配信における画期的なサービスが追加されました。Amazon Elastic Transcoder です。Elastic Transcoder はこの問題を一気に解決できる可能性を持っています。

Elastic Transcoder とはアップロードされた動画を様々な形式へとエンコードを行うサービスです。エンコードのワークフローは、トランスコーディングパイプにって定義され、ジョブの作成によって実行されます。また Lambda によって一連の処理を自動化することも可能です。つまり特定のS3のバケットにアップロードされた動画をそれぞれのデバイスに合わせて自動的にエンコードし、指定されたS3バケットに配置することが可能になるのです。

今回使用したAWSのサービスは以下の通りです。

システム構成

設定の流れ

設定の大きな流れは以下の通りとなります。(主要な画面だけを掲載しており、途中かなり省略しています。)

  1. まず動画格納(オリジナル動画、トランスコード後の動画)用のS3バケットを作成します。
  2. 次にトランスコーディング用のパイプラインを作成します。
    トランスコーディングパイプラインとはエンコード用のワークフローの構造で、動画の場所や、出力先などの定義を行います。トランスコーディングパイプラインは並列処理が可能で、例えば短い動画と長い動画を並列で処理させたり、解像度やストレージごとにトランスコードする設定などが可能です。
  3. さらに、Lambda でアップロードされた動画を自動トランスコードするためのスクリプト(JavaScript形式)を作成します。

    参考
    http://qiita.com/con_mame/items/b58a5e017e7c9ab2356b
  4. トランスコード終了後、管理者に自動的にメールで通知するために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円ほどとなります。単純コストで考えるとそれほど安くありませんが、トランスコードにかかる大きな手間を考えれば、トータルコスト的には非常に魅力的といえるのではないでしょうか。

関連記事:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください