• 検索結果がありません。

図 6.2 DASH-JS onloadメソッドの処理

しかし、NDN-JSではChunkでInterestとContent Objectの交換を行っている。Chunkと は 4096 バイトに分割されたデータを示し、元のファイル名にシーケンスナンバーのように 16 進数を付着している。これはNDN RouterにおいてコンテンツをNDNレポジトリに格納する 際に行われる処理で、一つのコンテンツにおける最後のChunkにはそれを示すためにヘッダの

中にFinalBlockID=1として格納される。一つのInterestは一つのChunkを指定して送られ、

データのやり取りはChunkで成立される。図6.3にはこれらの違いを表したものを示す。

図 6.3 SegmentとChunkの違い

DASH-JSとNDN-JSを統合させるためにはChunkの集合をSegmentとして結合する必要

があるため、取得したChunkをまとめてセグメント化を行った。Chunkを1から送り、順番 に配列に格納し、最後(FinalBlockID=1)の Chunk が来た際にはその配列をまとめて Segment

//非同期ダウンロード(Segmentのダウンロード完了時) xhr.onload = function(e)

{

//データの取得 (1 Segment)

data=new Uint8Array(this.response);

//帯域理論値の計算

mybps = endBitrateMeasurementByID(this.timeID,data.length);

//帯域の移動平均の計算

myBandwidth.calcWeightedBandwidth(parseInt(mybps));

//帯域に応じてRepresentationを変更

adaptation.switchRepresentation();

//バッファにデータをpush buffer.push(data, 2);

};

ファにプッシュする実装を行った。

Interestのタイムアウトが発生した場合、つまりInterestを満たすContent Objectがある一

定時間返ってこない場合には再送を行う。しかし、これではOut of OrderとなるChunkが発 生してしまう。Out of Orderとは図6.4に示すように要求した順番にコンテンツが返ってこな いことを示す。

図 6.4 Out of Orderの一例

Chunkの集合を元ファイルのSegmentに戻すためにはこのOut of Orderに対応して順番に

配列に格納する必要がある。一つずつのChunkは16進数の文字列が順番に含まれているので

受信したChunkの番号を取得することができるため、この番号をコンテンツの取得後に解析を

し、順番に配列に格納するような実装を行った。

6.3. ネットワーク帯域測定

図6.5に示すように帯域の測定方法は式(4.1)の測定方法を用い、重みをそれぞれ0.9と1.1と して移動加重平均で帯域の値を求めている。

図 6.5 帯域の測定方法

6.4. フロー制御

Interestを送る際はTCPのスロースタートフェーズと同じ制御で行っている。式(6.1)に示す

Chunk Number = 0 Chunk Number = 1 Chunk Number = 2 Chunk Number = 4

Chunk Number = 6 //Out of order (expected 4) Chunk Number = 7

Chunk Number = 8 Chunk Number = 4 Chunk Number = 5 Chunk Number = 9 Chunk Number = 10

//帯域測定

total_length: Segment Size (Total Chunk size) total_time: Receival Time for a segment _bps = ((total_length*8)/(total_time/1000));

//移動平均

this.weight_f = 0.9 this.weight_s = 1.1

this.bps = parseInt(((this.weight_f * this.bps) + (this.weight_s * _bps)) / 2) * 0.9

ように、Interestの初期値は1とし、Interestを満たすContent Objectが返ってきた際には輻 輳ウィンドウサイズ(送信するInterestの数)を1増やし、指数関数的に増加させている。最大の 輻輳ウィンドウサイズを32とし、最大値を達した場合には常に32個のInterestを送信してい る状態となる。

//max _𝑤𝑖𝑛𝑑𝑜𝑤 = 32

𝑐𝑤𝑛𝑑 = 1 (𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑤𝑖𝑛𝑑𝑜𝑤 𝑠𝑖𝑧𝑒)

𝑐𝑤𝑛𝑑 = 𝑐𝑤𝑛𝑑 + 1 (𝑐𝑤𝑛𝑑 ≤ 𝑚𝑎𝑥 _𝑤𝑖𝑛𝑑𝑜𝑤)

(6.1)

また、式(6.2)に示すように Interest のタイムアウト(Interest を送って返ってこない時間間隔) は4秒と設定し、タイムアウトが発生した場合にはそのInterest の再送を行いかつ輻輳ウィン ドウサイズを初期値の 1 に戻す実装となっており、再度指数関数的に輻輳ウィンドウサイズを 増加させている。

//𝐼𝑛𝑡𝑒𝑟𝑒𝑠𝑡 𝑇𝑖𝑚𝑒𝑜𝑢𝑡 = 4

𝑐𝑤𝑛𝑑 = 1 (𝑖𝑓 𝐼𝑛𝑡𝑒𝑟𝑒𝑠𝑡 𝑇𝑖𝑚𝑒𝑑 𝑜𝑢𝑡) (6.2)

6.5. 画面レイアウト

図6.6はDASH-NDN-JSの画面レイアウトを示している。MPDファイルを記述するテキス

トフィールドを設け、入力することでMPDファイルを分析し動画コンテンツをNDN上で取得 を行って再生することが可能となる。現状ではDASH-JSがGoogle ChromeのMedia Source APIに依存しているのでGoogle Chromeのみで動作をすることができる。画面上には以下のロ グを出力させている。

 送信したInterest名

 取得したContent Objectの名

 取得したContent Object(1 Segment分)のデータサイズ

 Content Object(1 Segment分)を取得するまでに要した時間(RTT)

 Content Object(1 Segment分)を取得した時のスループット値

 Interest Timeoutが発生した数

 再送したInterestの名

 輻輳ウィンドウサイズ

 帯域測定とコンテンツビットレートを現したグラフ

図 6.6 DASH-NDN-JS画面レイアウト

第7章 NDN 方式を活用した先回りコンテンツ配信アプリケー

関連したドキュメント