さて 前回の投稿の通り、Startup Task の使い方もわかったので、実際にやってみようと思います。
今回はせっかく Silverlight Firestarter で発表もあった Azure での IIS Media Services 4.0 でも試してみようと思います。
※手順的にまだだいぶイレギュラーなところもあります。。。あくまで参考程度に。
WebRole の作成と Startup Task の設定
Visual Studio 2010 で 新規に ASP.NET WebRole を作ります。
※なんか今 Windows Azure v1.3 SDK Issues とかでMVC2なWebRole作るとデプロイでずっとBusyとかいう問題がありそうなんですけど、どうなんでしょ…
後でVMに接続できるように、リモート接続の設定しておきます。
※リモート接続の設定方法は 【Azure for ITPro】Widnows Azure にリモートデスクトップで入り込むための手順 あたりを参考に。
サービス定義ファイル ( ServiceDefinition.csdef )に下記要素を追加します。
今回はインストールに管理者特権が必要なのでelevatedを指定しています。
<Startup> <Task commandLine="SetupIISMediaSerices.cmd" taskType="simple" executionContext="elevated"/> </Startup>
また ServiceConfiguration.csfg 内の osFamily も忘れずに 2 にします。(たぶん Guest OS 1.8 でも動作はすると思います。。。)
SetupIISMediaServices.cmd ファイルを作成し、プロジェクトに追加、出力ディレクトリにコピーを”常にコピーする”にします
WebPICmdLine ツールを こちら からダウンロードし、展開します。
プロジェクトにAssetsフォルダを(サンプルにならって)追加し、WebPICmdLine ツールをコピーします。また、この4ファイルのプロパティで同様に出力ディレクトリにコピーを常にコピーするにしておきます。
SetupIISMediaServices.cmd を以下のように編集します。
@echo off sc config wuauserv start= demand "%~dp0Assets\WebPICmdLine.exe" /Products: MediaServices /log:MediaServiceslog.txt
%~dp0 は、バッチの実行時ディレクトリパスが入る変数です。(最後に \ が付与されてます)
sc ~の行は何をしているかというと、WebPICmdLine ツールがWindows Update サービスを使うので、このサービスの起動方法を “無効” から “手動” に変えています。( Windows Azure の Guest OS は既定で無効になってる)
で、WebPICmdLine ツールを使って MediaServices (IIS Media Services 4.0 のパッケージ名)を指定してインストールを行います。
※ほんとは64ビット環境かどうかを見たり、sn.exe を使ってアセンブリ署名のチェックをスキップしたりしないといけない?ようですが、割愛してます。
(アセンブリのチェックをスキップしたらデプロイ時間が短くなる気はする…がsn.exeの再配布って問題ないんでしょうか…謎)
※開発環境だと %~dp0 は以下のような感じ
C:\<中略>\WindowsAzureProject1\WindowsAzureProject1\bin\Release\WindowsAzureProject1.csx\roles\WebRole1\approot\bin\
以上で Startup Task + WebPI の設定は終了です。
次からは IIS Media Services に関する固有の部分です。
IIS Media Services 用のページの準備
SmoothStreamingPlayer.exe をダウンロード・展開し、解凍されたフォルダにあるSmoothStreamingPlayer.html 、 SmoothStreamingPlayer.xap の2種類のファイルをWebRoleプロジェクトに追加します。
SmoothStreamingPlayer.html 内に、接続ポイントのURLがありますので、環境に合わせて修正します。
これで一応パッケージ化は終了。実際に Windows Azure 上へ配置します。
Windows Azure 上での設定
さて Startup Task 使うとやたら時間がかかるようになってしまってますが(40分ぐらい?)、全部問題なく処理されればきちんとReadyになると思います。(Initializeがやたら長い)
これで終わりと思いきや、IIS Media Services の設定をサーバー上で行う必要があります。なので、リモート接続でVMにログオンしましょう。
ログオン後、IIS管理コンソールを起動します。
仮想サイトの設定みてみると、WebPIを使ってインストールした IIS Media Services に関する設定が増えてることが確認できます。
今回は Live Smooth Streaming をしますので、 Live Smooth Streaming を選択。
で、ここが問題。Application Pool の設定を弄って有効化しないといけないと…
何故かというと通常 Live Smooth Streaming 等のストリームは長時間実行される可能性があるのですが、既定だとワーカープロセスの長時間実行が無効なのですね。
なので、有効化してあげる必要があります。
有効化するとエラーになりますがとりあえず無視。。。
さてこれで使える土台ができました。
次は配信ポイントの設定を行います。
E:\approot\_WASR_ が実際の展開された仮想サイトのルートフォルダですが、こちらに 以下の内容の LiveStream.isml ファイルを保存します。
※ドライブレターは変わる可能性があります
<?xml version="1.0" encoding="utf-8"?>
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
<head>
<meta name="title" content="" />
<meta name="module" content="liveSmoothStreaming" />
<meta name="sourceType" content="Push" />
<meta name="publishing" content="Fragments;Streams;Archives" />
<meta name="estimatedTime" content="3600" />
<meta name="lookaheadChunks" content="2" />
<meta name="manifestWindowLength" content="0" />
<meta name="startOnFirstRequest" content="True" />
<meta name="restartOnEncoderReconnect" content="True" />
<meta name="archiveSegmentLength" content="0" />
<meta name="formats" content="m3u8-aapl" />
<meta name="m3u8-aapl-segmentlength" content="10" />
<meta name="m3u8-aapl-maxbitrate" content="3000000" />
<meta name="m3u8-aapl-allowcaching" content="False" />
<meta name="m3u8-aapl-backwardcompatible" content="False" />
<meta name="m3u8-aapl-enableencryption" content="False" />
<meta name="filters" content="" />
</head>
<body>
</body>
</smil>
LiveStream.isml はLive Smooth Streaming の設定ファイルなのですが、手で作成しても問題ないですがローカルPC等でIIS管理コンソールから設定し、できあがったismlファイルをコピーするのが手っ取り早いです。※もしくはIIS管理コンソールからダイアログで設定しても可です。
このあたりの設定については Getting Started with IIS Live Smooth Streaming を参照ください。
で、設定できたら Start Publishing Point で開始しましょう。
Windows Azure 側(というか IIS Media Services 側)の設定はこれで終わりです。
配信してみる
今回は Expression Encoder 4 Pro を使いました。
Expression Encoder 4 を起動し、 ライブ ブロードキャスト プロジェクト を選択します。
以下の順番で操作していきます。(本題じゃないので手抜き…)
- プリセットから IIS スムーズ ストリーミング となっているものを選択します
- プリセットの内容を適用します
- ストリーミングにチェックを付けます
- パブリッシュ ポイント に サーバー上の isml ファイルへのURLを指定します
今回だと http://mycloudstream.cloudapp.net/livestream.isml
接続ボタンをクリックして接続します
※ここでエラーが出る場合はURLやサーバー側の IIS Media Services の設定を見直してください - ライブソースを追加します
- ビデオデバイスから映像ソースを選択します
※今回はデスクトップを映すためにManyCamという製品を使いました - キューを有効化します
- 開始ボタンをクリックで配信開始
※品質とかあげる場合はもっと細かな設定してあげる必要があります。(ビットレートとかエンコード方法とかいろいろ)
配信を見てみる
配信を見るには、設定したプレイヤーのページ ( SmoothStreamingPlayer.html )を表示させるだけです。
画質悪いですが、ちゃんと配信されてます。
※要Silverlight 4
課題
これまでの手順で、 Windows Azure で Live Smooth Streaming は出来るのですが、いくつか(私が解決できていないだけの)課題が残っています。
- .isml ファイルの配置(パッケージに含める方法)
- 面倒だったので調べてないけど、出力ディレクトリにコピーさせてCMDファイル内でコピー(移動)させたら済む話かな…
- アプリケーションプールの自動設定変更の方法
- どうするんでしょう…
- デプロイに時間がかかる
- これはどうなんでしょう。あまりに長いと、そのうち FabricContoroller からNGくらいそう…
- 複数インスタンスにした場合の分散のさせかた
- 配信した内容のアーカイブとかどうなんだろう…
- トラフィック量
- 下手したら爆死
- WebPIでパッケージダウンロードさせてるけど、毎回ダウンロードということ。
- サイレントインストールができるアプリはパッケージに入れるかBlobに入れておいてそこからインストールとかもアリかも
- 一度配信を中断すると、サーバー上で Publishing Point を停止または再起動してあげないといけない
- これ、ismlファイルに restartOnEncoderReconnect オプションを追記すればいいはずなんですが、現状の Expression Encoder 4 では対応してません。なので手動で再開させないとダメです。。
- Live Smooth Streaming Publishing Point Advanced Settings
- Expression Encoder 4 does not work with option yet and the support will come in future releases.
きっとITProな方が解決してくれると思います…
まとめ
ということで、 Startup Task の実例をやってみました。意外と簡単ですね。使い方によっては非常に強力な機能ですので、是非活用してみてください。
あと実際に IIS Media Services を触ってみての感想ですが、MSのキーノートの配信とかほんとすごい!!ということ。
品質、構成など考えるだけで苦労がすごく分かります。
また今回サンプルで利用した SmoothStreamingPlayer ですが、 Silverlight 4 なのでマルチモニタでフルスクリーン表示ももちろんOK。
HTML5なコードを書けば iPhone 等でも表示できます。
※今回試していないのは、iPhone で表示させるための H.264 エンコードが Expression Encoder 4 Pro MSDN版にはついていなかったからです…
ハードウェアエンコードや H.264 が使えるともっと配信の品質が挙げられますが、まぁ本題ではないので割愛します。














