AWSソリューション実装「Live Streaming on AWS」でライブ動画配信をしてみた
はじめに
清水です。AWSのテクニカルリファレンス実装であるAWS Solutions Library/AWSソリューション実装の「Live Streaming on AWS」を使ってライブ動画配信をしてみました。
このAWSソリューション実装ではCloudFormationのテンプレートが用意されており、デプロイするだけで検証済みのテクニカルリファレンス実装が構築可能です。さらにこの「Live Streaming on AWS」の(個人的に)興味深い点は、デモ用の再生プレイヤーとその配信ページまでがこのソリューション実装に含まれている点です。映像を打ち上げるストリーミングソフトウェアやライブエンコーダを用意するだけで、Webブラウザでの視聴確認まで行うことができます。(個人的にこのデモ用再生プレイヤーがあることに気がつき、実際にソリューション実装を試しているという具合です。)
本エントリではこのソリューション実装「Live Streaming on AWS」のCloudFromationテンプレートを使用してAWSインフラをデプロイ、ライブ動画配信を行いデモプレイヤーで視聴確認を行ってみたのでまとめてみます。
2つの「Live Streaming on AWS」ソリューション実装
本題のインフラデプロイ、動画配信確認に移る前に、このソリューション実装について2つの種類があることを確認しておきましょう。1つ目はそのまま「Live Streaming on AWS (AWSライブストリーミング)」、もう1つは「Live Streaming on AWS with MediaStore (MediaStoreを使用したAWSライブストリーミング)」です。前者「Live Streaming on AWS」はフル機能のカスタマイズ可能なソリューションとされており、後者「Live Streaming on AWS with MediaStore」は基本的なツールとリソースの利用、とされています。
以下のAWSソリューション実装の該当ページでは、左右にそれぞれの説明が記載されていますね。
わかりやすい違いとしては名称の通り、後者「Live Streaming on AWS with MediaStore」ではAWS Elemental MediaStoreをライブオリジンに使用するのに対し、前者「Live Streaming on AWS」はAWS Elemental MediaPackageをライブオリジンに使用します。そのほか「with MediaStore」でのみ現状はAWS Elemental Linkをサポートしている、「Live Streaming on AWS」のみデプロイ内容にデモ用再生プレイヤーが含まれる、などなど違いは多くあります。後述しますが、「Live Streaming on AWS」の歴史的経緯もあり、2つの「Live Streaming on AWS」ソリューション実装が存在しているのかな、などと推測しています。
そして本エントリで扱うのは「Live Streaming on AWS」のほうになります。「Live Streaming on AWS with MediaStore」については、AWS Elemental Linkを使ってライブ動画配信を行ったエントリがありますのであわせてご確認ください。
AWSソリューション実装「Live Streaming on AWS」でライブ動画配信をしてみた
それでは実際にAWSソリューション実装「Live Streaming on AWS」で提供されているCloudFormationテンプレートを使ってインフラを構築、ライブ動画配信を行ってみたいと思います。
実際にデプロイされるAWSリソースについてはソリューション実装のページや実装ガイドなどに構成図が記載されています。またデプロイの際のパラメータの参考に、実装ガイドについては簡単にでも目を通しておくのが良いかと思います。
AWSソリューション実装「Live Streaming on AWS」のデプロイ
デプロイは先ほどのページ、Live Streaming | AWS Solutionsから行います。ページをスクロールしていき、「Live Streaming on AWS」のタブを選択しましょう。(ページ上部の説明とこのタブ、位置関係がテレコになっているので注意しましょう。)[Launch in the AWS Console]ボタンで進めます。
AWSマネジメントコンソールのCloudFromationページ、Stack作成画面に遷移します。
右上のリージョン表示を確認し、意図しないリージョンであればここで変更します。今回はバージニアリージョン(N.Virginia/us-east-1)となっていたので東京リージョン(Tokyo/ap-northeast-1)に変更しました。
意図したリージョンに変更できたら、Stackを作成するテンプレートの内容を確認して[Next]で進みます。
次のページでStack nameとParametersを設定していきます。Stack nameはデフォルトの「LiveStreaming」のまま進めました。Parametersについてはドキュメント(実装ガイド)で詳細を確認しながら進めましょう。今回は以下のようにしました。
- LIVE STREAM SOURCE
- Source Input Type
RTMP_PUSH
を選択しました- 映像を打ち上げるストリーミングソフトウェアなどに合わせる必要があります。今回はZixi ONAIRを使ってRTMPでIngestする想定です
- Source Input Type
- URL_PULL and RTMP_PULL CONFIGURATION
- 上記の通り、LIVE STREAM SOURCEで
RTMP_PUSH
を選択しているので具体的な設定は必要ない認識です。デフォルトの設定値のまま進めます
- 上記の通り、LIVE STREAM SOURCEで
- RTP_PUSH / RTMP_PUSH CONFIGURATION
- Input CIDR Block
- RTMPでIngestする際の入力元となるIPアドレスを許可するよう、CIDRで設定します。今回は検証目的のため、
0.0.0.0/0
を指定しました
- RTMPでIngestする際の入力元となるIPアドレスを許可するよう、CIDRで設定します。今回は検証目的のため、
- Input CIDR Block
- MEDIACONNECT CONFIGURATION
- こちらも、LIVE STREAM SOURCEで
RTMP_PUSH
を指定していることから、具体的な設定は行いません
- こちらも、LIVE STREAM SOURCEで
- ENCODING OPTIONS
- Encoding Profile
- デフォルトの
HD-720p
のままとしました
- デフォルトの
- Start MediaLive Channel
false
に変更して、MediaLiveのChannelのStartを手動で行うこととしました
- Encoding Profile
各項目を選択/入力したら[Next]で進みます。
次のページ、「Configure stack options」の項目についてはそのまま[Next]で進みます。最後の「Review」で内容を確認し、最後にIAMリソース作成についての承認のチェックを入れ、[Create stack]でスタックを作成します。
スタック詳細画面に遷移しますので、作成状況を見守ります。
およそ5分ほどでCREATE_COMPLETEになり、Stackの作成が完了しました。(ソリューション実装のページには見積もりデプロイ時間として20分という記載がありましたが、だいぶ短時間でデプロイが完了した印象です。CloudFrontのデプロイ時間が高速になっているからかもしれませんね。)
作成されたリソースをざっと確認してみる
AWSインフラのデプロイが完了しました。実際にライブ動画配信を行って視聴確認してみる前に、作成されたリソースについてざっと確認してみましょう。マネジメントコンソールのCloudFormationページ、作成したStackの詳細画面のResourcesタブをみてみます。種別が分かりやすくなるよう、Type列でソートしてみました。
なかなかたくさんあります!が、基本的には実装ガイドにもあった構成図(ソリューションのアーキテクチャ)の要素になります。UUIDについてはAWS Elemental MediaPackageのCDN認証の際に使用しているかと推測します。
ライブ配信して視聴確認してみる
それでは実際に、この「Live Streaming on AWS」のCloudFormationテンプレートで構築したAWSインフラ環境を使ったライブ配信を行い、視聴できることを確認してみます。
まずはMediaLiveのChannelの状態をStartさせる必要があります。先ほどのCloudFormationのStack詳細画面、Resources タブでMediaLiveのリソースを控えておきましょう。("medialive"でフィルタしています。)今回対象となるのは3961
ではじまるChannelですね。
マネジメントコンソールのMediaLiveのページに遷移し、Channelのページを開きます。先ほど確認したChannel ID 3961
ではじまるChannelリソースがあるので、これをStartさせます。
続いて、映像を打ち上げるストリーミングソフトウェア側の設定です。こちらは使用するストリーミングソフトウェアに依存するため詳細は割愛しますが、Stack詳細画面、OutputsのタブにあるMediaLivePrimaryEndpoint
の値を設定します。なお、この「Live Streaming on AWS」では冗長構成をとってSecondaryのInputも使用可能ですが、今回は検証目的としてPrimaryのみを使用します。
映像の打ち上げを開始したら、この「Live Streaming on AWS」のデモプレイヤーで確認してみましょう。上記のStack OutputsのDemoConsoleの値のURLにアクセスししてみます。
まずは[Preview HLS]ボタンを押してみましょう。「STREAM」と記載されていた箇所が「HLS」に変わり、その隣にプレイリストファイルへのURLが記載され、ライブ動画の再生が始まります。なお、プレイリストファイル等動画自体を配信するCloudFrontディストリビューションと、デモプレイヤーの配信ページのあるCloudFrontディストリビューションが異なることが、cloudfront.netのドメイン名で確認できます。
[Preview DASH]、[Preview CMAF]のボタンでも、それぞれ「STREAM」と記載されていた場所が変わり、プレイリストファイルへのURLが記載されてライブ配信がはじまります。(以下はDASHを選択した例です。)
なお私の再生環境(macOS Catalina、Google Chrome)ではHLS、DASH、CMAFいずれでも再生が可能でした。
デモ用再生プレイヤーについて確認してみる
実際に「Live Streaming on AWS」のCloudFormationテンプレートで構築したAWSインフラ環境でのライブ動画配信の視聴確認できました。ついでにこのデモ用再生プレイヤーについて、Google Chromeデベロッパーツールなどを使いながら確認してみたいと思います。
まずはHLSのプレビュー、ボタンを押した後にhls.min.js
を読み込んでいます。hls.jsを使っているようですね。
続いてDASHです。こちらはボタン押下後にdash.all.min.js
が読み込まれていました。dash.jsを使っているようです。
最後にCMAFです。こちらはHLSと同じくhsl.min.js
を読み込んでおりhls.jsを使っているようです。
簡単ですが読み込んでいるJavaScriptファイルで確認していくと、HLSとCMAFではhls.js、DASHではdash.jsを利用ということになります。これらライブラリを読み込んだ後に内部でどのようなカスタマイズなどをしているかまでは追えていませんが、再生プレイヤーとして使用しているライブラリの参考にはなりそうです。
- GitHub - video-dev/hls.js: JavaScript HLS client using Media Source Extension
- GitHub - Dash-Industry-Forum/dash.js: A reference client implementation for the playback of MPEG DASH via Javascript and compliant browsers.
また、デモ用再生プレイヤーがある配信ページのソースコードも確認してみました。参考にしやすいかたちでコードがまとめられていればいいな、と思っていたのですが、私にはここから情報を辿るのは困難そうでした。
AWSソリューション実装「Live Streaming on AWS」の歴史を確認してみる
こちらの「Live Streaming on AWS」、冒頭にも記載した通り、個人的にはデモ用再生プレイヤーがソリューション実装に含まれていた点が確認する大きなモチベーションになっていました。この興味ついでに、いつごろからこのデモ用再生プレイヤーが含まれていたのかを追ってみます。(最近アップデートされたのかな?という確認も込めて。)
ソリューション実装のページから、ソースコードを管理しているGitHubのページを開きます。
コミット履歴をみてみると、なんとこのソリューション実装自体は2016年11月から存在していたことがわかりました。
これには個人的にけっこうびっくりです。2016年11月といえば、当時はまだAWS Media Serivcesもリリースされていないタイミングです。(AWS Media Servicesのリリースは2017年11月。)ドキュメントである実装ガイドの「ドキュメントの改訂」にもやはり2016年11月に初回リリースと記載があります。
当時のこの改訂履歴の内容とソースコードの内容などから、2016年11月の初回リリース当時は、Elemental LiveやElemental Deltaなどを使った構成であり、2018年9月のVersion 2.0.0からAWS Elemental MediaLiveなど、AWS Media Servicesを用いた構成に変更されたようです。
そして個人的に気になっていたデモプレイヤーについてですが、Version 2.0.0の段階では含まれていたように見受けられました。(割と昔から含まれていたのですね。)
なお、現在の「Live Streaming on AWS」のVersionは2.4.0、そしてもうひとつのソリューション実装である「Live Streaming on AWS with MediaStore」は現在Version 1.2.0で、こちらは2020年5月が初回リリースとなっています。「Live Streaming on AWS」と比べると「with MediaStore」はあまり歴史がないようにも見えますが、直後に大きな特徴であるAWS Elemental Linkのサポートが追加されています。「with MediaStore」のほうはよりシンプルにライブ動画配信を試してみたい、というところがスタートになっているのかな?などと思いました。
MediaStoreを使用したAWSでのライブストリーミング 実装ガイド
まとめ
AWSソリューション実装「Live Streaming on AWS」で提供されているCloudFormationテンプレートを使ってAWSインフラをデプロイ、ライブ動画配信をデモ用再生プレイヤーで確認してみました。以前からこの「Live Streaming on AWS」についての存在自体は知っていたのですが、先日斜め読みしたCloudFrontのホワイトペーパー「Amazon CloudFront for media」にもAWSソリューション実装について記載があったことから改めて確認をしたところ、デモ用再生プレイヤーの存在に気がつき、実際にライブ配信をしてみて確認してみた、という流れです。そして改めてエントリにまとめるにあたり気がついたのは、本編でもまとめたこのソリューション実装の歴史です。まさか2016年からの流れを汲んでいるとは思っていませんでした。そしてここ最近でも新機能を取り入れたりと細かにアップデートしているようですね。(詳細はGitHubのChange Logに記載があります。)このソリューション実装から目的に合わせてカスタマイズしていったり、また直接リソースのデプロイに使用しなくてもリソース作成や設定の参考になる情報は多そうかなぁと思いました。