Azure Media Serviceでライブストリーミングしてみる
これまでLinuxユーザーの観点でMicrosoft AzureのIaaS側を主に見てきましたが
少しブレイクしてMicrosoftのPaaSサービスについて少し見てみようかと思います。
この記事をご覧になられている方々はLinuxユーザーが多いと思いますが、「MicrosoftのPaaSサービス」と聞いてどのようなイメージを持っているでしょうか?
Platform as a Servicesなので、プラットフォームなんだよね、認証基盤?解析基盤?それともOSS的な何か?っとおぼろげなイメージを持たれている方々も少なくないと思いますし、昔からMicrosoft Azure(昔はWindows Azure)を見てきた方々は最新の動向もキャッチアップされていると思うので、cognitive servicesとかapplication Insights、webjobs、batchなど、いろいろあるけど、、という答えを持っていると思います。
今回はあえて、Linuxユーザーが、あまり知らない or あえて手を出さないであろう領域について例をあげて紹介をします。RHELやCentOS、Java/php/pythonなどのLinuxな方々に精通したキーワードはほとんど登場しませんが、知っておくことで今まで手を付けなかった技術の幅が広がるため、知って損はないと思います。
今回紹介するのはAzure Media Service、略してAMSと呼ばれるPaaSサービスです。
サービスの概要は一言で言うと、動画が再生/提供できるPaaSサービスです。
概要レベルの説明はオフィシャルサイトにも他の記事でも多くのってますので、他の記事を読みあさってもよいですが、Dynamic PackagingやIngest、DRM、Smooth Streamingなどなど、この世界の専門用語を知らないとさっぱりイメージできないものも多いので、まずは触ってできることからイメージするとよいかもしれません。
では早速触ります。
全体の流れは以下の流れです。
・Azure ポータルにログインしてAMSアカウントとchannelを作る。
・Wirecastをインストール
・channelを起動してパソコンに搭載されているカメラ動画をWirecastからストリーミングする
・Azure Media Playerからストリーミング動画を閲覧する
上記をやります。個々で細かい説明と補足を入れます。
ではまずAzureポータルからAzure Media Serviceアカウントを作り、channelと
呼ばれるものを作成しましょう。
ストレージアカウントが必要になりますが、ストリーミングのデータは複数個用意されますので、ここでは新規にストレージアカウントを作成して分けて管理します。冗長はLRSで用意しました。
メディアサービスアカウントとストレージアカウントの準備ができれば、リソースグループから今回用意したmediatest-rgをクリックします。右にメニュが流れきますが「ライブストリーミング」と記載されている項目をクリックし、新規でチャネルを作成します。
ライブストリーミングやチャネルという言葉が出てきたので補足します。
AMSは2つの利用形態があり、ライブストリーミングとVideo on Demand(VoD)があります。ライブストリーミングはその名の通り映像を取ると共にそのままストリームで動画を公開する時に使います。VoDはmpeg4やwmvなどの動画ファイルが事前に用意し、動画ファイルをAMSにアップロードして動画を公開する用途で利用します。次にチャネル(channel)ですが、今回試すライブストリーミングでは必要なものになります。チャネルはテレビでいうチャンネルに該当します。4チャンネルや8チャンネルなど、チャネルを用意することで1つのチャンネルができる、と考えるとしっくりします。(今回触れませんが、チャネルの中でprogramという名前の機能を用意する場合があります。programは番組表です。テレビでいう4チャンネルには朝09:00-10:00まで○○な番組を流す、という概念がありますが、ここでも同じです。チャネル内にprogramを用意することで、チャンネルと番組表を管理する、っと覚えるとよいでしょう)
上の画像ではチャネルが既に「実行中」になっています。チャネルは割り当て解除の停止になっていないと常に課金され続けますので注意が必要です。また、「取り込みURL」と記載されている個所に今回用意したチャネルの取り込みURLが新規で払い出されています。
rtmp://aklivechannel001-akmediatest001.channel.mediaservices.windows.net:1935/live/1d4371b723914732824eaaabebeead58
このURLが、AMS側で今回用意したチャネルの「ストリーミングを取り込むURL」になります。このURLへクライアントからRTMP通信して動画を流すことで、用意したチャネルへ動画が入っていきます。
チャネル名の行をクリックすると、より詳細な設定情報が見れますが、取り込みURLにはプライマリとセカンダリの2つのURLが払い出されます。これは大型のビデオカメラを想像してほしいのですが、1台のハードウェアが故障しても2台目のハードウェアで冗長する必要も出てくるためプライマリとセカンダリと別れています。今回のお試しライブでは特に気にする必要はありません。
次にストリーミングユニットの設定をしておきます。
上記画像の下にあるバーがデフォルトでは0になっていますので、1に設定します。
ストリーミングユニットとは、専用の送信容量を 200 Mbps 単位で購入できるほか、ダイナミックパッケージングと呼ばれる追加機能が利用できるようになります。ダイナミックパッケージングは、ライブで流している動画を設定した時間分VoDとして自動的にAMS側に動画コンテンツとして保管してくれ、様々なエンコード方式でマルチデバイスで再生できる状態にしてくれる、というとてもうれしい機能です。
Azureポータルでは最後にライブイベントの作成を行います。
チャネル名が表示されている行をクリックし、「ライブイベント」をクリックします。名前は適当につけてあげてください。
アーカイブウィンドウの個所はデフォルト8時間となっていますが、今回のお試しでは5分と設定しました。つまりライブで流している動画を5分間だけVoDとしてアーカイブしておく、という意味になります。このVoDファイルの暗号化はDRMにしてみましょう。Microsoftが提供する暗号化技術ですね。最後にOKボタンを押してライブイベントの作成が始まります。
では次にクライアントの準備に入ります。今回利用するクライアントはTelestream社が提供するwirecastです。
http://www.telestream.net/wirecast/overview.htm
上記サイトにあるDownload Free Trialから無料版をダウンロードしてインストールします。(Windows OSへインストールします)
Wirecastを起動し、クライアント側の設定をします。
左下に小さな窓が縦にいくつかありますが、左下の1番上のモニターの右にある「+」をクリックし、ビデオカメラっぽいアイコンから「integrated camera ショットの追加」をします。そうするとモニターの右側にPCの小型カメラから映っている映像が出てきますのでその画面をクリックし、真ん中にある大きなモニターの左側に表示させます。表示されたら2画面ある大型モニターの真下にある「→」ボタンをクリックし、右側のモニターに左側と同じ映像を表示させます。
上記のような状態になっていればOKです。
上記画面の左上に「ストリーム」というボタンを押します。出力先をプルダウンで指定するポップアップが出てきますので、プルダウンメニューから「Azure Media Service」を選択します。
上記画面では「アドレス」の個所に適当なURLが入っていますが、こちらを先ほど取得した「取り込みURL」に上書きしてOKボタンを押します。つまりWireCastで撮影した動画はAzure Media Serviceの取り込みURLへ送る、という設定です。エンコードの個所は任意で変更できます。希望ビットレートを設定したりエンコード方式や解像度を変更することもできるようです。今回はデフォルトのH.264 720p(プログレッシブ)で送信します。
OKボタンを押すとモニター画面に戻りますが、上記は設定完了のOKですので、もう一度左上にある「ストリーム」ボタンを押します。ストリームボタンのボタン枠が赤くなっていれば動画をAMSへストリーム配信している、という状態を表します。
ではAzure ポータルに戻ります。プレビューで映像が流れてきているかを確認しましょう。
ちゃんと流れてきていますね。1点注意ですが、プレビューはあくまでも映像が流れてきているかどうかを確認するだけにすぎません。映像がスムーズに流れているかどうかはプレビューではなく、上記画面の「再生URL」を閲覧して確認します。
※メディアの世界ではビットレートやフレームレートと呼ばれる画像をどの単位/粒度で細切れに送信するか、つまり映像がストレスなくスムーズに流れるかにこだわる領域があります。映像はつまるところ画像を順番に流し続けることで動く映像として見せているため、このビットレートやフレームレートを調整することで映像をストレスなく見せることができます。
では最後に上記画面の「再生URL」をコピーし、Azure Media Playerで確認してみましょう。
http://ampdemo.azureedge.net/azuremediaplayer.html
上記URLを開きます。
上記のような画面が表示されたら、右下にあるURLの個所を先ほどコピーした再生URLに上書きし、下段にある「Update Player」ボタンを押します。いかがでしょうか、ちゃんとPCカメラで撮っている映像が流れてきているでしょうか。
実際に撮影している映像とAzure Media Playerで流れて来る動画にはタイムラグがあります。(視聴者にはわかりませんが)
また、HTML5ですが、Codeのタグをクリックすることで自分の任意なサイトへHTML5の記載で張り付けることもできそうです。
せっかくなのでWireCastのストリームボタンを押してストリーミングを止めてみましょう。
先ほど5分で設定したライブイベントの行をクリックし、ストリーミング中と書かれたURLをコピーします。先ほど見たAzure Media PlayerのURLにコピーしたURLを張り付けてupdateしてみましょう。5分間だけですが、ライブでとった映像がちゃんとVoDとして再生されることが確認できます。
以上でAMSを使ったライブストリーミングの操作は終わりますが、VoDの流れも基本的にIngest部分(最初に映像を取り込んで送る)が異なるだけで取り込んだ後は同じです。ブラウザからは200MBを上限とした動画サイズしかアップロードできませんが、最大200GBまでの動画をAPIやAzure Media Service Explorerからアップロードすることができます。また、CDN(Akamai/EdgeCast)と連携して動画コンテンツをマルチリージョンでストレスなく流す、といったこともできます。
Azure Media Servies Expolorer
https://github.com/Azure/Azure-Media-Services-Explorer
※AMSが提供するAPIのほぼすべてが上記ツールから利用できます。
(このツールはMS純正製品ではないのでサポート対象外)
LinuxサーバーでRTMPサーバーを構築して、、CDNのエッジサーバーへpurgeするコマンド作って、、とかめんどくさいことをしなくとも、Microsoft Azureが提供するPaaSを上記のように利用するだけで、簡単に今まで避けてきた・できなかった・時間がかかったことができるようになります。便利ですので、是非お試しください。