AWS Elemental MediaLiveのアーカイブ出力機能でライブ配信と同時にファイルにも映像を書き出す

2018.03.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。AWS Elemental MediaLiveは出力形式としてHLSやSmoothStreamingの他、アーカイブ用の設定も選ぶことができます。出力は複数指定できますので、HLS形式の出力でライブ動画配信を行いながら、アーカイブ出力機能を利用してライブ配信した映像を同時にS3にファイルとしても保存する、といったことが容易に実現できます。今回はこのAWS Elemental MediaLiveのアーカイブ出力機能を使用してみたのでまとめみます。

AWS Elemental MediaLiveでアーカイブ出力するように設定する

まずはMediaPackageMediaStoreと連携させてライブ配信を行う手順と同じように、MediaLiveのInputならびにChannel設定を進めていきます。今回Input typeはRTMP(push)としました。

続いてChannel作成で「Channel and input details」の項目などを入力します。MediaLiveのChannelにはIAMロールを紐付けられますが、今回はマネージメントコンソールで作成できるデフォルトのMediaLiveAccessRoleを使用します。

Output groupsを設定する段階でアーカイブ出力の設定を行います。Output groupsの[Add]ボタンで出力設定を追加、種類はArchiveを選択して[Confirm]ボタンで進みます。

Archive groupの設定で、まずはArchive group destinationに出力先URLを入力します。出力先はS3のみで、またHLSなどの出力設定同様、出力先を2つ指定する必要があります。出力先となるS3のURLはs3ssl://[バケット名]/[パス+ベースファイル名]の形式で指定します。(パス+ベースファイル名となる点に注意しましょう。)今回はドキュメントにならい以下2つとしました。S3バケットは同じものを使用しています。

  • s3ssl://[アーカイブ出力先S3バケット]/medialive-archive/delivery/archive
  • s3ssl://[アーカイブ出力先S3バケット]/medialive-archive/backup/archive

Archive Settings欄ですが、Nameの項目にはわかりやすい名称を(この箇所はアーカイブの出力ファイル名には影響しません)、続いてAdditional settingsの項目を展開するとRollover Intervalという項目が表れます。このRollover Intervalは1つのアーカイブファイルあたりの時間(尺)を指定することができます。例えばデフォルトの300であれば300秒=5分で1つのアーカイブファイルとなります。今回は180秒=3分としてみました。

Archive Outputsの項目ではOutputを複数指定することで、ABR(adaptive bitrate)のように複数のビットレート、解像度のアーカイブを出力させることができます。今回は高画質のhiと低画質のlowを出力させてみます。Name modifierは通常の文字列_hiとか_lowの他、 MediaLiveで使用できる変数データ識別子が使用できます。今回は日付日時情報YYYYMMDDTHHMMSSと変換される$dt$を使用して、_$dt$_hi、_$dt$_lowとしました。

出力されるファイル名は、最終的にはarchive_YYYYMMDDTHHMM_[hiまたはlow].[000000].tsとなります。archiveはArchive group destinationでS3のパスとともに入力した値、[000000]は6桁のシーケンシャルカウンターがMediaLiveにより付与されます。

高解像度hiと低解像度lowの解像度の設定は以下のようにしました。その他、各Outputについて設定を行い、[Create channel]でチャンネルを作成します。

AWS Elemental MediaLiveで実際にアーカイブを出力してみる

Channelの準備ができたら、実際に配信ソフトウェアでMediaLiveに映像を流してみて、アーカイブが出力されるか確認してみます。まずはMediaLiveのChannelをStartさせRunning状態にし、続いて配信ソフトウェアから映像の配信を開始します。今回はRTMP StreamerというiOSアプリを使って、1つ目のInputにのみ映像を送信しました。

配信開始直後にS3バケットの中身を確認してもファイルは生成されていません。Rollover Intervalで指定した時間(今回は180秒=3分)が経過すると、以下のようにアーカイブファイルがS3に書き込まれました。アーカイブファイルは随時S3に書き込んでいるというわけではなく、1つのアーカイブファイルが作成、書き込まれた段階でS3で確認できる、という挙動のようです。

再度Rollover Intervalで指定した時間が経過すると、次のように6桁のシーケンシャルカウンターがインクリメントされたファイルが生成されて行きます。

アーカイブファイルはS3にある通常のオブジェクトと同様に扱われますので、もちろんマネージメントコンソールからダウンロードが可能です。ダウンロードしたファイル「archive_20180312T103957_hi.000000.ts」の情報をMediaInfoで確認すると以下のようになりました。

QuickTime Playerでの編集も可能でした。

まとめ

AWS Elemental MediaLiveでアーカイブ出力機能を使用してみました。設定を1つ加えるだけで簡単にライブ配信しているソースをアーカイブとしてファイル保存できるのは素晴らしいですね。HLSやSmoothStreamingなどライブ配信用の出力設定と別にアーカイブ出力が設定できる点、また出力先がS3であり容量管理なども不要な点もうれしいポイントです。アーカイブの書き出しもRollover Intervalで指定した時間が経過すると割りとすぐにS3にファイルが書き出されていたので、ライブ配信した映像ソースをすぐに編集など行いVOD用途で活用する、ということもできそうです。引き続き、AWS Elemental MediaLive含めたAWS Media Serviceの各機能を調査していきたいと思います。