こんにちは!
今回は CloudFront を用いて動画をストリーミングしたい場合などに用いられるアーキテクチャやアプローチについて解説していきたいと思います。ぜひご活用ください!
動画を公開および再生するには、AWS の S3 バケットに動画をアップロードしてそれをユーザーに取得させるような方式があります。これに CloudFront を加えることで CDN を活用した動画配信が可能となります。
CloudFront を利用することは再生時間を短縮させることになりますので、動画を公開しているアプリケーションにとってなくてはならないものです。ただしそれだけではユーザーにストリーミングさせることにはなりません。
今回は S3 + CloudFront の構成にプラスアルファの処理を行うことで、動画コンテンツをストリーミングさせるその手法について解説していきたいと思います。
CloudFront の利点は、CDN を用いた配信によりコンテンツの配信を高速化してくれるところにあります。
なぜ高速化されるのかというと、エッジコンピューティングの技術によって地理的に一番近いサーバーがコンテンツを配信するからです。また他の利点として、オリジンサーバーへの負荷が軽減される、キャッシュしてくれるので何度もダウンロードされるコンテンツは配信が早くなる、といった点が挙げられます。
利用方法は簡単です。CloudFront のディストリビュージョンを作成するとき、オリジンを S3 バケットに指定することで、そのバケットにあるコンテンツは CDN を用いて配信されるようになります。
ここまでは一般的な AWS のアーキテクチャです。動画配信となれば一番コストパフォーマンスの優れた構成でもあります。ではこの構成に MediaConvert(正式には AWS Elemental MediaConvert) を加えてみましょう。
MediaConvert はアップロードされた動画コンテンツを HLS 形式にトランスコードするサービスです。これを利用することで圧縮版の動画コンテンツを作成することができます。
これだけではあまりメリットは感じられないので、MediaConvert を用いた場合とそうでない場合の比較をしてみました。以下の表をご覧ください。
S3 + CloudFront | S3 + CloudFront + MediaConvert | |
---|---|---|
配信方法 | 動画ファイル全体を再生前にデバイスに配信 | 動画ファイルをデバイスにストリーミング |
コスト | ユーザーが動画を最後までみなくてもコンテンツ全体をダウンロードしているため、余分なコストが発生する | 視聴した分のコストしか発生しない |
構成 | コンテンツは S3 に、配信は CloudFront を利用する | S3にコンテンツがアップロードされたときに、MediaConvert を利用する Lambda(もしくは Lambda@Edge) を用意しなければならない、配信には CloudFront を利用する |
上記の通り、MediaConvert がなければユーザー側の処理が重くなるうえ、コストも高くなってしまいます。なぜこのような差が生まれるのかというと、それは動画ファイルの形式が MediaConvert によって HLS 形式に変換されているからです。
HLS 形式がなぜ優れているのかは以下の引用を用いて説明させていただきます。
HLSの長所の1つは、インターネットに接続されたすべてのデバイスがHTTPをサポートしているので、特殊なサーバーを使用する必要があるストリーミングプロトコルに比べて実装が簡単であることです。もう1つの長所は、HLSストリームが再生を中断することなくネットワークの状態に応じて動画品質を上げたり下げたりすることができることです。これが、ユーザーが動画を視聴しているときに、途中で動画の品質が良くなったり悪くなったりする理由です。この機能のことを「アダプティブビットレート動画配信」または「アダプティブビットレートストリーミング」と呼びます。この機能がないと、ネットワークの状態が遅くなったときに動画をまったく再生できなくなる可能性があります。
引用元: HTTPライブストリーミング(HLS)とは?
HLS 形式はファイルを小さく分割して配信します。これにより動画が必要になる数秒前にコンテンツを取り込ませることで、コストパフォーマンスに優れたコンテンツ配信が可能となるわけです。また上記で説明されているアダプティブビットレートストリーミングによって、ユーザーエクスペリエンスも向上されます。
なおこのHLS 形式は Kinesis Video Streams でも利用されています。動画を扱うサービスとして充分にマネージドされたものになりますので、意図せずしてこちらでもストリーミング配信が可能となります。
CloudFront を用いて動画をストリーミングしたい場合には、HLS 形式を用いましょう。S3 にアップロードされるファイルはすべて HLS 形式にしてある環境下の場合は問題ありませんが、YouTube のようにユーザーのデバイスからいろんな形式のファイルがアップロードされる環境下では MediaConvert が必須となります。
CloudFront だけではストリーミングになっていない場合がございますので、動画配信の際には MediaConvert と合わせてアーキテクチャを構築してください。
HLS 形式だとコストパフォーマンスも向上するので、動画コンテンツの形式は HLS に統一したほうがおすすめです。まだの方はぜひ MediaConvert を用いて効率的な配信環境を構築していきましょう!
このブログでは、AWS の記事をどんどん公開しておりますので、ご興味のある方は他の記事もご覧いただければと思います。
AWS に関する開発は、お気軽にお問い合わせください。
スモールスタート開発支援、サーバーレス・NoSQLのことなら
ラーゲイトまでご相談ください
低コスト、サーバーレスの
モダナイズ開発をご検討なら
下請け対応可能
Sler企業様からの依頼も歓迎