AWS Elemental MediaLiveのスケジュール機能を使ってみた(コンソール版)

来週発表予定のApple Siliconとアメリカの選挙結果が気になるstreampackのfadoです。いつもクレしんで和んでいましたが一昨日からABC Newsから目が離せません。最近、`AWS Elemental MediaLive`を使っていくうちに、スケジュール機能に触る機会が多くなりました。スケジュールといっても設定できるアクションがたくさんあります。一時停止、静的イメージのアクティブ化、入力スイッチなどがその一部です。この記事で取り上げたいのは利用頻度の高いであろう5つのアクションに絞ってAWSコンソール上で設定しながら簡単に説明していきます。

#注意事項
- `AWS Elemental MediaLive`(以下 `MediaLive`)に対する知見がある方を対象とします。
- `MediaLive`のInputソースはMP4にしています。尚、視聴の一連として`AWS Elemental MediaStore`と`Amazon CloudFront`を組み合わせて設定していますが設定等はスコープ以外であるため、割愛させて頂きます。
- スケジュールの検証が目的のため、`Channel Class`は冗長化にせず`Single_Pipeline`に設定しています
- MP4フリー素材を利用しています。
 - [Big Buck Bunny](http://bbb3d.renderfarming.net/download.html "Big Buck Bunny")
 - [Caminandes](http://www.caminandes.com/ "Caminandes")

#スケジュール内のアクションのタイプ
- 現在チャネルに送出されている入力を切り替える
- 静的イメージオーバーレイをチャネルに挿入する
- 実行中のチャネルに ID3 メタデータを挿入する
- チャネルのパイプラインを一時停止する、または一時停止を解除するなど

#スケジュールの制約
- アクションの開始時刻は15秒以上、14日以下である必要があります。
- チャネルが停止中でも実行中でも設定が可能です。
- PauseにしたあとUnpause（アクション自体はPause）しない限り、チャネルが停止するまでずっとPause状態になりますのでご注意下さい。
- **「Start type」**がImmediateであっても実際にチャネルに反映されるのは数秒かかります。

##スケジュールを操作する方法
- AWSコンソール
- AWS CLI
- AWS SDK

##AWSコンソール
`MediaLive`コンソール -> 設定済みチャネルの**「Schedule」** -> **「Create」**で設定できます。

![スクリーンショット 2020-11-05 18.10.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/5b7ac3ef-d61a-0810-42a3-3c30d208a85c.png)

###1. Pause (一時停止)
**「Create」**をクリックすると下記画面が出てくるので記入して下にある**「Create」**ボタンで作成します。即時に反映させるためにスケジュール設定の**「Start type」**はImmediateにします。
![スクリーンショット 2020-11-05 19.12.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/6febab6a-18dc-9981-78ee-e4802a91affc.png)

作成済みスケジュールです。
![スクリーンショット 2020-11-05 19.13.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/c40f377b-13aa-9581-7d23-4c9fac0712f2.png)

`MediaLive`の**「Alerts」**で確認するとPipelineが一時停止されたことが分かります。
![スクリーンショット 2020-11-05 19.14.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/2311d4a3-09f2-b051-f910-a2c6ff173090.png)

スケジュールのアクションがトリガーされて10秒過ぎに視聴している動画が止まったことが確認できました（視聴プロトコルはHLSなので遅延があるのは仕方がありません）
![スクリーンショット 2020-11-05 19.14.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/0a2df102-65c8-55ba-1a88-0bdd35627576.png)
＊スクリーンショートなので動画が止まったのかどうか確認しづらいと思いますがご容赦下さい。

###2. Unpause (一時停止解除)
一時停止解除は再度Pauseアクションをかけることで実現可能です。上記のPauseアクションと反対に、Pipelineを**「UNPAUSE PIPELINE」**に設定して下さい。
![スクリーンショット 2020-11-05 19.18.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/e3e02f3a-4730-af7c-1910-9d8c3a84e378.png)

このように**「Schedule actions」**でPauseもUnpauseもTypeが同じなのでNameで区別させた方が分かりやすいです。
![スクリーンショット 2020-11-05 19.18.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/5869bc17-f932-11f0-4763-f62e708e9505.png)

`MediaLive`の**「Alerts」**で確認すると先ほどのPauseアラートが復旧したことが分かります。**Active alerts Pipeline 0**も緑色に変わりました。
![スクリーンショット 2020-1
1-05 19.18.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/0e7e4948-e53b-34eb-84e1-71b3372ed1d2.png)

### 3. Input Switch (入力スイッチ)
Input Switchアクションの場合、現在アタッチされているInputと別に切り替えるためのInputを用意しないといけません。
![スクリーンショット 2020-11-05 22.06.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/cbed6ad9-d012-e3aa-2a3c-265f8e16ab96.png)

**「Start type」**をFixedにし、アクションの開始時間を指定したらどうなるか見てみましょう。注意すべき点は時刻がUTCであることです。**「Input attachment」**は切り替わる動画にして下さい。
![スクリーンショット 2020-11-05 19.26.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/780f9de8-2458-8eb0-c26a-85cf2c08bf41.png)

**「Schedule actions」**のStartでアクションがトリガーとなる開始時間を確認できます。
![スクリーンショット 2020-11-05 19.26.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/5a364973-4dd8-5380-e517-f6d102f8a03d.png)

指定した時間にInputがBig Buck Bunny動画からCaminandes動画に切り替わったことが確認できました。
![スクリーンショット 2020-11-05 19.30.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/f32f4516-1026-480f-3c96-971a29c3fea1.png)

###4. Static Image Activate (静的イメージのアクティブ化)
ロゴと言ったビデオの画像オーバーレイを挿入することもできます。入力が入ると同時にオーバーレイをかけてみます。
チャネルが停止状態でスケジュールを設定します。URLはs3ssl,http、httpsで始まるスキームで使用できます。
![スクリーンショット 2020-11-05 20.03.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/90428457-4606-906b-3da9-45c1453dd1d1.png)

**「Schedule actions」**で確認します。
![スクリーンショット 2020-11-05 20.04.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/481844cb-223a-21cb-19fb-80d083f02e74.png)

チャネルを起動してストリームの入力とともに画像（ロゴ）がオーバーレイされました。
![スクリーンショット 2020-11-05 21.21.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/9032674b-0f29-3614-de60-9ceb4adf8e57.png)

オーバーレイの詳細な設定も用意されています。必要に応じて設定して下さい。下記は今回で適用した値となります。
![スクリーンショット 2020-11-06 2.22.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/7ef0edde-9f70-c87f-0c9e-d57420b253df.png)

####よく使う設定
- Opacity = 画像の不透明度を設定する。Oは画像が透明、100は不透明。デフォルトは100
- HeightとWidth = 画像の幅と高さをピクセル単位で設定する。入力なしの場合、値は指定したソース画像の幅と高さとなります。
- Duration = 画像が消えるまでの時間（単位：ms）０または入力なしの場合は明示的に削除されるまでオーバーレイされます。下記のStatic Image Deactivateで明示的に削除することができます。

###5. Static Image Deactivate (静的イメージの非アクティブ化)
もしロゴやイメージを削除したい時はStatic Image Deactivateを使いましょう。計画的ではなく即時反映させたい場合**「Start type」**をImmediateにして下さい。設定は簡単です。
![スクリーンショット 2020-11-05 21.23.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/d82b17de-aee5-ef8b-9eac-c1700f0acd05.png)
**「Schedule actions」**で問題なく作成されたことを確認できます。
![スクリーンショット 2020-11-05 21.23.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/1f5a3c0b-4c14-ec29-a60f-163c9823ded5.png)

指定した時間にロゴが消えたことを確認できました。
![スクリーンショット 2020-11-05 21.25.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/edbe8afc-e9aa-65d3-6a64-77fb17b23805.png)

##スケジュールの表示
作成したスケジュールをタイムラインビューで確認することもできます。デフォルトではリストビューで表示されます。**「Schedule actions」**で**「Switch to timeline view」**ボタンを選択し、ビューを切り替えます。
![スクリーンショット 2020-11-06 3.01.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/b1d663ab-f836-3d3f-3cbb-6b2bf0318302.png)

**「Switch to list view」**ボタンでリストビューに戻れます。
![スクリーンショット 2020-11-06 1.28.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/ecff20d6-d0f4-744f-2010-a9202a77f1c6.png)

#まとめ
このように`MediaLive`のスケジュール機能を使うと柔軟に動画やストリームの上に画像をオーバーレイしたり、用途に合わせてInputを切り替えたりすることもできます。もちろん上記以外にもスケジュールで制御できるアクションがまだあります。知りたい方は参考文献を是非お読み下さい。ただしAWSコンソールで楽に、スピーディーに操作ができるのはスケジュールを設定したいチャネルが一つか数個しかない場合のみです。一気に反映させたい場合はチャネルが数多く存在すると制御しきれなくなります。その場合は`AWS CLI`での操作と`AWS Lambda`と組み合わせた`AWS SDK`での操作で対応します。機会があれば`AWS CLI`と`AWS SDK`での制御も解説してみたいと思います。今回は簡単な記事になりますが誰かのためになってくれるとすごく嬉しいです。それでは！

#参考文献
https://docs.aws.amazon.com/ja_jp/medialive/latest/ug/x-actions-in-schedule.html
https://docs.aws.amazon.com/ja_jp/medialive/latest/ug/schedule-fields-for-pause.html
https://docs.aws.amazon.com/ja_jp/medialive/latest/ug/schedule-fields-for-unpause.html
https://docs.aws.amazon.com/ja_jp/medialive/latest/ug/working-with-image-overlay.html