(57)【要約】【課題】デバイスがローカル接続されたデバイスサーバにおけるアイソクロナス出力転送において、ネットワークの遅延によるデータ転送量の起伏に伴う影響を無くし、アイソクロナス転送で保証すべきデータ転送量を維持でき、アイソクロナス出力転送のネットワーク耐性を向上するデバイスサーバを提供する。【解決手段】アイソクロナス出力転送データをバッファリングするデータバッファ部を備え、クライアントからアイソクロナス出力転送要求を受信すると、即座に無条件でクライアントに対して転送完了応答を返して、アイソクロナス出力転送データの先読みを行う。そして、受信した転送データをデータバッファ部に蓄積する。データバッファ部の保持データ量が上限閾値に到達した場合に、データバッファ部にバッファリングされた転送データについて、予め決定された転送レートでデバイスに対してアイソクロナス出力転送を開始する。【選択図】図２
2015152945.tif 000002
【特許請求の範囲】
【請求項１】
クライアントとネットワークを介して接続され、アイソクロナス転送を行うデバイスがローカル接続されたデバイスサーバにおいて、
クライアントからアイソクロナス出力転送要求を受信すると要求された転送データをバッファリングするデータバッファ部を備え、
クライアントからアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して転送完了応答を返し、受信した転送データを前記データバッファ部に蓄積し、
前記データバッファ部の保持データ量が上限閾値に到達した場合に、前記データバッファ部にバッファリングされた転送データを、予め決定された転送レートで前記デバイスに対してアイソクロナス出力転送を開始することを特徴とするデバイスサーバ。
【請求項２】
クライアントとネットワークを介して接続され、アイソクロナス転送を行うデバイスがローカル接続されたデバイスサーバにおいて、
前記クライアントからアイソクロナス出力転送要求を受信すると要求された転送データをバッファリングするデータバッファ部を備え、下記（１）〜（３）の場合に応じて動作を切り替えることを特徴とするデバイスサーバ。
（１）前記データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄
予め決定された転送レートで前記デバイスに対してアイソクロナス出力転送を行うとともに、前記クライアントからアイソクロナス出力転送要求を受信すると、前記デバイスに対してアイソクロナス出力転送が完了した場合に、前記クライアントに応答が返せていない要求があれば、前記クライアントに対して転送完了応答を返し、受信した転送データを前記データバッファ部に蓄積する。
（２）前記データバッファ部の保持データ量が中間閾値を下回った状態から始まり、上限閾値に到達する状態迄、或は、下限閾値に到達する状態迄
予め決定された転送レートで前記デバイスに対してアイソクロナス出力転送を行うとともに、前記クライアントからアイソクロナス出力転送要求を受信すると、無条件で前記クライアントに対して転送完了応答を返し、受信した転送データを前記データバッファ部に蓄積する。
（３）前記データバッファ部の保持データ量が下限閾値に到達した状態から始まり、上限閾値に到達する状態迄
前記デバイスに対してアイソクロナス出力転送を行わず、前記クライアントからアイソクロナス出力転送要求を受信すると、無条件で前記クライアントに対して転送完了応答を返し、受信した転送データを前記データバッファ部に蓄積する。
【請求項３】
前記上限閾値は、前記データバッファ部のバッファサイズに１未満の係数を乗じた値であり、
前記中間閾値は、前記上限閾値の１０〜９０％の値であり、
前記下限閾値は、０（ゼロ）、或は、前記中間閾値より小さい値である、
ことを特徴とする請求項２に記載のデバイスサーバ。
【請求項４】
前記データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄のとき、
前記クライアントに対して前記転送完了応答を送信するタイミングを遅延させ前記データバッファが溢れるのを抑止することを特徴とする請求項２又は３に記載のデバイスサーバ。
【請求項５】
前記デバイスがオーディオデバイスであり、
前記データバッファ部の保持データ量が中間閾値を下回った状態から始まり、下限閾値に到達する状態迄で、かつ、前記データバッファ部の保持データ量がミュート設定閾値を下回った場合に、前記データバッファ部に残存している保持データであるオーディオデータ列に演算を行って、前記デバイスに対してアイソクロナス出力転送を行うことにより、オーディオデバイスからの出力音をフェードアウトさせることを特徴とする請求項２〜４の何れかに記載のデバイスサーバ。
【請求項６】
クライアントとネットワークを介して接続され、アイソクロナス転送を行うデバイスがローカル接続されたデバイスサーバの制御方法であって、
クライアントからアイソクロナス出力転送要求を受信する転送要求受信ステップと、
要求された転送データをバッファリングする転送データ保存ステップと、
ローカル接続されたデバイスに対して予め決定された転送レートでアイソクロナス出力転送を行う出力転送ステップと、
前記転送データ保存ステップは、クライアントからアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して転送完了応答を返し、受信した転送データを前記データバッファ部に蓄積し、
前記出力転送ステップは、前記データバッファ部の保持データ量が上限閾値に到達した場合に、前記データバッファ部にバッファリングされた転送データを、前記デバイスに対してアイソクロナス出力転送を開始することを特徴とするデバイスサーバ制御方法。
【請求項７】
クライアントとネットワークを介して接続され、アイソクロナス転送を行うデバイスがローカル接続され、かつクライアントからアイソクロナス出力転送要求を受信すると要求された転送データをバッファリングするデータバッファ部を備えるデバイスサーバの制御方法であって、下記（１）〜（３）の場合に応じてステップの処理を切り替えることを特徴とするデバイスサーバ制御方法。
（１）データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄
前記転送要求受信ステップは、前記クライアントからアイソクロナス出力転送要求を受信すると、前記デバイスに対してアイソクロナス出力転送が完了した場合に、前記クライアントに応答が返せていない要求があれば、前記クライアントに対して転送完了応答を返し、
前記転送データ保存ステップは、受信した転送データを前記データバッファ部に蓄積し、
前記出力転送ステップは、予め決定された転送レートで前記デバイスに対してアイソクロナス出力転送を行う。
（２）データバッファ部の保持データ量が中間閾値を下回った状態から始まり、上限閾値に到達する状態迄、或は、下限閾値に到達する状態迄
前記転送要求受信ステップは、前記クライアントからアイソクロナス出力転送要求を受信すると、無条件で前記クライアントに対して転送完了応答を返し、
前記転送データ保存ステップは、受信した転送データを前記データバッファ部に蓄積し、
前記出力転送ステップは、予め決定された転送レートで前記デバイスに対してアイソクロナス出力転送を行う。
（３）データバッファ部の保持データ量が下限閾値に到達した状態から始まり、上限閾値に到達する状態迄
前記転送要求受信ステップは、クライアントからアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して転送完了応答を返し、
前記転送データ保存ステップは、受信した転送データを前記データバッファ部に蓄積し、
前記出力転送ステップは、前記デバイスに対してアイソクロナス出力転送を行わない。
【請求項８】
前記上限閾値は、前記データバッファ部のバッファサイズに１未満の係数を乗じた値であり、
前記中間閾値は、前記上限閾値の１０〜９０％の値であり、
前記下限閾値は、０（ゼロ）、或は、前記中間閾値より小さい値である、
ことを特徴とする請求項７に記載のデバイスサーバ制御方法。
【請求項９】
前記データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄のとき、
前記クライアントに対して前記転送完了応答を送信するタイミングを遅延させるステップを更に備え、前記データバッファが溢れるのを抑止することを特徴とする請求項７又は８に記載のデバイスサーバ制御方法。
【請求項１０】
前記デバイスがオーディオデバイスであり、
前記データバッファ部の保持データ量が中間閾値を下回った状態から始まり、下限閾値に到達する状態迄で、かつ、前記データバッファ部の保持データ量がミュート設定閾値を下回った場合に、
前記出力転送ステップは、
前記データバッファ部に残存している保持データであるオーディオデータ列に演算を行って、前記デバイスに対してアイソクロナス出力転送を行い、オーディオデバイスからの出力音をフェードアウトさせることを特徴とする請求項７〜９の何れかに記載のデバイスサーバ制御方法。
【請求項１１】
請求項１〜５の何れかに記載のデバイスサーバと、ネットワークを介して接続され、デバイスサーバにローカル接続された前記デバイスに前記アイソクロナス転送を行うクライアントであって、
ＵＳＢデバイスドライバが発行したアイソクロナス出力転送データを受け取り、該アイソクロナス出力転送データをＩＰパケットに変換してネットワーク通信制御ドライバに引き渡す手段と、
転送データ蓄積用バッファを生成する手段と、
ネットワーク通信制御ドライバに対して、予め設定された転送レートで前記アイソクロナス出力転送データを引き渡せない場合、前記転送データ蓄積用バッファに前記アイソクロナス出力転送データを蓄積する手段と、
ネットワーク通信制御ドライバに対して、前記アイソクロナス出力転送データを引き渡せる状態になった場合に、前記転送データ蓄積用バッファに蓄積された転送データを引き渡す手段と、
を備えることを特徴とするクライアント。
【請求項１２】
請求項１〜５の何れかに記載のデバイスサーバと、ネットワークを介して接続され、デバイスサーバにローカル接続された前記デバイスに前記アイソクロナス転送を行う前記クライアントに搭載されるデバイスサーバ制御プログラムであって、
コンピュータを、
ＵＳＢデバイスドライバが発行したアイソクロナス出力転送データを受け取り、該アイソクロナス出力転送データをＩＰパケットに変換してネットワーク通信制御ドライバに引き渡す手段、
転送データ蓄積用バッファを生成する手段、
ネットワーク通信制御ドライバに対して、予め設定された転送レートで前記アイソクロナス出力転送データを引き渡せない場合、前記転送データ蓄積用バッファに前記アイソクロナス出力転送データを蓄積する手段、
ネットワーク通信制御ドライバに対して、前記アイソクロナス出力転送データを引き渡せる状態になった場合に、前記転送データ蓄積用バッファに蓄積された転送データを引き渡す手段、
として機能させるためのデバイスサーバ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアントとデバイス（特に、オーディオデバイス）との間で、ネットワークを介してアイソクロナス転送を行うデバイスサーバおよびその制御方法に関するものである。
【背景技術】
【０００２】
近年、有線ＬＡＮ（Ｌｏｃａｌ Ａｒｅａ Ｎｅｔｗｏｒｋ）または無線ＬＡＮなどのＩＰネットワークはますます広がり、人々の生活のインフラとなっている。ネットワークＩ／Ｆ（インタフェース）の低価格化も進んでいる。
また、コンピュータにローカル接続されていた周辺機器は、ＩＰネットワークが周辺機器の制御データの送受信に十分耐えるほど高速化した現在において、コンピュータとＩＰネットワークを介して周辺機器の制御が可能になっている。
このような状況下、ＩＰネットワークを通じて、コンピュータの周辺機器であるＵＳＢ（Ｕｎｉｖｅｒｓａｌ Ｓｅｒｉａｌ Ｂｕｓ）デバイスを当該ネットワークに接続しているコンピュータから利用することのできるデバイスサーバシステムが知られている（特許文献１、非特許文献１を参照）。
【０００３】
デバイスサーバシステムでは、クライアントのＵＳＢデバイスドライバが発行した制御コマンド等のＵＳＢデータがＩＰパケットに変換され（カプセル化）、これがクライアントからデバイスサーバに向けて送信される。ＩＰパケットを受信したデバイスサーバは、受信したＩＰパケットに含まれる制御コマンド等のＵＳＢデータを取り出し（デカプセル化）、ＵＳＢ通信に変換してデバイスサーバ自身にローカル接続されているＵＳＢデバイスに転送する。
【０００４】
デバイスサーバとＵＳＢデバイスとの間における通信は、ＵＳＢ規格の通信に準じている。例えば、クライアントからＵＳＢデバイスへの送信の場合、クライアントからデバイスサーバを経由してＵＳＢデバイスにデータを送信するとともに、随時、ＵＳＢデバイスのステータスに関する応答をクライアントはデバイスサーバ経由で受信する。
【０００５】
ＵＳＢデバイスがスピーカの場合、クライアントからＵＳＢデバイスに対して音声などリアルタイム性を必要とするストリーミングデータを転送する。この場合、一定時間あたりの最低限のデータ転送量を保証するアイソクロナス方式によるデータ転送（アイソクロナス転送）を行うことにより、途切れることなくデータを転送することができる。
【０００６】
デバイスサーバを介してクライアントとＵＳＢデバイス間でアイソクロナス転送を行う場合、クライアントとＵＳＢデバイスはローカル接続されているのではなく、ネットワーク経由で接続されていることから、ネットワークトラフィックが高くなり、ネットワーク区間のデータ転送速度が低下しても、アイソクロナス転送で保証する最低限のデータ転送量を維持する必要がある。
【０００７】
デバイスサーバの内部処理において、アイソクロナス転送要求に対するＵＳＢデバイスからの応答情報をダミー応答してクライアントのデバイスドライバに送信するデバイスサーバの制御方法が知られている（特許文献２）。
特許文献２に開示された制御方法によれば、クライアントは、ＵＳＢデバイスからの応答情報の遅延（受信待ち）によって、次のアイソクロナス転送要求の処理が停滞することがなくなるため、アイソクロナス出力転送で保証する最低限のデータ転送量を維持することができる。
【０００８】
しかしながら、特許文献２に開示されたデバイスサーバの制御方法では、所定時間経過してもＵＳＢデバイスからの応答情報を受け取らなかった場合には、ＵＳＢデバイスからの応答情報を擬製してダミー応答データをクライアントのデバイスドライバに送信することから、ネットワーク自体が回復不能なステータス（致命的なステータス）の場合であっても、クライアントは次のアイソクロナス転送要求を送出する一方、デバイスサーバはこれを受け取れず、デバイスに渡せないことになり、好ましくないという問題がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００８−２８７４５３号公報
【特許文献２】特許第４６１７４４０号公報
【非特許文献】
【００１０】
【非特許文献１】サイレックス・テクノロジー株式会社ホームページ＜http://www.silex.jp/products/usbdeviceserver/sx3000gb.html＞
【発明の概要】
【発明が解決しようとする課題】
【００１１】
従来、クライアントは数百ミリ秒先読みしてアイソクロナス転送要求し、ネットワークの遅延を担保している。デバイスサーバでは、クライアントよりスケジューリングされたアイソクロナス転送要求をそのままに、ＵＳＢデバイスに対してアイソクロナス転送を行っている。
しかし、特に無線ＬＡＮの場合は電波状況によりネットワークのリンク切れやアグリゲーションの弊害によってネットワーク転送が滞り、クライアントによる数百ミリ秒の先読みだけでは担保できないことがある。
【００１２】
一旦、無線ＬＡＮレベルでリンクが切れて復帰した場合に、クライアントから一度に複数のアイソクロナス転送要求が出されて、大量のデータが転送される場合がある。デバイスサーバでは、クライアントのアイソクロナス転送要求をそのままに、ＵＳＢデバイスに対してアイソクロナス転送を行っているため、アイソクロナス転送のスケジューリングができない現象が発生する。この場合、ＵＳＢ規格の通信エラー（スケジューラのバッファ空きが無いためにデータフローを生じたというスタックレベルのエラー）として応答される。
クライアントは、ＵＳＢデバイスのステータスに関する応答をデバイスサーバ経由で受信するため、こうした回復不能でないエラーにも関わらず、クライアントはデバイスサーバとのセッションを切断してしまい、アイソクロナス転送は終了してしまう。
【００１３】
このように、従来のデバイスサーバにおけるアイソクロナス転送では、ネットワークの遅延によるデータ転送量の起伏に伴う影響を回避できず、クライアントのアイソクロナス転送要求をそのままに、ＵＳＢデバイスに対してアイソクロナス転送を行っているためにアイソクロナス転送で保証すべきデータ転送量を維持できない。すなわち、従来のデバイスサーバにおけるアイソクロナス転送方式では、ネットワーク耐性が弱いという問題がある。
【００１４】
上記状況に鑑みて、本発明は、デバイスがローカル接続されたデバイスサーバにおけるアイソクロナス出力転送において、ネットワークの遅延によるデータ転送量の起伏に伴う影響を無くし、アイソクロナス転送で保証すべきデータ転送量を維持でき、アイソクロナス出力転送のネットワーク耐性を向上するデバイスサーバおよびデバイスサーバ制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記目的を達成すべく、本発明のデバイスサーバは、クライアントとネットワークを介して接続され、アイソクロナス転送を行うデバイスがローカル接続されたデバイスサーバにおいて、クライアントからアイソクロナス出力転送要求を受信すると、要求された転送データをバッファリングするデータバッファ部を備える。
クライアントからアイソクロナス出力転送要求を受信すると、即座に無条件でクライアントに対して転送完了応答を返して、アイソクロナス出力転送データの先読みを行う。そして、受信した転送データをデータバッファ部に蓄積して、デバイスに対してアイソクロナス出力転送を行うことを保留する。データバッファ部の保持データ量が上限閾値に到達した場合に、データバッファ部にバッファリングされた転送データを、予め決定された転送レートでデバイスに対してアイソクロナス出力転送を開始する。
【００１６】
ここで、クライアントとは、パーソナルコンピュータなどの一般的なコンピュータ端末を意味し、ネットワークに接続され、デバイスサーバにローカル接続されたデバイスに対してアイソクロナス出力転送を行う装置である。またデバイスとは、デバイスサーバにローカル接続され、ＵＳＢ通信規格などのデータ通信方式によって、デバイスサーバとデータ通信できる装置である。デバイスサーバがアイソクロナス出力転送を行うデバイスとしては、ＵＳＢスピーカなどのオーディオデバイスなどが挙げられる。
また、クライアントからアイソクロナス出力転送要求を受信するとは、クライアントから送信されたアイソクロナス出力転送データを含む出力転送要求をデバイスサーバが受信することを言い、無条件でクライアントに対して転送完了応答を返すとは、本来ならばＵＳＢデバイスへアイソクロナス出力転送を行い、その転送成功応答（ＯＫ）を受け取ってから、クライアントに対して転送完了応答を返すところを、応答を待たずに即座にクライアントに対して転送完了応答を返すことを意味する。
【００１７】
本発明のデバイスサーバは、クライアントからアイソクロナス出力転送要求を受信すると、即座に無条件でクライアントに対して転送完了応答を返して、アイソクロナス出力転送データの先読みを行い、受信した転送データをデータバッファ部に蓄積し、データバッファ部の保持データ量を判断して、十分に保持データ量が蓄積された後に、デバイスに対してアイソクロナス出力転送を開始することにより、アイソクロナス転送で保証すべきデータ転送量を維持する。これによりネットワーク環境が不安定になった場合でも、デバイスに対して安定したデータ出力を行える。無線ＬＡＮのようにネットワークのリンク切れやアグリゲーションの弊害でデータ転送が滞るような事象が発生する場合に、特に効果を期待することができる。
例えば、デバイスがＵＳＢスピーカである場合、デバイスサーバにデータバッファ部を設けることにより、無線ＬＡＮ使用時などでネットワーク環境が不安定になっても、ネットワーク環境が回復するまで、データバッファ部にバッファリングされた音声転送データをＵＳＢスピーカに出力することにより、安定した音声出力を行うことができる。
【００１８】
上述の本発明のデバイスサーバでは、下記（１）〜（３）の場合に応じて動作を切り替えることを特徴とする。
（１）データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄
予め決定された転送レートでデバイスに対してアイソクロナス出力転送を行い、クライアントからアイソクロナス出力転送要求を受信すると、デバイスに対してアイソクロナス出力転送が完了した場合に、前記クライアントに応答が返せていない要求があれば、クライアントに対して転送完了応答を返し、受信した転送データをデータバッファ部に蓄積する。
（２）データバッファ部の保持データ量が中間閾値を下回った状態から始まり、上限閾値に到達する状態迄、或は、下限閾値に到達する状態迄
予め決定された転送レートでデバイスに対してアイソクロナス出力転送を行い、クライアントからアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して転送完了応答を返し、受信した転送データをデータバッファ部に蓄積する。
（３）データバッファ部の保持データ量が下限閾値に到達した状態から始まり、上限閾値に到達する状態迄
デバイスに対してアイソクロナス出力転送を行わず、クライアントから始まり、アイソクロナス出力転送要求を受信すると、無条件でクライアントに対して転送完了応答を返し、受信した転送データをデータバッファ部に蓄積する。
【００１９】
上記（１）のデータバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄とは、クライアントからアイソクロナス出力転送データの先読みを行った結果、データバッファ部の保持データ量が増加していき、予め設定された上限閾値に到達したあと、デバイスサーバがデバイスに対してアイソクロナス出力転送を行った結果、データバッファ部の保持データ量が減少し、予め設定された中間閾値を下回る状態迄をいう。
【００２０】
また、上記（２）のデータバッファ部の保持データ量が中間閾値を下回った状態から始まり、上限閾値に到達する状態迄とは、データバッファ部の保持データ量が中間閾値を下回った状態から始まり、クライアントからアイソクロナス出力転送データの先読みを再開することにより、データバッファ部の保持データ量が増加していき、予め設定された上限閾値に再び到達する状態迄をいう。そして、上記（２）のデータバッファ部の保持データ量が中間閾値を下回った状態から始まり、下限閾値に到達する状態迄とは、データバッファ部の保持データ量が中間閾値を下回った状態から始まり、クライアントからアイソクロナス出力転送データの先読みを再開するものの、クライアントからアイソクロナス出力転送要求が無く、データバッファ部の保持データ量が減少していき、予め設定された下限閾値に到達する状態迄をいう。
【００２１】
また、上記（３）データバッファ部の保持データ量が下限閾値に到達した状態から始まり、上限閾値に到達する状態迄とは、データバッファ部の保持データ量が下限閾値の状態から始まり、クライアントからアイソクロナス出力転送データの先読みを行い、かつ、デバイスに対してアイソクロナス出力転送を行うことを保留することにより、データバッファ部の保持データ量が大きく増加し、予め設定された上限閾値に再び到達する状態迄をいう。
【００２２】
データバッファ部の保持データ量を判断して、上記（１）〜（３）の場合に応じて動作を切り替えることで、アイソクロナス転送で保証すべきデータ転送量を維持できる。
ここで、上限閾値に到達するとは、保持データ量が上限閾値と一致するか、上限閾値を超えることを意味する。また、中間閾値を下回るとは、保持データ量が中間閾値と一致するか、中間閾値より少ない場合を意味する。
データバッファ部のバッファサイズは、バッファオーバフローを回避するために、上限閾値よりも大きく確保するべきである。そのため、上限閾値は、データバッファ部のバッファサイズに１未満の係数を乗じた値とするのが好ましい。
また、中間閾値は、上限閾値の１０〜９０％の値で、ネットワーク環境やデバイスの使用環境によって、ユーザが自由に設定可能な値である。通常、中間閾値は、上限閾値の６０〜８０％の値に設定される。中間閾値は、多段階に設けてもかまわない。多段階に設けることにより、きめ細かい動作の変更が可能になる。
また、下限閾値は、０（ゼロ）、或は、中間閾値より小さい値である。下限閾値は、データバッファ部が空の状態の値であり、０（ゼロ）とするのが好ましい。
【００２３】
また、本発明のデバイスサーバでは、データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄のとき、クライアントに対して転送完了応答を送信するタイミングを遅延させ、データバッファが溢れるのを抑止することが好ましい。
デバイスサーバ側のデータバッファが溢れることを防ぐため、クライアント側にアイソクロナス出力転送の送信タイミングを調整させる。
【００２４】
また、本発明のデバイスサーバにおいて、デバイスがオーディオデバイスであり、データバッファ部の保持データ量が中間閾値を下回った状態から始まり、下限閾値に到達する状態迄で、かつ、データバッファ部の保持データ量がミュート設定閾値を下回った場合に、データバッファ部に残存している保持データであるオーディオデータ列に演算を行って、デバイスに対してアイソクロナス出力転送を行う。
これにより、オーディオデバイスからの出力音をフェードアウトさせることができる。
デバイスサーバのデータバッファ部が枯渇した場合、音飛び（大きなノイズ）が発生する事象が生じる。これは、音を再生中に急に無音状態になると、音の変化量が大きくなるためである。したがって、データバッファ部の保持データ量が所定の閾値を下回った時に、音飛びを回避するためのデータ加工を行う。
オーディオデバイスとのデータインタフェース仕様によるが、例えば、オーディオデータ列に1未満の係数である0.9，0.8，0.7を乗算することにより、オーディオデバイスからの出力音を小さくすることができる。
【００２５】
次に、デバイスサーバの制御方法を説明する。
本発明のデバイスサーバの制御方法は、クライアントとネットワークを介して接続され、アイソクロナス転送を行うデバイスがローカル接続されたデバイスサーバの制御方法であって、クライアントからアイソクロナス出力転送要求を受信する転送要求受信ステップと、要求された転送データをバッファリングする転送データ保存ステップと、ローカル接続されたデバイスに対して予め決定された転送レートでアイソクロナス出力転送を行う出力転送ステップを備える。
転送データ保存ステップは、クライアントからアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して転送完了応答を返し、受信した転送データをデータバッファ部に蓄積する。
また、出力転送ステップは、データバッファ部の保持データ量が上限閾値に到達した場合に、データバッファ部にバッファリングされた転送データを、デバイスに対してアイソクロナス出力転送を開始する。
【００２６】
本発明のデバイスサーバ制御方法は、下記（１）〜（３）の場合に応じてステップの処理を切り替えることを特徴とする。
（１）データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄
転送要求受信ステップは、クライアントからアイソクロナス出力転送要求を受信すると、デバイスに対してアイソクロナス出力転送が完了した場合に、クライアントに応答が返せていない要求があれば、クライアントに対して転送完了応答を返す。
転送データ保存ステップは、受信した転送データをデータバッファ部に蓄積する。
出力転送ステップは、予め決定された転送レートでデバイスに対してアイソクロナス出力転送を行う。
（２）データバッファ部の保持データ量が中間閾値を下回った状態から始まり、上限閾値に到達する状態迄、或は、下限閾値に到達する状態迄
転送要求受信ステップは、クライアントからアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して転送完了応答を返す。
転送データ保存ステップは、受信した転送データをデータバッファ部に蓄積する。
出力転送ステップは、予め決定された転送レートでデバイスに対してアイソクロナス出力転送を行う。
（３）データバッファ部の保持データ量が下限閾値に到達した状態から始まり、上限閾値に到達する状態迄
転送要求受信ステップは、クライアントからアイソクロナス出力転送要求を受信すると、無条件でクライアントに対して転送完了応答を返す。
転送データ保存ステップは、受信した転送データを前記データバッファ部に蓄積する。
出力転送ステップは、デバイスに対してアイソクロナス出力転送を行わない。
【００２７】
本発明のデバイスサーバ制御方法において、上限閾値は、データバッファ部のバッファサイズに１未満の係数を乗じた値であり、中間閾値は、上限閾値の１０〜９０％の値であり、下限閾値は、０（ゼロ）、或は、前記中間閾値より小さい値である。
【００２８】
本発明のデバイスサーバ制御方法は、データバッファ部の保持データ量が上限閾値に到達した状態から始まり、中間閾値を下回る状態迄のとき、クライアントに対して転送完了応答を送信するタイミングを遅延させるステップを更に備えることが好ましい。
上記のステップを備えることにより、クライアント側にアイソクロナス出力転送の送信タイミングを調整させ、デバイスサーバ側のデータバッファが溢れるのを抑止する。
【００２９】
本発明のデバイスサーバ制御方法において、デバイスがオーディオデバイスであり、データバッファ部の保持データ量が中間閾値を下回った状態から始まり、下限閾値に到達する状態迄で、かつ、前記データバッファ部の保持データ量がミュート設定閾値を下回った場合に、出力転送ステップは、データバッファ部に残存している保持データであるオーディオデータ列に演算を行って、デバイスに対してアイソクロナス出力転送を行い、オーディオデバイスからの出力音をフェードアウトさせる。
【００３０】
また、本発明のクライアントは、下記（Ａ）〜（Ｄ）の手段を備え、上述のデバイスサーバとネットワークを介して接続し、デバイスサーバにローカル接続されたデバイスに対してアイソクロナス転送を行う。
（Ａ）ＵＳＢデバイスドライバが発行したアイソクロナス出力転送データを受け取り、該アイソクロナス出力転送データをＩＰパケットに変換してネットワーク通信制御ドライバに引き渡す手段
（Ｂ）転送データ蓄積用バッファを生成する手段
（Ｃ）ネットワーク通信制御ドライバに対して、予め設定された転送レートでアイソクロナス出力転送データを引き渡せない場合、転送データ蓄積用バッファにアイソクロナス出力転送データを蓄積する手段
（Ｄ）ネットワーク通信制御ドライバに対して、アイソクロナス出力転送データを引き渡せる状態になった場合に、転送データ蓄積用バッファに蓄積された転送データを引き渡す手段
【００３１】
本発明のクライアントによれば、無線ＬＡＮのようにネットワークのリンク切れやアグリゲーションの弊害でデータ転送が滞るような事象が発生してネットワーク環境が不安定になり、クライアントからアイソクロナス出力転送要求が滞る状況になった場合でも、クライアント側で転送データを転送データ蓄積用バッファにバッファリングできることから、アイソクロナス出力転送のネットワーク耐性をより向上できる。
【００３２】
また、本発明のデバイスサーバ制御プログラムは、上述のデバイスサーバとネットワークを介して接続され、デバイスサーバにローカル接続されたデバイスにアイソクロナス転送を行うプログラムであって、コンピュータを下記（ａ）〜（ｄ）の手段として機能させるクライアント搭載プログラムである。
（ａ）ＵＳＢデバイスドライバが発行したアイソクロナス出力転送データを受け取り、該アイソクロナス出力転送データをＩＰパケットに変換してネットワーク通信制御ドライバに引き渡す手段
（ｂ）転送データ蓄積用バッファを生成する手段
（ｃ）ネットワーク通信制御ドライバに対して、予め設定された転送レートでアイソクロナス出力転送データを引き渡せない場合、転送データ蓄積用バッファにアイソクロナス出力転送データを蓄積する手段
（ｄ）ネットワーク通信制御ドライバに対して、アイソクロナス出力転送データを引き渡せる状態になった場合に、転送データ蓄積用バッファに蓄積された転送データを引き渡す手段
【００３３】
クライアントに搭載される本発明のデバイスサーバ制御プログラムによれば、クライアントとデバイスサーバの両方にバッファを設けることにより、無線ＬＡＮのようにネットワークのリンク切れやアグリゲーションの弊害でデータ転送が滞るような事象が発生してネットワーク環境が不安定になり、クライアントからアイソクロナス出力転送要求が滞る状況になった場合でも、クライアント側で転送データを転送データ蓄積用バッファにバッファリングできることから、アイソクロナス出力転送のネットワーク耐性をより向上できる。
【００３４】
例えば、デバイスがＵＳＢスピーカを例にして説明すると、クライアントとデバイスサーバの両方にバッファを設けることにより、無線ＬＡＮ使用時などでネットワーク環境が不安定になっても、ネットワーク環境が回復するまで、クライアントは転送データ蓄積用バッファに音声転送データを蓄積し、デバイスサーバはデータバッファ部にバッファリングされた音声転送データをＵＳＢスピーカに出力する。そして、ネットワーク環境が回復した後に、クライアントは転送データ蓄積用バッファに蓄積された音声転送データをデバイスサーバに一括送信し、デバイスサーバは受信した音声転送データをデータバッファ部にバッファリングし、所定の転送レートで音声転送データをＵＳＢスピーカに出力する。これにより、安定した音声出力を行うことができる。
【発明の効果】
【００３５】
本発明は、デバイスがローカル接続されたデバイスサーバにおけるアイソクロナス出力転送において、ネットワークの遅延によるデータ転送量の起伏に伴う影響を無くし、アイソクロナス転送で保証すべきデータ転送量を維持でき、アイソクロナス出力転送のネットワーク耐性を向上するといった効果を奏する。
【図面の簡単な説明】
【００３６】
【図１】実施例１のデバイスサーバシステムの概念図
【図２】実施例１のデバイスサーバシステムの機能ブロック図
【図３】実施例１のデバイスサーバの状態遷移図
【図４】実施例１のデバイスサーバの動作フロー図（１）
【図５】実施例１のデバイスサーバの動作フロー図（２）
【図６】実施例１のデバイスサーバシステムにおけるアイソクロナス出力転送データのシーケンス図
【図７】実施例１のデバイスサーバシステムにおけるデータ量の説明図
【図８】実施例１のクライアントとデバイスサーバの各データバッファの保持データ量の説明図
【図９】従来のデバイスサーバシステムにおけるアイソクロナス出力転送データのシーケンス図
【発明を実施するための最良の形態】
【００３７】
以下、本発明の実施形態について、図面を参照しながら詳細に説明していく。なお、本発明の範囲は、以下の実施例や図示例に限定されるものではなく、幾多の変更及び変形が可能である。
【実施例１】
【００３８】
図１は、実施例１のデバイスサーバシステムの概念図である。クライアント１とデバイスサーバ２は無線ネットワーク４を介して接続されており、デバイスサーバ２にはＵＳＢ接続ケーブル５によりオーディオデバイスであるスピーカ３がローカル接続されている。
クライアント１は音楽データファイルを再生すると、無線ネットワーク４を介してデバイスサーバ２に音楽データがアイソクロナス出力転送される。デバイスサーバ２は内蔵されたデータバッファ部（図示せず）に転送データ（音楽データ）を保持し、バッファの保持データ量を判断して、スピーカ３に対して、転送データ（音楽データ）をアイソクロナス出力する。システムでは、クライアント１に搭載されているオーディオプレイヤーからネットワークを介してスピーカ３に対してオーディオデータ（音楽データ、音声データなど）をストリーミングデータとして転送する。この場合、一定時間あたりの最低限のデータ転送量を保証するアイソクロナス出力転送によって、オーディオデータが途切れることなくスピーカ３に転送される。
【００３９】
図２は、デバイスサーバシステムの機能ブロックの一例を示している。
図２に示すデバイスサーバシステムでは、クライアント１からネットワーク４経由でデバイスサーバ２にローカル接続されているＵＳＢデバイスのスピーカ３に対して転送データ（音楽データ）をアイソクロナス出力する。
ここで、ネットワーク４は、有線もしくは無線のネットワークである。図２では、クライアント１とデバイスサーバ２は１：１で接続されているが、それぞれ複数存在し、Ｎ：１、１：Ｎ、Ｎ：Ｍ（Ｎ，Ｍは２以上の自然数）で接続されるものでもよい。クライアント１とデバイスサーバ２との間の無線ネットワークは、アドホック接続でも無線アクセスポイントを介したインフラストラクチャー接続でも構わない。また、デバイスサーバ２にローカル接続されるＵＳＢデバイスは２台以上でもよいが、ＵＳＢ規格に従って一度に１台のデバイスと通信できるのは１台のクライアントのみである。
【００４０】
ここで、クライアント１は、一般的なパーソナルコンピュータと同様なハードウェア構成を備えており、図示しないＣＰＵ、入力部、表示部、メモリ、外部記憶部、図示するネットワークＩ／Ｆ１５などが内部バスで接続されている。
クライアント１には、記憶部（図示せず）に格納され、実行時にメモリに搭載されるアプリケーションの一つであるオーディオプレイヤー１１とＵＳＢ ＤＡＣドライバ１２とトンネリングドライバ１３がソフトウェア部品として存在している。この他、ソフトウェア部品としては、図示しないＯＳ（Operating System）、ＯＳと同時に起動しそのまま常に起動している図示しない常駐モジュール、通信制御ドライバ（ＴＣＰ／ＩＰ）１４があり、制御に必要な各種データと共に記憶部に格納されている。これらソフトウェア部品及び各種データは、ＣＰＵの制御に従い、メモリ上に読み出されて各種制御が実行される。
【００４１】
また、デバイスサーバ２には、ＵＳＢデバイスであるスピーカ３がＵＳＢ接続ケーブルによってローカル接続されている。
デバイスサーバ２は、ＵＳＢデバイスであるスピーカ３が接続されると、スピーカ３を認識して識別するためのＵＳＢデバイス情報を受信する。受信したＵＳＢデバイス情報に基づいて、スピーカ３とのデータ送受信に必要となるＵＳＢコアドライバ２２を生成し、スピーカ３を制御できる状態にする。
また、デバイスサーバ２は、受信したＵＳＢデバイス情報をクライアント１に送信する。
【００４２】
一方、ＵＳＢデバイスであるスピーカ３は、ハードウェアとしてＵＳＢデバイスＩ／Ｆ３１とＵＳＢ ＤＡＣ３２が存在し、クライアント１のＵＳＢ ＤＡＣドライバ１２とスピーカ３のＵＳＢ ＤＡＣ３２との間でオーディオデータを受け渡しする。このような構成によって、クライアント１側のオーディオプレイヤー１１と、スピーカ３の間でオーディオデータの受け渡しが可能になり、オーディオデータがスピーカ３から再生させる。
【００４３】
クライアント１のＵＳＢ ＤＡＣドライバ１２は、オーディオプレイヤー１１からのオーディオデータ出力要求（アイソクロナス出力転送要求）を、ＵＳＢ ＤＡＣ３２に応じたデータ形式に変換し、ＵＳＢのデータ形式に準拠したパケットデータに変換してトンネリングドライバ１３に渡す。また、トンネリングドライバ１３から送られてくるＵＳＢのデータ形式に準拠したパケットデータを、所定のデータ形式に変換してオーディオプレイヤー１１へ渡す。
【００４４】
トンネリングドライバ１３は、ＵＳＢ ＤＡＣドライバ１２から渡されたパケットデータをＩＰパケットにカプセル化する。その一方で、デバイスサーバ２からＩＰパケットを受信すると、ＩＰパケットから応答パケットデータを取り出し（デカプセル化して）、ＵＳＢ ＤＡＣドライバ１２に受け渡す。
また、トンネリングドライバ１３は、クライアント１のメモリ上にバッファ領域を確保する（クライアントバッファ１８）。無線ＬＡＮのようにネットワークのリンク切れやアグリゲーションの弊害でネットワーク環境が不安定になり、クライアントからアイソクロナス出力転送要求が滞る状況になった場合でも、バッファ領域を転送データ蓄積用バッファとして利用し、ＵＳＢ ＤＡＣドライバ１２から渡されたパケットデータをバッファリングできる。これにより、アイソクロナス出力転送要求が滞る状況になった場合でも、データの欠損を防いで、アイソクロナス出力転送のネットワーク耐性を向上できる。
【００４５】
一方、デバイスサーバ２には、ＵＳＢホストコントローラ２１とＵＳＢコアドライバ２２とトンネリングドライバ２３と通信制御ドライバ（ＴＣＰ／ＩＰ）２４とネットワークＩ／Ｆ２５が搭載されている。
トンネリングドライバ２３は、クライアント１からネットワーク４を介してＩＰパケットを受信すると、このＩＰパケットからＵＳＢのデータ形式に準拠したパケットデータを取り出し（デカプセル化して）、ＵＳＢコアドライバ２２に送る。また、ＵＳＢコアドライバ２２からＵＳＢのデータ形式に準拠したパケットデータを受け取って、ＩＰパケットにカプセル化する。
また、トンネリングドライバ２３は、デバイスサーバ２のメモリ上にバッファ領域を確保する（サーババッファ２８）。データバッファ部に相当するサーババッファ２８を確保することにより、アイソクロナス出力転送データの先読みが行え、受信した転送データをデータバッファ部に蓄積できる。データバッファ部の保持データ量を判断して、十分に保持データ量が蓄積された後に、ＵＳＢデバイスに対してアイソクロナス出力転送を開始することにより、ネットワーク環境が不安定になりクライアントからアイソクロナス出力転送要求が滞る状況になった場合にも、ＵＳＢデバイスに対してアイソクロナス転送で保証すべきデータ転送量を維持できる。
【００４６】
また、ＵＳＢデバイスのスピーカ３は、ＵＳＢ ＤＡＣ３２とＵＳＢデバイスＩ／Ｆ３１と図示しないＵＳＢガジェットドライバと音声再生アプリケーションが搭載されている。デバイスサーバ２は、予め設定された転送レートで、スピーカ３に対して、オーディオデータをアイソクロナス出力転送する。
このような構成によって、クライアント１のＵＳＢ ＤＡＣドライバ１２と、スピーカ３のＵＳＢ ＤＡＣ３２との間でオーディオデータの安定した受け渡しが可能になり、オーディオデータがスピーカ３から再生できる。
【００４７】
実施例１のデバイスサーバ２は、３つの状態（モード）があり、それぞれの状態によって動作が切り替わる。図３に実施例１のデバイスサーバ２の状態遷移図を示す。図３における状態Ａ〜状態Ｃについては、下記表１に示す違いがある。
【００４８】
【表１】
2015152945.tif 000003
【００４９】
状態Ａ（ＢＵＦＬＯＷ）とは、デバイスサーバ２のサーババッファ２８が下限閾値に達した状態である。
状態Ｂ（ＢＵＦＭＩＤ）とは、デバイスサーバ２のサーババッファ２８が中間閾値にある状態である。
状態Ｃ（ＢＵＦＨＩＧ）とは、デバイスサーバ２のサーババッファ２８が上限閾値に達した状態である。
【００５０】
ここで、状態Ａ〜状態Ｃの間のそれぞれの状態遷移の条件は次の通りである。
クライアント１からアイソクロナス出力転送が開始された際の初期状態は、状態Ａ（ＢＵＦＬＯＷ）である。その後アイソクロナス出力転送要求を受信することによりサーババッファ２８の保持データ量が増加し、上限閾値に到達した場合に、状態Ａ（ＢＵＦＬＯＷ）から状態Ｃ（ＢＵＦＨＩＧ）に遷移する。例えば、サーババッファ２８のサイズが１００とすると、上限閾値は９０である。（以下、この状態Ａから状態Ｃに遷移するまでを場合（３）と呼ぶ）
【００５１】
つぎに、状態Ｃ（ＢＵＦＨＩＧ）に遷移した後、クライアント１からのアイソクロナス出力転送要求量よりバッファからデバイス側に出力される量が多く、サーババッファ２８の保持データ量が減少し上限閾値の８０％である中間閾値以下になると、状態Ｃ（ＢＵＦＨＩＧ）から状態Ｂ（ＢＵＦＭＩＤ）に遷移する。（以下、状態Ｃから状態Ｂに遷移するまでを場合（１）と呼ぶ）
状態Ｂ（ＢＵＦＭＩＤ）に遷移した後、クライアント１からのアイソクロナス出力転送要求量がバッファからデバイス側に出力される量より多く、再びサーババッファ２８の保持データ量が増加し上限閾値に到達した場合に、状態Ｂ（ＢＵＦＭＩＤ）から状態Ｃ（ＢＵＦＨＩＧ）に遷移する。また一方、状態Ｂ（ＢＵＦＭＩＤ）に遷移した後、クライアント１からのアイソクロナス出力転送要求量よりバッファからデバイス側に出力される量より多い結果、サーババッファ２８の保持データ量が空になる、すなわち０（ゼロ）になると（この場合、下限閾値を０に設定している）、状態Ｂ（ＢＵＦＭＩＤ）から状態Ａ（ＢＵＦＬＯＷ）に遷移する。（以下、状態Ｂから状態Ｃに遷移するまでと状態Ｂから状態Ａに遷移するまでを場合（２）と呼ぶ）
【００５２】
次に、実施例１のデバイスサーバ２のバッファリングの動作フローについて説明する。
バッファリングの動作は、上述の場合（１）から（３）によって切り替わる。
（１）：サーババッファ２８の保持データ量が上限閾値に到達した状態（状態Ｃ）から始まり、中間閾値（上限閾値の８０％）以下になる状態（状態Ｂ）迄
予め決定された転送レートでスピーカ３に対してアイソクロナス出力転送を行い、クライアント１からアイソクロナス出力転送要求を受信すると、スピーカ３に対してアイソクロナス出力転送が完了した場合に、クライアント１に応答が返せていない要求があれば、クライアント１に対して転送完了応答を返し、受信した転送データをサーババッファ２８に蓄積する。
（２）：サーババッファ２８の保持データ量が中間閾値（上限閾値の８０％）以下になった状態（状態Ｂ）から始まり、上限閾値に到達する状態（状態Ｃ）迄、或は、保持データ量が下限閾値０（ゼロ）になる状態（状態Ａ）迄
予め決定された転送レートでスピーカ３に対してアイソクロナス出力転送を行い、クライアント１からアイソクロナス出力転送要求を受信すると、即時にクライアント１に対して転送完了応答を返し、受信した転送データをサーババッファ２８に蓄積する。
（３）：サーババッファ２８の保持データ量が下限閾値０（ゼロ）になった状態（状態Ａ）から始まり、上限閾値に到達する状態（状態Ｃ）迄
スピーカ３に対してアイソクロナス出力転送を行わず、クライアント１からアイソクロナス出力転送要求を受信すると、即時にクライアント１に対して転送完了応答を返し、受信した転送データをサーババッファ２８に蓄積する。
【００５３】
実施例１のデバイスサーバ２のバッファリングの動作フローは、クライアント１からアイソクロナス出力転送要求を受信する処理で行う場合と、ＵＳＢデバイスのスピーカ３に転送データ送信完了割り込み処理で行う場合に分けられる。前者の受信処理で状態Ａ（ＢＵＦＬＯＷ）から状態Ｃ（ＢＵＦＨＩＧ）への遷移が発生し、後者の割り込み処理でそれ以外の遷移が発生する。前者の受信処理の動作フローを図４に、後者の割り込み処理の動作フローを図５に示す。
以降の説明において、データバッファはサーババッファ２８に相当する。
【００５４】
まず、受信処理の動作フローについて、図４を参照して説明する。上述したように受信処理では、状態Ａ（ＢＵＦＬＯＷ）から状態Ｃ（ＢＵＦＨＩＧ）への遷移が発生する。受信処理は、クライアント１から送られた転送要求に対して転送方式を判定する（Ｓ１０１）。転送方式がアイソクロナス出力転送要求以外であれば転送要求に応じた（例えば、バルク転送など）通常の処理を行う（Ｓ１０２）。転送方式がアイソクロナス出力転送要求であれば、アイソクロナス出力転送データを受信する（Ｓ１０３）。
受信処理は、クライアント１からアイソクロナス出力転送要求を受信した後、クライアント１に対して転送完了応答を返すために、転送成功応答パケットを作成し（Ｓ１０５）、転送成功応答パケットをキューに格納する（Ｓ１０６）。ここでいうキューとは、転送成功応答パケットの待ち行列のことであり、格納された転送成功応答パケットは後述するフローに従って順次クライアントへ返していくことになる。
【００５５】
そして、受信処理は、デバイスサーバ２のモード（状態）を判定する（Ｓ１０７）。モード判定の結果、現在のモードが状態Ａ（ＢＵＦＬＯＷ）である場合、受信データをデータバッファへ格納する（Ｓ１０８）とともに、転送成功応答パケットをクライアント１に返す（Ｓ１０９）。その後、転送データを蓄積しているデータバッファの状態を判別する（Ｓ１１０）。
データバッファの保持データ量がフル（上限閾値に到達）であれば、モードを状態Ａ（ＢＵＦＬＯＷ）から状態Ｃ（ＢＵＦＨＩＧ）に変更して（Ｓ１１１）、ＵＳＢデバイスのスピーカ３にデータバッファに蓄積されたデータをアイソクロナス出力転送する（Ｓ１１２）。
【００５６】
一方、モード判定（Ｓ１０７）の結果、現在のモードが状態Ｂ（ＢＵＦＭＩＤ）である場合、受信データをデータバッファへ格納し（Ｓ１１５）、転送成功応答パケットをクライアント１に返す（Ｓ１１６）。また、モード判定の結果、現在のモードが状態Ｃ（ＢＵＦＨＩＧ）である場合、受信データをデータバッファへ格納する（Ｓ１１８）だけで、転送成功応答パケットをクライアント１に返さない。
【００５７】
次に、割り込み処理の動作フローについて、図５を参照して説明する。上述したように割り込み処理では、状態Ａ（ＢＵＦＬＯＷ）から状態Ｃ（ＢＵＦＨＩＧ）への遷移以外が発生する。割り込み処理は、ＵＳＢデバイスのスピーカ３に対してアイソクロナス出力転送の完了割り込み（Ｓ２０１）によって動作するため、例えば、アイソクロナス出力転送が１００ｍｓ毎に行われる場合は、１秒間に１０回の完了割り込みがあり、割り込み処理は１秒間に１０回起動されることになる。
割り込み処理は、転送方式を判定し（Ｓ２０２）、転送方式がアイソクロナス出力転送要求以外であれば転送要求に応じた通常の処理を行う（Ｓ２０３）。
【００５８】
そして、割り込み処理は、デバイスサーバ２のモード（状態）を判定する（Ｓ２０５）。モード判定の結果、現在のモードが状態Ｃ（ＢＵＦＨＩＧ）である場合、転送データを蓄積しているデータバッファにおいて、未送信のバッファデータをＵＳＢデバイスのスピーカ３に対してアイソクロナス出力転送し（Ｓ２０６）、そして、キューに応答パケットデータが蓄積されていれば、転送成功応答パケットをクライアント１に返し、蓄積されていなければ転送成功応答パケットをクライアント１に返さない（Ｓ２０７）。
その後、データバッファの状態を判別する（Ｓ２０８）。判別の結果、データバッファの保持データ量（バッファリング量）が上限閾値の８０％（中間閾値）以下であれば、モードを状態Ｃ（ＢＵＦＨＩＧ）から状態Ｂ（ＢＵＦＭＩＤ）に変更する（Ｓ２０９）。
【００５９】
一方、モード判定（Ｓ２０５）の結果、現在のモードが状態Ｂ（ＢＵＦＭＩＤ）である場合、転送データを蓄積しているデータバッファにおいて、未送信のバッファデータをＵＳＢデバイスのスピーカ３に対してアイソクロナス出力転送する（Ｓ２１１）。その後、データバッファの状態を判別する（Ｓ２１２）。判別の結果、データバッファの保持データ量（バッファリング量）が上限閾値を超えていれば、モードを状態Ｂ（ＢＵＦＭＩＤ）から状態Ｃ（ＢＵＦＨＩＧ）に変更する（Ｓ２１３）。一方、判別の結果、データバッファの保持データ量（バッファリング量）が０（ゼロ）であれば、モードを状態Ｂ（ＢＵＦＭＩＤ）から状態Ａ（ＢＵＦＬＯＷ）に変更する（Ｓ２１４）。なお、判別の結果、データバッファの保持データ量（バッファリング量）が上限閾値を超えてもおらず、かつ、０（ゼロ）でなければ、モードの変更は行わない。
【００６０】
以降では、本発明のデバイスサーバを用いたデバイスサーバシステムのシーケンスについて、説明を行う。
まず、図９は、従来のデバイスサーバのアイソクロナス出力転送データシーケンスを示している。図９のデータシーケンスでは、クライアント１がデバイスサーバ２とネットワーク４で接続され、デバイスサーバ２とＵＳＢデバイスのスピーカ３がＵＳＢ接続されている状況下で、クライアント１からアイソクロナス出力転送要求が出された場合のデータシーケンスを示している。先ず、クライアント１からアイソクロナス出力転送要求（Isoc−out転送要求Ｃ１）があり、デバイスサーバ２のトンネリングドライバ２３がそれを受けてＵＳＢコアドライバ２２にアイソクロナス出力転送要求（Isoc−out転送要求Ｃ２）を行う。ＵＳＢコアドライバ２２はスピーカ３に対してＵＲＢ単位でアイソクロナス出力転送要求（Isoc−out転送要求Ｃ３）を行う。アイソクロナス出力転送が無事完了すると（Ｃ８）、転送応答（ＯＫ）Ｃ９がＵＳＢコアドライバ２２から出され、トンネリングドライバ２３によってクライアント１に転送完了応答Ｃ１０が送られる。
【００６１】
以上の通り、従来のデバイスサーバのアイソクロナス出力転送の場合、クライアントからアイソクロナス出力転送要求（Isoc−out転送要求）によりオーディオデータが送信され、デバイスサーバは、トンネリングドライバでデカプセル化してＩＰパケットをＵＳＢ準拠データに変換し、ＵＳＢコアドライバに対してそのまま出力する。ＵＳＢコアドライバは、予め定義されたインターバルに合せて、アイソクロナス出力転送要求（Isoc−out転送要求）でスピーカに対してデータ送信する。
クライアントから送信されるアイソクロナス出力転送要求（Isoc−out転送要求）のオーディオデータがＵＳＢコアドライバのキュー（Queue）に積みきれない場合（Ｃ１３）、ＵＳＢコアドライバは、エラーコード（ＥＦＢＩＧ）をデバイスサーバに返す（Ｃ１４）。
【００６２】
例えば、ネットワークレベルでリンクが切れて復帰した際に、クライアント１から一度に複数のアイソクロナス転送要求が出されて（Ｃ１，Ｃ４，Ｃ６）、大量のデータが転送される場合がある。この場合、クライアント１からアイソクロナス出力転送要求に続いて、次のアイソクロナス出力転送要求が出され、デバイスサーバ２のトンネリングドライバ２３がそれを受けてＵＳＢコアドライバ２２にアイソクロナス出力転送要求を行うものの（Ｃ１３）、アイソクロナス転送のスケジューリングができない現象が発生し、ＵＳＢコアドライバ２２から転送応答としてエラーが返される（Ｃ１４）。
すなわち、従来のデバイスサーバでは、ＵＳＢコアドライバ２２のスケジューラがスケジューリングできないほどのアイソクロナス出力転送要求が出されると、ＵＳＢコアドライバ２２はエラー応答を返し、クライアント１はエラーを受けて、デバイスサーバ２との間の通信セッションを切断する。
【００６３】
つぎに、従来のデバイスサーバのアイソクロナス出力転送例として、時間経過に従って、クライアント側入力データ量と、クライアント側バッファ量と、ネットワークデータ量と、ＵＳＢデバイス側への出力量の変化について下記表２に示す。下記表２では、１０ｍｓ毎にクライアント側入力データ量が１０発生し、発生の都度、ネットワークに流す。そのため、通常時（０〜３０ｍｓ，９０〜１１０ｍｓ）はクライアント側入力データ量とネットワークデータ量が等しくなっている。そして、通常時にはクライアントバッファに蓄積されることはなく、クライアント側バッファ量は０になっている。また通常時、ＵＳＢデバイス側への出力量は、ネットワークに流れるデータ量がそのまま出力量になっている。ＵＳＢデバイス側への出力量は予め決められた転送レートにより１０のデータ量が出力される。
しかし、ネットワークが不安定になった時間帯（４０〜６０ｍｓ）では、ネットワークデータ量が減少ないし０（ゼロ）になり、その代り、クライアント側バッファに転送データが蓄積され、クライアント側バッファ量は増加している。ネットワークデータ量が減少ないし０（ゼロ）になったことから、ＵＳＢデバイス側への出力量も、ネットワークに流れるデータ量がそのまま出力量になり、減少ないし０（ゼロ）になっている。ネットワークが回復すると（７０ｍｓ）、クライアント側バッファに蓄積されたデータがネットワークを流れる。
表２から、ネットワークが不安定になった時間帯（５０〜６０ｍｓ）には、ＵＳＢデバイス側への出力量は０（ゼロ）となり、データの欠落が生じていることがわかる。
【００６４】
【表２】
2015152945.tif 000004
【００６５】
本発明では、以上述べた様な問題点も解決できる。
図６は、実施例１のデバイスサーバ２のアイソクロナス出力転送データシーケンスを示している。実施例１のデバイスサーバ２のアイソクロナス出力転送データシーケンスでは、上述した従来のデバイスサーバのアイソクロナス出力転送データシーケンス（図９）と異なり、デバイスサーバ２は、デバイスサーバ２のバッファに空きがある場合、クライアント１から送信されるアイソクロナス出力転送要求（Isoc−out転送要求）を受信すれば、すぐに転送完了応答（成功応答）をクライアント１に返信する（Ｃ１〜Ｃ８）。
クライアント１のＯＳ（Operating System）によって異なるが、ＯＳによってはアイソクロナス出力転送プロトコルで、応答が返ってきたタイミングに応じて次の要求を送り出す。すなわち、デバイスサーバ２側では、アイソクロナス出力転送データの先読みができることになる。なお、アイソクロナス出力転送プロトコルで応答が返ってきたとしても、応答は無視され、常に規定の時間で次の要求を送り出すＯＳもある。
【００６６】
デバイスサーバ２は、デバイスサーバ２のバッファが上限閾値に到達するまで、ＵＳＢコアドライバ２２に対して転送データの出力を保留する。バッファが上限閾値に到達したタイミングで、１００ｍｓ程度のデータを、ＵＳＢコアドライバ２２に対して転送データを出力する（Ｃ９，Ｃ１０）。以降は、ＵＳＢデバイスのスピーカ３からの転送応答（Ｃ１３，Ｃ１７，Ｃ２２，Ｃ２５）によって起動されるデバイスサーバ２の割り込み処理（送信完了割り込みハンドラの処理）において、ＵＳＢコアドライバ２２に転送データを出力する（Ｃ１４，Ｃ１８，Ｃ２３，Ｃ２６）。
デバイスサーバ２は、デバイスサーバ２のサーババッファ２８が上限閾値に到達すると、場合（１）に遷移し、ＵＳＢデバイスにデータ出力転送を始めるが、それとともにクライアント１に応答を返すタイミングを遅延させてもよい。上述したように、ＯＳによってはアイソクロナス出力転送プロトコルで、応答が返ってきたタイミングに応じて次の要求を送り出すため、応答を返すタイミングを遅らせることで、デバイスサーバ２のサーババッファ２８が溢れないように制御することができるからである。
【００６７】
【表３】
2015152945.tif 000005
【００６８】
実施例１のデバイスサーバ２のアイソクロナス出力転送例として、時間経過に従って、クライアント１側入力データ量と、クライアント１側バッファ（クライアントバッファ１８に相当）量と、ネットワークデータ量と、デバイスサーバ２側バッファ（サーババッファ２８に相当）量と、ＵＳＢデバイス側（スピーカ３に相当）への出力量の変化について上記表３に示す。表３は、上述の表２と同様に、１０ｍｓ毎にクライアント１側入力データ量が１０発生し、発生の都度、ネットワークに流す。表２と同様に、通常時（０〜３０ｍｓ，９０〜１１０ｍｓ）はクライアント１側入力データ量とネットワークデータ量が等しくなっている。しかし、表２と異なり、そのままＵＳＢデバイス側へ出力しないで、デバイスサーバ２側バッファに蓄える。そのため、３０ｍｓの時間が経過した段階で、デバイスサーバ２側バッファ量は、４０に増加している。デバイスサーバ２のバッファの上限閾値の設定が４０であったとすると、上限閾値に到達したため、４０ｍｓの時間経過から所定の転送レート（この場合は１０）でＵＳＢデバイス側へのデータ出力を開始する。
【００６９】
そして、ネットワークが不安定になった時間帯（４０〜６０ｍｓ）では、表２と同様に、ネットワークデータ量が減少ないし０（ゼロ）になり、その代り、クライアント１側バッファに転送データが蓄積され、クライアント１側バッファ量は増加している。しかし、表２と異なり、ネットワークデータ量が減少ないし０（ゼロ）になっても、デバイスサーバ２はバッファ内の保持データをＵＳＢデバイス側へ出力するため、ＵＳＢデバイス側への出力量は１０のまま維持できている。ネットワークが回復すると（７０ｍｓ）、クライアント１側バッファに蓄積されたデータがネットワークを流れ、デバイスサーバ２側バッファ量が増加する。
表３に示すように、４０ｍｓの時間経過から所定の転送レート（この場合は１０）でＵＳＢデバイス側へのデータ出力量を一定量に継続できていることがわかる。
このように、実施例１のデバイスサーバシステムの場合、ネットワークの混雑などでアイソクロナス転送のスケジューリングができない現象が発生した場合でも、アイソクロナス転送で保証すべきデータ転送量を維持できることがわかる。
【００７０】
図７は、実施例１のデバイスサーバシステムにおけるデータ量の説明図である。また、図８は、クライアント１とデバイスサーバ２のバッファの保持データ量の説明図である。
図７では、クライアント１上のＵＳＢ ＤＡＣドライバ１２の出力データ量（クライアント上のトンネリングドライバ１３の入力データ量）、ネットワークに流れるデータ量、ＵＳＢデバイスに出力されるデータ量が、遅延によりどのように遷移するか示している。図７において、横軸単位は１０ｍｓであり、縦軸はデータ量を示している。図７に示す例では、４０ｍｓから６０ｍｓにかけてネットワークに流れるデータの遅延、停滞が発生している。ＵＳＢデバイスへは、ある程度データが溜まった後（４０ｍｓ分の転送データが溜まった後)に送信を開始している。つまり、８０ｍｓにおいて、４０ｍｓ分の転送データ量が、一気にネットワークへ流れることになる。しかしデバイスサーバのバッファの存在によりＵＳＢデバイスへの出力データ量は一定に保たれている。
【００７１】
図８は、図７に示すようなネットワークに流れるデータの遅延が発生した場合の、クライアント１側とデバイスサーバ２側のバッファに蓄えられるデータ量を示している。図８において、横軸単位は１０ｍｓであり、縦軸はデータ量を示している。デバイスサーバ２側のバッファが無くなる前にネットワークが復旧し、クライアント１側バッファ に溜まった分が一気に放出されている（図８の７０〜８０ｍｓを参照）。実施例１のデバイスサーバ２の場合、クライアント１から流れるデータをデバイスサーバ２側バッファで受け止めるとともに、ＵＳＢデバイスへ一定の転送レートでデータ転送することが可能である。
【００７２】
なお、上述の実施例では、クライアントがネットワークを介してＵＳＢデバイスのスピーカを利用するデバイスサーバシステムを例に説明したが、本発明の適用範囲はこれに限定されず、ＵＳＢ通信規格と同等の通信方式、例えば、ＩＥＥＥ１３９４など別のインタフェースに準拠したものであってもよい。
【産業上の利用可能性】
【００７３】
本発明は、ＵＳＢデバイスなどの周辺デバイスの利便性を高めるデバイスサーバシステムに有用である。
【符号の説明】
【００７４】
１  クライアント
２  デバイスサーバ
３  スピーカ
４  無線ネットワーク
５  ＵＳＢ接続ケーブル
【図１】
2015152945.tif 000006
【図２】
2015152945.tif 000007
【図３】
2015152945.tif 000008
【図４】
2015152945.tif 000009
【図５】
2015152945.tif 000010
【図６】
2015152945.tif 000011
【図７】
2015152945.tif 000012
【図８】
2015152945.tif 000013
【図９】
2015152945.tif 000014