Azure Media Service を使用して、災害時でもニーズに合わせ情報を配信できるライブストリーミングサービスを構築する

三連休に地元の長野県千曲市に戻った際、偶然にも台風19号に遭遇しました。
千曲川が氾濫するといったことは生まれて以来ありませんでしたが、上田市国分、長野市稲穂で堤防が決壊。これにより千曲川が氾濫し多くの被害が出ています。私自身も、近くの小学校に避難することになったのですが、避難所で最も住民の不安を煽るのは「情報の確実性」だと感じました。
一方で現在の千曲川のライブ映像は不明瞭で(下図サンプル)、水位が何メートルあるのか分かりません。また、千曲市のハザードマップをダウンロードする市役所のホームページはアクセス集中によりサーバーが落ちている、など情報を入手するためのインフラが全く整っていない、ということを身をもって感じました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/c23ba292-4279-f703-b5a6-709aa5ea883a.png)


幸運にも私の実家は無傷で済んだのですが、いざというときの情報収集網は確実で強固なものを確保しておきたいです。そのような背景もあり、今回は、災害時でも正確に情報を配信できる動画ライブストリーミングサービスを Azure Media Service を使って構築したいと思います。

# Azure Media Service をデプロイする
まず Live Streaming Service を使用するためには、Azure のリソースから、Azure Media Service をデプロイする必要があります。デプロイの方法は Microsoft Docs にきれいにまとまっているので、この URL の情報をペースにデプロイします。
Create an Azure Media Services account
https://docs.microsoft.com/en-us/azure/media-services/latest/create-account-cli-how-to
※この記事は CLI を使って構築するガイドですが、Azure Portal から感覚的に簡単に作成できます。

#ライブストリーミングするチャネルを作成する
Azure Media Service が作成できたら、ライブストリーミングするチャネルを構築します。チャネルを構築する前に Steaming の Endpoint を Running の状態にしておいた方があとあと楽です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/ef5aa9b8-1292-ce54-6a34-0419f9d83b1d.png)

チャネルを作成するには、Live Streaming からチャネルを作成で、新しいチャネルを作成します。チャネルは Path Through 型を作成するので、Custom で作成します。Setting 1 で Path Through を選択することで設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/bcda760f-ff2c-9596-57b2-2064459b725c.png)

#Live Encoder から　Media Service の Ingest URL へ ライブ動画を投げる
次は Live Encoder アプリで撮影するライブ動画を Media Service の Ingest URL へ投げることを実施します。
このアーキテクチャを理解するのにちょっと時間がかかりましたが、Azure Media Services を使用してライブ配信をする場合は以下のアーキテクチャのイメージを持っておくと分かりやすいです。Live Encoder はサードパーティ製アプリ、メディアを見るのは Azure Media Player を使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/6abf37b3-5982-cd3e-862b-dbfdf551dd3d.png)
参照 : https://azure.microsoft.com/ja-jp/solutions/architecture/digital-media-live-stream/

今回は Live Encoder として、Wirecast を使用します。Wirecast のページから無償版をダウロードしてください。(※30日間は無料で使えます)
http://www.telestream.net/wirecast/overview.htm

ダウンロードし、アプリを立ち上げ、配信の設定から Azure Media Service の アドレスを入力できるところを確認できます。アドレスは作成したチャネルにある「Ingest URL」を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/f94a6a8c-4bed-59e9-b0d1-d35acfe53d57.png)

これで Live Encoding する Wirecast と それを受け取りライブ配信する Azure Media Service がつながりました。

#実際にライブ配信をしてみる
Wirecast から「配信」をクリックするだけで Live Encording を Azure Media Service に送ることができます。ただし、ここで注意しなくてはいけないのは、チャネル側で配信を開始しないと配信されないということです。チャネル側で設定できていない場合は以下の様なエラーが Azure Media Player に出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/565b0927-22d4-fc60-475b-cd85d0eda8b6.png)

チャネルに戻り、「Go Live」を選択してライブ配信ができる状態に設定します。そのうえで、Wirecast から配信をすると、Media Service の Assets にどうやらそれっぽいものがでてくるので、それをクリックすると配信されているとこ、ならびに Media player で再生するための URL を獲得することができます。これでライブ配信は完了です。とても簡単ですね！30分もあればできると思います。

#モバイルから配信してみる
Wirecast はモバイルアプリも用意されています。Wirecast 自体は無償アプリですが、カスタムサーバーを設定するのは有償になります。今回はどうしてもモバイルから配信してみたかったので有償版をなくなく使っています。
アプリの設定画面で、配信先を先ほど Wirecast に Media Service の Ingest URL を入れたものと同じものを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/684bc713-8e6e-c044-0783-8d3282a6086b.png)

設定ができたら先ほど PC から実施したのと同じように配信します。先ほど PC から配信するときに、Media Service 側で　Endpoint の Run 並びに、チャネルの配信、アセットのPlay を確認したので、今回は特に追加の設定をせず配信ができるはずです。できない場合は PC から配信するのと同じように設定をもう一度実施してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/9921009f-f821-61ce-0c4a-d16219f2beb0.png)

時差は5秒から10秒くらいですが、これでデバイスとネット環境さえあれば動画を配信することができるライブストリーミングアプリが完成しました！スマホさえあれば災害時に必要な場所から見たい情報を配信させることが可能です。

#さいごに
Azure Media Service の特徴のひとつに、「ニーズに応じたスケーラブルな配信」があります。ユーザーの規模に合わせてスケーラブルに配信をスケールアップすることができますし、Contents Delivery Network 機能を使えば、遠い場所にもより確実に情報を届けることが可能です。今回の災害の様にいっきにアクセスが集中したり、必要な場所の動画を必要に応じて配信することが必要なシナリオではとても有効な解決手段だと思います。

#参考URL 
Media Services によるライブ ストリーム配信
https://docs.microsoft.com/ja-jp/azure/media-services/latest/stream-live-tutorial-with-api

デジタル メディアのライブ ストリーミング
https://azure.microsoft.com/ja-jp/solutions/architecture/digital-media-live-stream/

How to setup live streaming server using Azure Media Service in less than 30 mins
https://devblogs.microsoft.com/premier-developer/how-to-setup-live-streaming-server-using-azure-media-service-in-less-than-30-mins/