(58)【調査した分野】(Int.Cl.,DB名)
クライアントとネットワークを介して接続され、アイソクロナス転送を行うデバイスがローカル接続され、かつクライアントからアイソクロナス出力転送要求を受信すると要求された転送データをバッファリングするデータバッファ部を備えるデバイスサーバの制御方法であって、下記(1)〜(3)の場合に応じて、転送要求受信ステップ、転送データ保存ステップ及び出力転送ステップの各ステップの処理を切り替えることを特徴とするデバイスサーバ制御方法。
(1)データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄
前記転送要求受信ステップは、前記クライアントからアイソクロナス出力転送要求を受信すると、前記デバイスに対してアイソクロナス出力転送が完了した場合に、前記クライアントに応答が返せていない要求があれば、前記クライアントに対して、前記デバイスに対するアイソクロナス出力転送の転送完了応答を返し、
前記転送データ保存ステップは、受信した転送データを前記データバッファ部に蓄積し、
前記出力転送ステップは、予め決定された転送レートで前記デバイスに対してアイソクロナス出力転送を行う。
(2)データバッファ部の保持データ量が中間閾値を下回った状態から始まり、上限閾値に到達する状態迄、或は、下限閾値に到達する状態迄
前記転送要求受信ステップは、前記クライアントからアイソクロナス出力転送要求を受信すると、無条件で前記クライアントに対して、前記デバイスに対するアイソクロナス出力転送の転送完了応答を返し、
前記転送データ保存ステップは、受信した転送データを前記データバッファ部に蓄積し、
前記出力転送ステップは、予め決定された転送レートで前記デバイスに対してアイソクロナス出力転送を行う。
(3)データバッファ部の保持データ量が下限閾値に到達した状態から始まり、上限閾値に到達する状態迄
前記転送要求受信ステップは、クライアントからアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して、前記デバイスに対するアイソクロナス出力転送の転送完了応答を返し、
前記転送データ保存ステップは、受信した転送データを前記データバッファ部に蓄積し、
前記出力転送ステップは、前記デバイスに対してアイソクロナス出力転送を行わない。
請求項1〜5の何れかに記載のデバイスサーバと、ネットワークを介して接続され、デバイスサーバにローカル接続された前記デバイスに前記アイソクロナス転送を行うクライアントであって、
USBデバイスドライバが発行したアイソクロナス出力転送データを受け取り、該アイソクロナス出力転送データをIPパケットに変換してネットワーク通信制御ドライバに引き渡す手段と、
転送データ蓄積用バッファを生成する手段と、
ネットワーク通信制御ドライバに対して、予め設定された転送レートで前記アイソクロナス出力転送データを引き渡せない場合、前記転送データ蓄積用バッファに前記アイソクロナス出力転送データを蓄積する手段と、
ネットワーク通信制御ドライバに対して、前記アイソクロナス出力転送データを引き渡せる状態になった場合に、前記転送データ蓄積用バッファに蓄積された転送データを引き渡す手段と、
を備えることを特徴とするクライアント。
請求項1〜5の何れかに記載のデバイスサーバと、ネットワークを介して接続され、デバイスサーバにローカル接続された前記デバイスに前記アイソクロナス転送を行う前記クライアントに搭載されるデバイスサーバ制御プログラムであって、
コンピュータを、
USBデバイスドライバが発行したアイソクロナス出力転送データを受け取り、該アイソクロナス出力転送データをIPパケットに変換してネットワーク通信制御ドライバに引き渡す手段、
転送データ蓄積用バッファを生成する手段、
ネットワーク通信制御ドライバに対して、予め設定された転送レートで前記アイソクロナス出力転送データを引き渡せない場合、前記転送データ蓄積用バッファに前記アイソクロナス出力転送データを蓄積する手段、
ネットワーク通信制御ドライバに対して、前記アイソクロナス出力転送データを引き渡せる状態になった場合に、前記転送データ蓄積用バッファに蓄積された転送データを引き渡す手段、
として機能させるためのデバイスサーバ制御プログラム。
【発明の概要】
【発明が解決しようとする課題】
【0011】
従来、クライアントは数百ミリ秒先読みしてアイソクロナス転送要求し、ネットワークの遅延を担保している。デバイスサーバでは、クライアントよりスケジューリングされたアイソクロナス転送要求をそのままに、USBデバイスに対してアイソクロナス転送を行っている。
しかし、特に無線LANの場合は電波状況によりネットワークのリンク切れやアグリゲーションの弊害によってネットワーク転送が滞り、クライアントによる数百ミリ秒の先読みだけでは担保できないことがある。
【0012】
一旦、無線LANレベルでリンクが切れて復帰した場合に、クライアントから一度に複数のアイソクロナス転送要求が出されて、大量のデータが転送される場合がある。デバイスサーバでは、クライアントのアイソクロナス転送要求をそのままに、USBデバイスに対してアイソクロナス転送を行っているため、アイソクロナス転送のスケジューリングができない現象が発生する。この場合、USB規格の通信エラー(スケジューラのバッファ空きが無いためにデータフローを生じたというスタックレベルのエラー)として応答される。
クライアントは、USBデバイスのステータスに関する応答をデバイスサーバ経由で受信するため、こうした回復不能でないエラーにも関わらず、クライアントはデバイスサーバとのセッションを切断してしまい、アイソクロナス転送は終了してしまう。
【0013】
このように、従来のデバイスサーバにおけるアイソクロナス転送では、ネットワークの遅延によるデータ転送量の起伏に伴う影響を回避できず、クライアントのアイソクロナス転送要求をそのままに、USBデバイスに対してアイソクロナス転送を行っているためにアイソクロナス転送で保証すべきデータ転送量を維持できない。すなわち、従来のデバイスサーバにおけるアイソクロナス転送方式では、ネットワーク耐性が弱いという問題がある。
【0014】
上記状況に鑑みて、本発明は、デバイスがローカル接続されたデバイスサーバにおけるアイソクロナス出力転送において、ネットワークの遅延によるデータ転送量の起伏に伴う影響を無くし、アイソクロナス転送で保証すべきデータ転送量を維持でき、アイソクロナス出力転送のネットワーク耐性を向上するデバイスサーバおよびデバイスサーバ制御方法を提供することを目的とする。
【課題を解決するための手段】
【0015】
上記目的を達成すべく、本発明のデバイスサーバは、クライアントとネットワークを介して接続され、アイソクロナス転送を行うデバイスがローカル接続されたデバイスサーバにおいて、クライアントからアイソクロナス出力転送要求を受信すると、要求された転送データをバッファリングするデータバッファ部を備える。
クライアントからアイソクロナス出力転送要求を受信すると、即座に無条件でクライアントに対して
、デバイスに対するアイソクロナス出力転送の転送完了応答を返して、アイソクロナス出力転送データの先読みを行う。そして、受信した転送データをデータバッファ部に蓄積して、デバイスに対してアイソクロナス出力転送を行うことを保留する。データバッファ部の保持データ量が上限閾値に到達した場合に、データバッファ部にバッファリングされた転送データを、予め決定された転送レートでデバイスに対してアイソクロナス出力転送を開始
し、データバッファ部の保持データ量が下限閾値に到達した場合に、デバイスに対してアイソクロナス出力転送を行わない。
【0016】
ここで、クライアントとは、パーソナルコンピュータなどの一般的なコンピュータ端末を意味し、ネットワークに接続され、デバイスサーバにローカル接続されたデバイスに対してアイソクロナス出力転送を行う装置である。またデバイスとは、デバイスサーバにローカル接続され、USB通信規格などのデータ通信方式によって、デバイスサーバとデータ通信できる装置である。デバイスサーバがアイソクロナス出力転送を行うデバイスとしては、USBスピーカなどのオーディオデバイスなどが挙げられる。
また、クライアントからアイソクロナス出力転送要求を受信するとは、クライアントから送信されたアイソクロナス出力転送データを含む出力転送要求をデバイスサーバが受信することを言い、無条件でクライアントに対して
、デバイスに対するアイソクロナス出力転送の転送完了応答を返すとは、本来ならばUSBデバイスへアイソクロナス出力転送を行い、その転送成功応答(OK)を受け取ってから、クライアントに対して転送完了応答を返すところを、応答を待たずに即座にクライアントに対して転送完了応答を返すことを意味する。
以下の記述において、“転送完了応答”は、“デバイスに対するアイソクロナス出力転送の転送完了応答”のことを指す。
【0017】
本発明のデバイスサーバは、クライアントからアイソクロナス出力転送要求を受信すると、即座に無条件でクライアントに対して転送完了応答を返して、アイソクロナス出力転送データの先読みを行い、受信した転送データをデータバッファ部に蓄積し、データバッファ部の保持データ量を判断して、十分に保持データ量が蓄積された後に、デバイスに対してアイソクロナス出力転送を開始することにより、アイソクロナス転送で保証すべきデータ転送量を維持する。これによりネットワーク環境が不安定になった場合でも、デバイスに対して安定したデータ出力を行える。無線LANのようにネットワークのリンク切れやアグリゲーションの弊害でデータ転送が滞るような事象が発生する場合に、特に効果を期待することができる。
例えば、デバイスがUSBスピーカである場合、デバイスサーバにデータバッファ部を設けることにより、無線LAN使用時などでネットワーク環境が不安定になっても、ネットワーク環境が回復するまで、データバッファ部にバッファリングされた音声転送データをUSBスピーカに出力することにより、安定した音声出力を行うことができる。
【0018】
上述の本発明のデバイスサーバでは、下記(1)〜(3)の場合に応じて動作を切り替えることを特徴とする。
(1)データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄
予め決定された転送レートでデバイスに対してアイソクロナス出力転送を行い、クライアントからアイソクロナス出力転送要求を受信すると、デバイスに対してアイソクロナス出力転送が完了した場合に、前記クライアントに応答が返せていない要求があれば、クライアントに対して転送完了応答を返し、受信した転送データをデータバッファ部に蓄積する。
(2)データバッファ部の保持データ量が中間閾値を下回った状態から始まり、上限閾値に到達する状態迄、或は、下限閾値に到達する状態迄
予め決定された転送レートでデバイスに対してアイソクロナス出力転送を行い、クライアントからアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して転送完了応答を返し、受信した転送データをデータバッファ部に蓄積する。
(3)データバッファ部の保持データ量が下限閾値に到達した状態から始まり、上限閾値に到達する状態迄
デバイスに対してアイソクロナス出力転送を行わず、クライアント
からアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して転送完了応答を返し、受信した転送データをデータバッファ部に蓄積する。
【0019】
上記(1)のデータバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄とは、クライアントからアイソクロナス出力転送データの先読みを行った結果、データバッファ部の保持データ量が増加していき、予め設定された上限閾値に到達したあと、デバイスサーバがデバイスに対してアイソクロナス出力転送を行った結果、データバッファ部の保持データ量が減少し、予め設定された中間閾値を下回る状態迄をいう。
【0020】
また、上記(2)のデータバッファ部の保持データ量が中間閾値を下回った状態から始まり、上限閾値に到達する状態迄とは、データバッファ部の保持データ量が中間閾値を下回った状態から始まり、クライアントからアイソクロナス出力転送データの先読みを再開することにより、データバッファ部の保持データ量が増加していき、予め設定された上限閾値に再び到達する状態迄をいう。そして、上記(2)のデータバッファ部の保持データ量が中間閾値を下回った状態から始まり、下限閾値に到達する状態迄とは、データバッファ部の保持データ量が中間閾値を下回った状態から始まり、クライアントからアイソクロナス出力転送データの先読みを再開するものの、クライアントからアイソクロナス出力転送要求が無く、データバッファ部の保持データ量が減少していき、予め設定された下限閾値に到達する状態迄をいう。
【0021】
また、上記(3)データバッファ部の保持データ量が下限閾値に到達した状態から始まり、上限閾値に到達する状態迄とは、データバッファ部の保持データ量が下限閾値の状態から始まり、クライアントからアイソクロナス出力転送データの先読みを行い、かつ、デバイスに対してアイソクロナス出力転送を行うことを保留することにより、データバッファ部の保持データ量が大きく増加し、予め設定された上限閾値に再び到達する状態迄をいう。
【0022】
データバッファ部の保持データ量を判断して、上記(1)〜(3)の場合に応じて動作を切り替えることで、アイソクロナス転送で保証すべきデータ転送量を維持できる。
ここで、上限閾値に到達するとは、保持データ量が上限閾値と一致するか、上限閾値を超えることを意味する。また、中間閾値を下回るとは、保持データ量が中間閾値と一致するか、中間閾値より少ない場合を意味する。
データバッファ部のバッファサイズは、バッファオーバフローを回避するために、上限閾値よりも大きく確保するべきである。そのため、上限閾値は、データバッファ部のバッファサイズに1未満の係数を乗じた値とするのが好ましい。
また、中間閾値は、上限閾値の10〜90%の値で、ネットワーク環境やデバイスの使用環境によって、ユーザが自由に設定可能な値である。通常、中間閾値は、上限閾値の60〜80%の値に設定される。中間閾値は、多段階に設けてもかまわない。多段階に設けることにより、きめ細かい動作の変更が可能になる。
また、下限閾値は、0(ゼロ)、或は、中間閾値より小さい値である。下限閾値は、データバッファ部が空の状態の値であり、0(ゼロ)とするのが好ましい。
【0023】
また、本発明のデバイスサーバでは、データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄のとき、クライアントに対して転送完了応答を送信するタイミングを遅延させ、データバッファ
部が溢れるのを抑止することが好ましい。
デバイスサーバ側のデータバッファ
部が溢れることを防ぐため、クライアント側にアイソクロナス出力転送の送信タイミングを調整させる。
【0024】
また、本発明のデバイスサーバにおいて、デバイスがオーディオデバイスであり、データバッファ部の保持データ量が中間閾値を下回った状態から始まり、下限閾値に到達する状態迄で、かつ、データバッファ部の保持データ量がミュート設定閾値を下回った場合に、データバッファ部に残存している保持データであるオーディオデータ列に演算を行って、デバイスに対してアイソクロナス出力転送を行う。
これにより、オーディオデバイスからの出力音をフェードアウトさせることができる。
デバイスサーバのデータバッファ部が枯渇した場合、音飛び(大きなノイズ)が発生する事象が生じる。これは、音を再生中に急に無音状態になると、音の変化量が大きくなるためである。したがって、データバッファ部の保持データ量が所定の閾値を下回った時に、音飛びを回避するためのデータ加工を行う。
オーディオデバイスとのデータインタフェース仕様によるが、例えば、オーディオデータ列に1未満の係数である0.9,0.8,0.7を乗算することにより、オーディオデバイスからの出力音を小さくすることができる。
【0025】
次に、デバイスサーバの制御方法を説明する。
本発明のデバイスサーバの制御方法は、クライアントとネットワークを介して接続され、アイソクロナス転送を行うデバイスがローカル接続されたデバイスサーバの制御方法であって、クライアントからアイソクロナス出力転送要求を受信する転送要求受信ステップと、要求された転送データを
データバッファ部にバッファリングする転送データ保存ステップと、ローカル接続されたデバイスに対して予め決定された転送レートでアイソクロナス出力転送を行う出力転送ステップを備える。
転送データ保存ステップは、クライアントからアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して
、転送完了応答を返し、受信した転送データをデータバッファ部に蓄積する。
また、出力転送ステップは、データバッファ部の保持データ量が上限閾値に到達した場合に、データバッファ部にバッファリングされた転送データを、デバイスに対してアイソクロナス出力転送を開始
し、データバッファ部の保持データ量が下限閾値に到達した場合に、デバイスに対してアイソクロナス出力転送を行わない。
【0026】
本発明のデバイスサーバ制御方法は、下記(1)〜(3)の場合に応じてステップの処理を切り替えることを特徴とする。
(1)データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄
転送要求受信ステップは、クライアントからアイソクロナス出力転送要求を受信すると、デバイスに対してアイソクロナス出力転送が完了した場合に、クライアントに応答が返せていない要求があれば、クライアントに対して転送完了応答を返す。
転送データ保存ステップは、受信した転送データをデータバッファ部に蓄積する。
出力転送ステップは、予め決定された転送レートでデバイスに対してアイソクロナス出力転送を行う。
(2)データバッファ部の保持データ量が中間閾値を下回った状態から始まり、上限閾値に到達する状態迄、或は、下限閾値に到達する状態迄
転送要求受信ステップは、クライアントからアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して転送完了応答を返す。
転送データ保存ステップは、受信した転送データをデータバッファ部に蓄積する。
出力転送ステップは、予め決定された転送レートでデバイスに対してアイソクロナス出力転送を行う。
(3)データバッファ部の保持データ量が下限閾値に到達した状態から始まり、上限閾値に到達する状態迄
転送要求受信ステップは、クライアントからアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して転送完了応答を返す。
転送データ保存ステップは、受信した転送データを前記データバッファ部に蓄積する。
出力転送ステップは、デバイスに対してアイソクロナス出力転送を行わない。
【0027】
本発明のデバイスサーバ制御方法において、上限閾値は、データバッファ部のバッファサイズに1未満の係数を乗じた値であり、中間閾値は、上限閾値の10〜90%の値であり、下限閾値は、0(ゼロ)、或は、前記中間閾値より小さい値である。
【0028】
本発明のデバイスサーバ制御方法は、データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄のとき、クライアントに対して転送完了応答を送信するタイミングを遅延させるステップを更に備えることが好ましい。
上記のステップを備えることにより、クライアント側にアイソクロナス出力転送の送信タイミングを調整させ、デバイスサーバ側のデータバッファ
部が溢れるのを抑止する。
【0029】
本発明のデバイスサーバ制御方法において、デバイスがオーディオデバイスであり、データバッファ部の保持データ量が中間閾値を下回った状態から始まり、下限閾値に到達する状態迄で、かつ、前記データバッファ部の保持データ量がミュート設定閾値を下回った場合に、出力転送ステップは、データバッファ部に残存している保持データであるオーディオデータ列に演算を行って、デバイスに対してアイソクロナス出力転送を行い、オーディオデバイスからの出力音をフェードアウトさせる。
【0030】
また、本発明のクライアントは、下記(A)〜(D)の手段を備え、上述のデバイスサーバとネットワークを介して接続し、デバイスサーバにローカル接続されたデバイスに対してアイソクロナス転送を行う。
(A)USBデバイスドライバが発行したアイソクロナス出力転送データを受け取り、該アイソクロナス出力転送データをIPパケットに変換してネットワーク通信制御ドライバに引き渡す手段
(B)転送データ蓄積用バッファを生成する手段
(C)ネットワーク通信制御ドライバに対して、予め設定された転送レートでアイソクロナス出力転送データを引き渡せない場合、転送データ蓄積用バッファにアイソクロナス出力転送データを蓄積する手段
(D)ネットワーク通信制御ドライバに対して、アイソクロナス出力転送データを引き渡せる状態になった場合に、転送データ蓄積用バッファに蓄積された転送データを引き渡す手段
【0031】
本発明のクライアントによれば、無線LANのようにネットワークのリンク切れやアグリゲーションの弊害でデータ転送が滞るような事象が発生してネットワーク環境が不安定になり、クライアントからアイソクロナス出力転送要求が滞る状況になった場合でも、クライアント側で転送データを転送データ蓄積用バッファにバッファリングできることから、アイソクロナス出力転送のネットワーク耐性をより向上できる。
【0032】
また、本発明のデバイスサーバ制御プログラムは、上述のデバイスサーバとネットワークを介して接続され、デバイスサーバにローカル接続されたデバイスにアイソクロナス転送を行うプログラムであって、コンピュータを下記(a)〜(d)の手段として機能させるクライアント搭載プログラムである。
(a)USBデバイスドライバが発行したアイソクロナス出力転送データを受け取り、該アイソクロナス出力転送データをIPパケットに変換してネットワーク通信制御ドライバに引き渡す手段
(b)転送データ蓄積用バッファを生成する手段
(c)ネットワーク通信制御ドライバに対して、予め設定された転送レートでアイソクロナス出力転送データを引き渡せない場合、転送データ蓄積用バッファにアイソクロナス出力転送データを蓄積する手段
(d)ネットワーク通信制御ドライバに対して、アイソクロナス出力転送データを引き渡せる状態になった場合に、転送データ蓄積用バッファに蓄積された転送データを引き渡す手段
【0033】
クライアントに搭載される本発明のデバイスサーバ制御プログラムによれば、クライアントとデバイスサーバの両方にバッファを設けることにより、無線LANのようにネットワークのリンク切れやアグリゲーションの弊害でデータ転送が滞るような事象が発生してネットワーク環境が不安定になり、クライアントからアイソクロナス出力転送要求が滞る状況になった場合でも、クライアント側で転送データを転送データ蓄積用バッファにバッファリングできることから、アイソクロナス出力転送のネットワーク耐性をより向上できる。
【0034】
例えば、デバイスがUSBスピーカを例にして説明すると、クライアントとデバイスサーバの両方にバッファを設けることにより、無線LAN使用時などでネットワーク環境が不安定になっても、ネットワーク環境が回復するまで、クライアントは転送データ蓄積用バッファに音声転送データを蓄積し、デバイスサーバはデータバッファ部にバッファリングされた音声転送データをUSBスピーカに出力する。そして、ネットワーク環境が回復した後に、クライアントは転送データ蓄積用バッファに蓄積された音声転送データをデバイスサーバに一括送信し、デバイスサーバは受信した音声転送データをデータバッファ部にバッファリングし、所定の転送レートで音声転送データをUSBスピーカに出力する。これにより、安定した音声出力を行うことができる。
【発明の効果】
【0035】
本発明は、デバイスがローカル接続されたデバイスサーバにおけるアイソクロナス出力転送において、ネットワークの遅延によるデータ転送量の起伏に伴う影響を無くし、アイソクロナス転送で保証すべきデータ転送量を維持でき、アイソクロナス出力転送のネットワーク耐性を向上するといった効果を奏する。
【実施例1】
【0038】
図1は、実施例1のデバイスサーバシステムの概念図である。クライアント1とデバイスサーバ2は無線ネットワーク4を介して接続されており、デバイスサーバ2にはUSB接続ケーブル5によりオーディオデバイスであるスピーカ3がローカル接続されている。
クライアント1は音楽データファイルを再生すると、無線ネットワーク4を介してデバイスサーバ2に音楽データがアイソクロナス出力転送される。デバイスサーバ2は内蔵されたデータバッファ部(図示せず)に転送データ(音楽データ)を保持し、バッファの保持データ量を判断して、スピーカ3に対して、転送データ(音楽データ)をアイソクロナス出力する。システムでは、クライアント1に搭載されているオーディオプレイヤーからネットワークを介してスピーカ3に対してオーディオデータ(音楽データ、音声データなど)をストリーミングデータとして転送する。この場合、一定時間あたりの最低限のデータ転送量を保証するアイソクロナス出力転送によって、オーディオデータが途切れることなくスピーカ3に転送される。
【0039】
図2は、デバイスサーバシステムの機能ブロックの一例を示している。
図2に示すデバイスサーバシステムでは、クライアント1からネットワーク4経由でデバイスサーバ2にローカル接続されているUSBデバイスのスピーカ3に対して転送データ(音楽データ)をアイソクロナス出力する。
ここで、ネットワーク4は、有線もしくは無線のネットワークである。
図2では、クライアント1とデバイスサーバ2は1:1で接続されているが、それぞれ複数存在し、N:1、1:N、N:M(N,Mは2以上の自然数)で接続されるものでもよい。クライアント1とデバイスサーバ2との間の無線ネットワークは、アドホック接続でも無線アクセスポイントを介したインフラストラクチャー接続でも構わない。また、デバイスサーバ2にローカル接続されるUSBデバイスは2台以上でもよいが、USB規格に従って一度に1台のデバイスと通信できるのは1台のクライアントのみである。
【0040】
ここで、クライアント1は、一般的なパーソナルコンピュータと同様なハードウェア構成を備えており、図示しないCPU、入力部、表示部、メモリ、外部記憶部、図示するネットワークI/F15などが内部バスで接続されている。
クライアント1には、記憶部(図示せず)に格納され、実行時にメモリに搭載されるアプリケーションの一つであるオーディオプレイヤー11とUSB DACドライバ12とトンネリングドライバ13がソフトウェア部品として存在している。この他、ソフトウェア部品としては、図示しないOS(Operating System)、OSと同時に起動しそのまま常に起動している図示しない常駐モジュール、通信制御ドライバ(TCP/IP)14があり、制御に必要な各種データと共に記憶部に格納されている。これらソフトウェア部品及び各種データは、CPUの制御に従い、メモリ上に読み出されて各種制御が実行される。
【0041】
また、デバイスサーバ2には、USBデバイスであるスピーカ3がUSB接続ケーブルによってローカル接続されている。
デバイスサーバ2は、USBデバイスであるスピーカ3が接続されると、スピーカ3を認識して識別するためのUSBデバイス情報を受信する。受信したUSBデバイス情報に基づいて、スピーカ3とのデータ送受信に必要となるUSBコアドライバ22を生成し、スピーカ3を制御できる状態にする。
また、デバイスサーバ2は、受信したUSBデバイス情報をクライアント1に送信する。
【0042】
一方、USBデバイスであるスピーカ3は、ハードウェアとしてUSBデバイスI/F31とUSB DAC32が存在し、クライアント1のUSB DACドライバ12とスピーカ3のUSB DAC32との間でオーディオデータを受け渡しする。このような構成によって、クライアント1側のオーディオプレイヤー11と、スピーカ3の間でオーディオデータの受け渡しが可能になり、オーディオデータがスピーカ3から再生させる。
【0043】
クライアント1のUSB DACドライバ12は、オーディオプレイヤー11からのオーディオデータ出力要求(アイソクロナス出力転送要求)を、USB DAC32に応じたデータ形式に変換し、USBのデータ形式に準拠したパケットデータに変換してトンネリングドライバ13に渡す。また、トンネリングドライバ13から送られてくるUSBのデータ形式に準拠したパケットデータを、所定のデータ形式に変換してオーディオプレイヤー11へ渡す。
【0044】
トンネリングドライバ13は、USB DACドライバ12から渡されたパケットデータをIPパケットにカプセル化する。その一方で、デバイスサーバ2からIPパケットを受信すると、IPパケットから応答パケットデータを取り出し(デカプセル化して)、USB DACドライバ12に受け渡す。
また、トンネリングドライバ13は、クライアント1のメモリ上にバッファ領域を確保する(クライアントバッファ18)。無線LANのようにネットワークのリンク切れやアグリゲーションの弊害でネットワーク環境が不安定になり、クライアントからアイソクロナス出力転送要求が滞る状況になった場合でも、バッファ領域を転送データ蓄積用バッファとして利用し、USB DACドライバ12から渡されたパケットデータをバッファリングできる。これにより、アイソクロナス出力転送要求が滞る状況になった場合でも、データの欠損を防いで、アイソクロナス出力転送のネットワーク耐性を向上できる。
【0045】
一方、デバイスサーバ2には、USBホストコントローラ21とUSBコアドライバ22とトンネリングドライバ23と通信制御ドライバ(TCP/IP)24とネットワークI/F25が搭載されている。
トンネリングドライバ23は、クライアント1からネットワーク4を介してIPパケットを受信すると、このIPパケットからUSBのデータ形式に準拠したパケットデータを取り出し(デカプセル化して)、USBコアドライバ22に送る。また、USBコアドライバ22からUSBのデータ形式に準拠したパケットデータを受け取って、IPパケットにカプセル化する。
また、トンネリングドライバ23は、デバイスサーバ2のメモリ上にバッファ領域を確保する(サーババッファ28)。データバッファ部に相当するサーババッファ28を確保することにより、アイソクロナス出力転送データの先読みが行え、受信した転送データをデータバッファ部に蓄積できる。データバッファ部の保持データ量を判断して、十分に保持データ量が蓄積された後に、USBデバイスに対してアイソクロナス出力転送を開始することにより、ネットワーク環境が不安定になりクライアントからアイソクロナス出力転送要求が滞る状況になった場合にも、USBデバイスに対してアイソクロナス転送で保証すべきデータ転送量を維持できる。
【0046】
また、USBデバイスのスピーカ3は、USB DAC32とUSBデバイスI/F31と図示しないUSBガジェットドライバと音声再生アプリケーションが搭載されている。デバイスサーバ2は、予め設定された転送レートで、スピーカ3に対して、オーディオデータをアイソクロナス出力転送する。
このような構成によって、クライアント1のUSB DACドライバ12と、スピーカ3のUSB DAC32との間でオーディオデータの安定した受け渡しが可能になり、オーディオデータがスピーカ3から再生できる。
【0047】
実施例1のデバイスサーバ2は、3つの状態(モード)があり、それぞれの状態によって動作が切り替わる。
図3に実施例1のデバイスサーバ2の状態遷移図を示す。
図3における状態A〜状態Cについては、下記表1に示す違いがある。
【0048】
【表1】
【0049】
状態A(BUFLOW)とは、デバイスサーバ2のサーババッファ28が下限閾値に達した状態である。
状態B(BUFMID)とは、デバイスサーバ2のサーババッファ28が中間閾値にある状態である。
状態C(BUFHIG)とは、デバイスサーバ2のサーババッファ28が上限閾値に達した状態である。
【0050】
ここで、状態A〜状態Cの間のそれぞれの状態遷移の条件は次の通りである。
クライアント1からアイソクロナス出力転送が開始された際の初期状態は、状態A(BUFLOW)である。その後アイソクロナス出力転送要求を受信することによりサーババッファ28の保持データ量が増加し、上限閾値に到達した場合に、状態A(BUFLOW)から状態C(BUFHIG)に遷移する。例えば、サーババッファ28のサイズが100とすると、上限閾値は90である。(以下、この状態Aから状態Cに遷移するまでを場合(3)と呼ぶ)
【0051】
つぎに、状態C(BUFHIG)に遷移した後、クライアント1からのアイソクロナス出力転送要求量よりバッファからデバイス側に出力される量が多く、サーババッファ28の保持データ量が減少し上限閾値の80%である中間閾値以下になると、状態C(BUFHIG)から状態B(BUFMID)に遷移する。(以下、状態Cから状態Bに遷移するまでを場合(1)と呼ぶ)
状態B(BUFMID)に遷移した後、クライアント1からのアイソクロナス出力転送要求量がバッファからデバイス側に出力される量より多く、再びサーババッファ28の保持データ量が増加し上限閾値に到達した場合に、状態B(BUFMID)から状態C(BUFHIG)に遷移する。また一方、状態B(BUFMID)に遷移した後、クライアント1からのアイソクロナス出力転送要求量よりバッファからデバイス側に出力される量より多い結果、サーババッファ28の保持データ量が空になる、すなわち0(ゼロ)になると(この場合、下限閾値を0に設定している)、状態B(BUFMID)から状態A(BUFLOW)に遷移する。(以下、状態Bから状態Cに遷移するまでと状態Bから状態Aに遷移するまでを場合(2)と呼ぶ)
【0052】
次に、実施例1のデバイスサーバ2のバッファリングの動作フローについて説明する。
バッファリングの動作は、上述の場合(1)から(3)によって切り替わる。
(1):サーババッファ28の保持データ量が上限閾値に到達した状態(状態C)から始まり、中間閾値(上限閾値の80%)以下になる状態(状態B)迄
予め決定された転送レートでスピーカ3に対してアイソクロナス出力転送を行い、クライアント1からアイソクロナス出力転送要求を受信すると、スピーカ3に対してアイソクロナス出力転送が完了した場合に、クライアント1に応答が返せていない要求があれば、クライアント1に対して転送完了応答を返し、受信した転送データをサーババッファ28に蓄積する。
(2):サーババッファ28の保持データ量が中間閾値(上限閾値の80%)以下になった状態(状態B)から始まり、上限閾値に到達する状態(状態C)迄、或は、保持データ量が下限閾値0(ゼロ)になる状態(状態A)迄
予め決定された転送レートでスピーカ3に対してアイソクロナス出力転送を行い、クライアント1からアイソクロナス出力転送要求を受信すると、即時にクライアント1に対して転送完了応答を返し、受信した転送データをサーババッファ28に蓄積する。
(3):サーババッファ28の保持データ量が下限閾値0(ゼロ)になった状態(状態A)から始まり、上限閾値に到達する状態(状態C)迄
スピーカ3に対してアイソクロナス出力転送を行わず、クライアント1からアイソクロナス出力転送要求を受信すると、即時にクライアント1に対して転送完了応答を返し、受信した転送データをサーババッファ28に蓄積する。
【0053】
実施例1のデバイスサーバ2のバッファリングの動作フローは、クライアント1からアイソクロナス出力転送要求を受信する処理で行う場合と、USBデバイスのスピーカ3に転送データ送信完了割り込み処理で行う場合に分けられる。前者の受信処理で状態A(BUFLOW)から状態C(BUFHIG)への遷移が発生し、後者の割り込み処理でそれ以外の遷移が発生する。前者の受信処理の動作フローを
図4に、後者の割り込み処理の動作フローを
図5に示す。
以降の説明において、データバッファはサーババッファ28に相当する。
【0054】
まず、受信処理の動作フローについて、
図4を参照して説明する。上述したように受信処理では、状態A(BUFLOW)から状態C(BUFHIG)への遷移が発生する。受信処理は、クライアント1から送られた転送要求に対して転送方式を判定する(S101)。転送方式がアイソクロナス出力転送要求以外であれば転送要求に応じた(例えば、バルク転送など)通常の処理を行う(S102)。転送方式がアイソクロナス出力転送要求であれば、アイソクロナス出力転送データを受信する(S103)。
受信処理は、クライアント1からアイソクロナス出力転送要求を受信した後、クライアント1に対して転送完了応答を返すために、転送成功応答パケットを作成し(S105)、転送成功応答パケットをキューに格納する(S106)。ここでいうキューとは、転送成功応答パケットの待ち行列のことであり、格納された転送成功応答パケットは後述するフローに従って順次クライアントへ返していくことになる。
【0055】
そして、受信処理は、デバイスサーバ2のモード(状態)を判定する(S107)。モード判定の結果、現在のモードが状態A(BUFLOW)である場合、受信データをデータバッファへ格納する(S108)とともに、転送成功応答パケットをクライアント1に返す(S109)。その後、転送データを蓄積しているデータバッファの状態を判別する(S110)。
データバッファの保持データ量がフル(上限閾値に到達)であれば、モードを状態A(BUFLOW)から状態C(BUFHIG)に変更して(S111)、USBデバイスのスピーカ3にデータバッファに蓄積されたデータをアイソクロナス出力転送する(S112)。
【0056】
一方、モード判定(S107)の結果、現在のモードが状態B(BUFMID)である場合、受信データをデータバッファへ格納し(S115)、転送成功応答パケットをクライアント1に返す(S116)。また、モード判定の結果、現在のモードが状態C(BUFHIG)である場合、受信データをデータバッファへ格納する(S118)だけで、転送成功応答パケットをクライアント1に返さない。
【0057】
次に、割り込み処理の動作フローについて、
図5を参照して説明する。上述したように割り込み処理では、状態A(BUFLOW)から状態C(BUFHIG)への遷移以外が発生する。割り込み処理は、USBデバイスのスピーカ3に対してアイソクロナス出力転送の完了割り込み(S201)によって動作するため、例えば、アイソクロナス出力転送が100ms毎に行われる場合は、1秒間に10回の完了割り込みがあり、割り込み処理は1秒間に10回起動されることになる。
割り込み処理は、転送方式を判定し(S202)、転送方式がアイソクロナス出力転送要求以外であれば転送要求に応じた通常の処理を行う(S203)。
【0058】
そして、割り込み処理は、デバイスサーバ2のモード(状態)を判定する(S205)。モード判定の結果、現在のモードが状態C(BUFHIG)である場合、転送データを蓄積しているデータバッファにおいて、未送信のバッファデータをUSBデバイスのスピーカ3に対してアイソクロナス出力転送し(S206)、そして、キューに応答パケットデータが蓄積されていれば、転送成功応答パケットをクライアント1に返し、蓄積されていなければ転送成功応答パケットをクライアント1に返さない(S207)。
その後、データバッファの状態を判別する(S208)。判別の結果、データバッファの保持データ量(バッファリング量)が上限閾値の80%(中間閾値)以下であれば、モードを状態C(BUFHIG)から状態B(BUFMID)に変更する(S209)。
【0059】
一方、モード判定(S205)の結果、現在のモードが状態B(BUFMID)である場合、転送データを蓄積しているデータバッファにおいて、未送信のバッファデータをUSBデバイスのスピーカ3に対してアイソクロナス出力転送する(S211)。その後、データバッファの状態を判別する(S212)。判別の結果、データバッファの保持データ量(バッファリング量)が上限閾値を超えていれば、モードを状態B(BUFMID)から状態C(BUFHIG)に変更する(S213)。一方、判別の結果、データバッファの保持データ量(バッファリング量)が0(ゼロ)であれば、モードを状態B(BUFMID)から状態A(BUFLOW)に変更する(S214)。なお、判別の結果、データバッファの保持データ量(バッファリング量)が上限閾値を超えてもおらず、かつ、0(ゼロ)でなければ、モードの変更は行わない。
【0060】
以降では、本発明のデバイスサーバを用いたデバイスサーバシステムのシーケンスについて、説明を行う。
まず、
図9は、従来のデバイスサーバのアイソクロナス出力転送データシーケンスを示している。
図9のデータシーケンスでは、クライアント1がデバイスサーバ2とネットワーク4で接続され、デバイスサーバ2とUSBデバイスのスピーカ3がUSB接続されている状況下で、クライアント1からアイソクロナス出力転送要求が出された場合のデータシーケンスを示している。先ず、クライアント1からアイソクロナス出力転送要求(Isoc−out転送要求C1)があり、デバイスサーバ2のトンネリングドライバ23がそれを受けてUSBコアドライバ22にアイソクロナス出力転送要求(Isoc−out転送要求C2)を行う。USBコアドライバ22はスピーカ3に対してURB単位でアイソクロナス出力転送要求(Isoc−out転送要求C3)を行う。アイソクロナス出力転送が無事完了すると(C8)、転送応答(OK)C9がUSBコアドライバ22から出され、トンネリングドライバ23によってクライアント1に転送完了応答C10が送られる。
【0061】
以上の通り、従来のデバイスサーバのアイソクロナス出力転送の場合、クライアントからアイソクロナス出力転送要求(Isoc−out転送要求)によりオーディオデータが送信され、デバイスサーバは、トンネリングドライバでデカプセル化してIPパケットをUSB準拠データに変換し、USBコアドライバに対してそのまま出力する。USBコアドライバは、予め定義されたインターバルに合せて、アイソクロナス出力転送要求(Isoc−out転送要求)でスピーカに対してデータ送信する。
クライアントから送信されるアイソクロナス出力転送要求(Isoc−out転送要求)のオーディオデータがUSBコアドライバのキュー(Queue)に積みきれない場合(C13)、USBコアドライバは、エラーコード(EFBIG)をデバイスサーバに返す(C14)。
【0062】
例えば、ネットワークレベルでリンクが切れて復帰した際に、クライアント1から一度に複数のアイソクロナス転送要求が出されて(C1,C4,C6)、大量のデータが転送される場合がある。この場合、クライアント1からアイソクロナス出力転送要求に続いて、次のアイソクロナス出力転送要求が出され、デバイスサーバ2のトンネリングドライバ23がそれを受けてUSBコアドライバ22にアイソクロナス出力転送要求を行うものの(C13)、アイソクロナス転送のスケジューリングができない現象が発生し、USBコアドライバ22から転送応答としてエラーが返される(C14)。
すなわち、従来のデバイスサーバでは、USBコアドライバ22のスケジューラがスケジューリングできないほどのアイソクロナス出力転送要求が出されると、USBコアドライバ22はエラー応答を返し、クライアント1はエラーを受けて、デバイスサーバ2との間の通信セッションを切断する。
【0063】
つぎに、従来のデバイスサーバのアイソクロナス出力転送例として、時間経過に従って、クライアント側入力データ量と、クライアント側バッファ量と、ネットワークデータ量と、USBデバイス側への出力量の変化について下記表2に示す。下記表2では、10ms毎にクライアント側入力データ量が10発生し、発生の都度、ネットワークに流す。そのため、通常時(0〜30ms,90〜110ms)はクライアント側入力データ量とネットワークデータ量が等しくなっている。そして、通常時にはクライアントバッファに蓄積されることはなく、クライアント側バッファ量は0になっている。また通常時、USBデバイス側への出力量は、ネットワークに流れるデータ量がそのまま出力量になっている。USBデバイス側への出力量は予め決められた転送レートにより10のデータ量が出力される。
しかし、ネットワークが不安定になった時間帯(40〜60ms)では、ネットワークデータ量が減少ないし0(ゼロ)になり、その代り、クライアント側バッファに転送データが蓄積され、クライアント側バッファ量は増加している。ネットワークデータ量が減少ないし0(ゼロ)になったことから、USBデバイス側への出力量も、ネットワークに流れるデータ量がそのまま出力量になり、減少ないし0(ゼロ)になっている。ネットワークが回復すると(70ms)、クライアント側バッファに蓄積されたデータがネットワークを流れる。
表2から、ネットワークが不安定になった時間帯(50〜60ms)には、USBデバイス側への出力量は0(ゼロ)となり、データの欠落が生じていることがわかる。
【0064】
【表2】
【0065】
本発明では、以上述べた様な問題点も解決できる。
図6は、実施例1のデバイスサーバ2のアイソクロナス出力転送データシーケンスを示している。実施例1のデバイスサーバ2のアイソクロナス出力転送データシーケンスでは、上述した従来のデバイスサーバのアイソクロナス出力転送データシーケンス(
図9)と異なり、デバイスサーバ2は、デバイスサーバ2のバッファに空きがある場合、クライアント1から送信されるアイソクロナス出力転送要求(Isoc−out転送要求)を受信すれば、すぐに転送完了応答(成功応答)をクライアント1に返信する(C1〜C8)。
クライアント1のOS(Operating System)によって異なるが、OSによってはアイソクロナス出力転送プロトコルで、応答が返ってきたタイミングに応じて次の要求を送り出す。すなわち、デバイスサーバ2側では、アイソクロナス出力転送データの先読みができることになる。なお、アイソクロナス出力転送プロトコルで応答が返ってきたとしても、応答は無視され、常に規定の時間で次の要求を送り出すOSもある。
【0066】
デバイスサーバ2は、デバイスサーバ2のバッファが上限閾値に到達するまで、USBコアドライバ22に対して転送データの出力を保留する。バッファが上限閾値に到達したタイミングで、100ms程度のデータを、USBコアドライバ22に対して転送データを出力する(C9,C10)。以降は、USBデバイスのスピーカ3からの転送応答(C13,C17,C22,C25)によって起動されるデバイスサーバ2の割り込み処理(送信完了割り込みハンドラの処理)において、USBコアドライバ22に転送データを出力する(C14,C18,C23,C26)。
デバイスサーバ2は、デバイスサーバ2のサーババッファ28が上限閾値に到達すると、場合(1)に遷移し、USBデバイスにデータ出力転送を始めるが、それとともにクライアント1に応答を返すタイミングを遅延させてもよい。上述したように、OSによってはアイソクロナス出力転送プロトコルで、応答が返ってきたタイミングに応じて次の要求を送り出すため、応答を返すタイミングを遅らせることで、デバイスサーバ2のサーババッファ28が溢れないように制御することができるからである。
【0067】
【表3】
【0068】
実施例1のデバイスサーバ2のアイソクロナス出力転送例として、時間経過に従って、クライアント1側入力データ量と、クライアント1側バッファ(クライアントバッファ18に相当)量と、ネットワークデータ量と、デバイスサーバ2側バッファ(サーババッファ28に相当)量と、USBデバイス側(スピーカ3に相当)への出力量の変化について上記表3に示す。表3は、上述の表2と同様に、10ms毎にクライアント1側入力データ量が10発生し、発生の都度、ネットワークに流す。表2と同様に、通常時(0〜30ms,90〜110ms)はクライアント1側入力データ量とネットワークデータ量が等しくなっている。しかし、表2と異なり、そのままUSBデバイス側へ出力しないで、デバイスサーバ2側バッファに蓄える。そのため、30msの時間が経過した段階で、デバイスサーバ2側バッファ量は、40に増加している。デバイスサーバ2のバッファの上限閾値の設定が40であったとすると、上限閾値に到達したため、40msの時間経過から所定の転送レート(この場合は10)でUSBデバイス側へのデータ出力を開始する。
【0069】
そして、ネットワークが不安定になった時間帯(40〜60ms)では、表2と同様に、ネットワークデータ量が減少ないし0(ゼロ)になり、その代り、クライアント1側バッファに転送データが蓄積され、クライアント1側バッファ量は増加している。しかし、表2と異なり、ネットワークデータ量が減少ないし0(ゼロ)になっても、デバイスサーバ2はバッファ内の保持データをUSBデバイス側へ出力するため、USBデバイス側への出力量は10のまま維持できている。ネットワークが回復すると(70ms)、クライアント1側バッファに蓄積されたデータがネットワークを流れ、デバイスサーバ2側バッファ量が増加する。
表3に示すように、40msの時間経過から所定の転送レート(この場合は10)でUSBデバイス側へのデータ出力量を一定量に継続できていることがわかる。
このように、実施例1のデバイスサーバシステムの場合、ネットワークの混雑などでアイソクロナス転送のスケジューリングができない現象が発生した場合でも、アイソクロナス転送で保証すべきデータ転送量を維持できることがわかる。
【0070】
図7は、実施例1のデバイスサーバシステムにおけるデータ量の説明図である。また、
図8は、クライアント1とデバイスサーバ2のバッファの保持データ量の説明図である。
図7では、クライアント1上のUSB DACドライバ12の出力データ量(クライアント上のトンネリングドライバ13の入力データ量)、ネットワークに流れるデータ量、USBデバイスに出力されるデータ量が、遅延によりどのように遷移するか示している。
図7において、横軸単位は10msであり、縦軸はデータ量を示している。
図7に示す例では、40msから60msにかけてネットワークに流れるデータの遅延、停滞が発生している。USBデバイスへは、ある程度データが溜まった後(40ms分の転送データが溜まった後)に送信を開始している。つまり、80msにおいて、40ms分の転送データ量が、一気にネットワークへ流れることになる。しかしデバイスサーバのバッファの存在によりUSBデバイスへの出力データ量は一定に保たれている。
【0071】
図8は、
図7に示すようなネットワークに流れるデータの遅延が発生した場合の、クライアント1側とデバイスサーバ2側のバッファに蓄えられるデータ量を示している。
図8において、横軸単位は10msであり、縦軸はデータ量を示している。デバイスサーバ2側のバッファが無くなる前にネットワークが復旧し、クライアント1側バッファ に溜まった分が一気に放出されている(
図8の70〜80msを参照)。実施例1のデバイスサーバ2の場合、クライアント1から流れるデータをデバイスサーバ2側バッファで受け止めるとともに、USBデバイスへ一定の転送レートでデータ転送することが可能である。
【0072】
なお、上述の実施例では、クライアントがネットワークを介してUSBデバイスのスピーカを利用するデバイスサーバシステムを例に説明したが、本発明の適用範囲はこれに限定されず、USB通信規格と同等の通信方式、例えば、IEEE1394など別のインタフェースに準拠したものであってもよい。