IIS Media Pack1 (2) ~ Smooth Streaming

こんにちは、はらだんです。今回は前回紹介したスムーズストリーミングについて実際に配信中のパケットを取得してその動作をちょっとだけ覗いてみたいと思います。

 

スムーズストリーミングはネットワークやクライアント PC の状況に合わせてコンテンツのビットレートをほぼリアルタイムかつシームレスに変化させる技術です。前もってコンテンツを複数のビットレートでエンコードしておくことでこれを実現します。

 

実はすでにその前身となるものが昨年の北京オリンピックの際に NBCOlympics.com にてオンデマンドで配信されました。オリンピック期間中 US の Media チームでは、いつ何が起きてもすぐ対応できるように 24 時間臨戦体制で対応していました。電話会議の時に「今日で 5 日目だよ。」というとても疲れた声が聞こえてきたのを思い出します。

 

さて、Network Monitor 3.2 を使用してスムーズストリーミングを行っているパケットをいやらしく覗いてみましょう。お手元の環境でも以下の手順で確認が可能です。

 

[パケットデータの取得手順]

1. Silverlight2 をインストールする。(smoothHD に接続した際にインストールの表示が出ます。)

2. NetMon 3.2 をインストールする。

3. NetMon 3.2 を起動しキャプチャを開始する。

4. IE を起動し smoothHD に接続する。

5. コンテンツを再生する。

6. 30秒ほど再生したら NetMon3.2 のキャプチャを停止する。

7. Display Filter に Contains(Http.Request.URI,"") を記述し Apply ボタンを押す。

8. Frame Summary を見てみる。

 

以下がはらだんの取得したパケットデータです。(Time OffsetとDescriptionのみ記載)

 

3.75293 HTTP:Request, GET /.../QualityLevels(64000)/Fragments(audio=217338775)

4.750977 HTTP:Request, GET /.../QualityLevels(1300000)/Fragments(video=215631653)

5.757813 HTTP:Request, GET /.../QualityLevels(64000)/Fragments(audio=236843537)

6.700195 HTTP:Request, GET /.../QualityLevels(1300000)/Fragments(video=235234530)

7.248047 HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=78411510)

7.87793 HTTP:Request, GET /.../QualityLevels(500000)/Fragments(video=98014388)

8.021484 HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=117617265)

8.186524 HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=137220143)

8.453125 HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=156823020)

8.618164 HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=176425898)

8.757813 HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=196028775)

8.954102 HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=215631653)

9.09375 HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=235234530)

9.274414 HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=254837408)

9.280274 HTTP:Request, GET /.../QualityLevels(64000)/Fragments(audio=255767800)

9.668945 HTTP:Request, GET /.../QualityLevels(64000)/Fragments(audio=276317460)

10.6416         HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=274440285)

11.62109 HTTP:Request, GET /.../QualityLevels(64000)/Fragments(audio=295822222)

12.59766        HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=294043163)

13.42578 HTTP:Request, GET /.../QualityLevels(64000)/Fragments(audio=313933786)

14.5293         HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=313646040)

15.56445 HTTP:Request, GET /.../QualityLevels(64000)/Fragments(audio=334367346)

・・・ ・・・

67.46582        HTTP:Request, GET /.../QualityLevels(800000)/Fragments(video=842923733)

68.40137 HTTP:Request, GET /.../QualityLevels(64000)/Fragments(audio=863782312)

69.44336        HTTP:Request, GET /.../QualityLevels(1300000)/Fragments(video=862526610)

70.31055 HTTP:Request, GET /.../QualityLevels(64000)/Fragments(audio=882706576)

71.38574        HTTP:Request, GET /.../QualityLevels(1300000)/Fragments(video=882129488)

72.2627 HTTP:Request, GET /.../QualityLevels(64000)/Fragments(audio=902791836)

73.36133        HTTP:Request, GET /.../QualityLevels(1300000)/Fragments(video=901732365)

 

 

QualityLevels がビットレートの指定を行っているようです。Video のパケットでは 500k,800k,1.3M のレートを指定している様子がわかります。Fragmentsについても不明ですが、名前からすると時分割されたビデオやオーディオの位置を指しているようです。100ns単位だと考えるとおおむね合っています。

 

 

Expression Encoder 2 SP1 でコンテンツを作成する場合は 4 種類のビットレートが指定できるのですが、取得したデータからは 3 種類しか確認できませんでした。Netmon でデータを取得中にネットワークに負荷をかけてみるときっと100~300kbpsくらいのレートのログが出るのではないかと思います。

 

また、このデータから、最初の約 10 秒はかなり頻繁に要求が出されていることもわかります。このこと自体はスムーズストリーミングの機能ではなく、WMS のようなファストスタートの機能ではないかと考えられます。初めの数秒をバッファリングしているために要求が集中しているというわけです。

10 秒から後はほぼ一定の間隔で要求が出ています。Video だけに絞って見てみると(黄色くマークした所)約 2 秒の間隔で更新されていることがわかります。実際のネットワークやクライアント PC の状態により、すくなくともこのデータの時は 2 秒程度の間隔でビットレートの変更が行われていたようです。

 

シームレスにつながっていたか?については見た目にはわかりませんでした。コンテンツの映像がどんなものでもシームレスにつながって見えるのかその辺は確認できていません。ビットレートが変わる際に、フレーム間で何か処理を行っているのか、そのまま切り変わるのか、その辺はわかりませんでした。Media Pack のアップデート後に私たちも使えるようになりますのでまたその頃に検証できたらと思います。

 

  

今回は簡単でしたが、このへんで!

~昼間雪が降ったので期待したのにちっとも積もらず残念なはらだん~