AWS Elemental MediaLiveで番組編成っぽいことをしてみた
はじめに
清水です。AWS Elemental MediaLiveには(1) MP4ファイルをライブソースとして使用すること、また(2) 複数のInputをスイッチングすることが可能です。このスイッチングについては入力ソースの終わりをトリガにすることの他、指定した時刻にInputをスイッチさせることができます。これら2点を組み合わせると、指定した時刻にMP4ファイルをライブソースとしてライブを開始し、ライブソースが終了したら(もしくは指定の時刻になったら)別のMP4ファイルのライブソースに自動切り替えする、というTV番組編成のような操作が可能です。本エントリではこちらを試したのでまとめてみます。
なお、上記2点のAWS Elemental MediaLiveの機能については、2017/11のサービスリリース当時からあったものではなく、アップデートで追加された機能となります。詳細は下記エントリをご参照ください。
- AWS Elemental MediaLiveでMP4ファイルからライブ配信してみた | DevelopersIO
- [アップデート] AWS Elemental MediaLiveでInputのスイッチングが可能になりました #reinvent #mediaservices | DevelopersIO
AWS Elemental MediaLiveでMP4ファイルベースの番組編成をしてみる
やってみたことは以下の具合です。
- 番組開始時間を13:00と仮定
- 番組開始の5分前、12:55からオープニング動画を配信
- オープニング動画は「Opening.mp4」というMP4ファイル
- 「まもなく配信がはじまります」のテロップ付き
- 尺は30秒ちょっとなので5分間ループしておく
- 13:00に番組開始〜本編その1を配信
- 「Program1.mp4」というMP4ファイル
- 尺は5分ちょっと。1回きりの再生(ループしない)想定
- 本編その1が終わったあと、本編と直接関係のない番外編動画を配信
- 「Program2.mp4」というMP4ファイル
- 尺は3分ちょっと。1回きりの再生(ループしない)想定
- 番外編動画が終わったあと、本編その2を配信
- 「Program3.mp4」というMP4ファイル
- 尺は30分ほど。1回きりの再生(ループしない)想定
- 本編の番組が終了したあと、エンディング動画を配信
- エンディング動画は「Ending.mp4」というMP4ファイル
- 「配信は終了しました」のテロップ付き
- 尺は30秒ちょっとで、MediaLiveを停止させるまでループしておく
MP4ファイルをS3にアップロード
まずはライブソースとして使用するMP4ファイルをS3にアップロードします。MediaLiveでMP4ファイルをライブソース(インプット)とする場合は冗長構成のため2箇所にファイルをアップロードすることが推奨されていますが、今回は検証のためs3://mybucket/medialive/programming
フォルダ下の1箇所としました。(後述しますが検証ということでシングルパイプラインオプションを使用する想定です。)
MediaLiveのInputの作成
続いてMediaLiveのInputを作成します。まずはOpening.mp4用のInputです。Input nameにMP-Opening-Input
と入力、Input typeをMP4
とします。Input source AにOpening.mp4のS3パス情報を入力します。s3://mybucket/medialive/programming/Opening.mp4
という具合ですね。検証のためシングルパイプラインオプションを使用しますので、Input Source Bは空欄のままInputをCreateします。
残りの4つのmp4ファイル、Program1.mp4、Program2.mp4、Program3.mp4、Ending.mp4についても同様にInputを作成します。以下のように複数のMP-*-Input
が並びます。
MediaLiveのChannelの作成
MediaLiveのChannelを作成します。ここでは作成時のポイントをまとめておきます。まず今回は検証用途でシングルパイプラインとするため、Channel classをSINGLE_PIPELINE
としています。Input specificationsは使用するMP4ファイルのビットレート等の最高値にあわせて設定しておきます。
続いて、特にポイントとなるInput attachments設定です。ここで使用する5つのMP4ぶん、5つのInputを作成していますが、それそれのInput attachmentsを設定する必要があります。まずOpening.mp4用のInput attachments、InputMP-Opening-Input
を選択してConfirm
します。
Opening.mp4はファイルをループさせる想定です。(mp4ファイル自体は30秒ほどの尺だが、10分ループさせる。)General input settingsの画面で、Source End Behavior
をデフォルトのCONTINUE
からLOOP
に変更します。
同様に、Program1.mp4用のInput attachmentsを設定します。InputMP-Program1-Inputを選択してConfirm、こちらはループ再生させず1回きりの再生となるので、General input settingsの画面で、Source End Behavior
はデフォルトのCONTINUE
のままです。
Program2.mp4、Program3.mp4用のInput attachmentsも同様に作成します。Ending.mp4用のInput attachmentsはOpening.mp4と同様にループ再生させたいので、Source End Behavior
をデフォルトのCONTINUE
からLOOP
に変更します。
Input attachments設定は以上です。その他Output gropusなどを適切に設定し、[Create channel]でChannelを作成します。
MediaLiveのChannelスケジュールの作成
作成したChannelのScheduleタブを開き、Createボタンからスケジュールを作成していきます。まずはオープニング動画「Opening.mp4」です、12:55から配信する想定ですが、MediaLiveのChannelの開始やライブ配信視聴用ページの更新なども考慮して、12:45からオープニング動画を配信するように設定しておきます。Start typeをFixed
に設定して、Dateを適切に指定、つぎに開始時刻をUTCで(つまり12:45なので03:45で)指定します。Action typeでInput Switch
を選択して、Input Switchの項目でOpneing用のMP-Opening-Input
を選択してCreateします。
続いて本編その1「Program1.mp4」用のスケジュールを作成します。Openinigと同様、Start typeをFixed
として、時刻13:00(=UTCで04:00)を指定します。
このあとは、時刻指定ではなく、本編その1「Program1.mp4」が終われば番外編「Program2.mp4」、それが終われば本編その2「Program3.mp4」、そして「Ending」と続くようにします。Scheduleタブで[Switch to timeline view]に変更します。Program1に続けてProgram2をスケジュールするため、Create follow action from "SwitchProgram1"
のリンクをクリックします。
Start typeとしてFollow
が選択されており、またReference action nameでSwitchProgram1
、Follow point END
が指定されています。Action typeでInput Swtich
、Input SwitchでMP-Program2-Input
を選択しましょう。
その後、Program3、Endのスケジュールも同様にCreate follow action from
のリンクから作成していきます。最終的にスケジュールは以下のようになります。
MediaLiveで配信開始
スケジュール作成後、オーニング動画「Opening.mp4」にスイッチされる設定の12:45を過ぎた段階でMediaLiveのChannelをStartさせます。するとスイッチされたオーニング動画「Opening.mp4」がループ再生されるはずです。続いて13:00になった段階で本編動画その1「Program1.mp4」にスイッチされ配信されます。以降、スケジュール通りにエンディング動画「Ending.mp4」まで配信され、エンディング動画はMediaLiveのChannel終了までループ再生されます。
まとめ
ブロードキャスト級のライブ動画処理サービスであるAWS Elemental MediaLiveのMP4ファイルインプット機能と複数Inputのスイッチング機能を組み合わせて、番組編成っぽいことをやってみました。マネジメントコンソールからポチポチ進めていくだけで配信内容がスケジュールすることができます!また今回はMP4ファイルのみで編成してみましたが、RTMP inputなどのライブフィードソースもスイッチング先として設定可能です。例えば決まった時間帯のみはライブフィードでの配信、残りの時間はMP4ファイルからの配信を行う、といったことも容易にできそうですね。(AWSドキュメントのtypeical-use-casesもご参照ください。)引き続き、AWS Elemental MediaLiveはじめとしたAWS Media Servicesの多様な機能に注目していきたいと思います。