次の方法で共有


ジッター バッファ

ジッター バッファ

Microsoft® DirectPlay® Voice には、ジッター バッファという特徴的な機能がある。ジッター バッファは、最小限の遅延時間で最適な音質を提供する、柔軟なバッファリング アルゴリズムである。

混雑したネットワークでは、音声データ情報の各パケットが、ホスト コンピュータでエンコードされたときと異なった順序で届くことがある。音声データは本来連続したものなので、パケットが万一遅れても順序よく再生するために、これらの受信パケットは、しばらくキューに入れておく必要がある。

音声通信の品質を最大にするようにジッター バッファを設定すると、必要な数の音声パケットが届き、キューに配置されるまでに時間がかかる。このために音声が遅れ、音声通信をリアルタイムに聞くことができない。代わりに、音声データが聞こえるタイミングは、録音より数ミリ秒から数秒ほど遅れる可能性がある。プレーヤが協力し合うゲームでは、この遅れによって問題が発生する。 ゲームでイベントが発生したときに、プレーヤがそのイベントに基づいてリアルタイムに情報をやり取りできないからである。たとえば、一人称型のシューティング ゲームで、プレーヤが背後から攻撃されそうになって仲間が警告しようとしても、攻撃されてしまうまで音声通信が聞こえない可能性がある。

遅延時間を減らすようにジッター バッファを設定すると、キューを一杯にするために必要なパケット数が少なくなる。ただしこの場合、連続パケットの一部が間に合わず、その結果、再生時にバッファ内に音声データが揃っていない可能性がある。音声通信が聞こえるタイミングは、実際の録音とほぼ一致している。ただしこの場合、音声が "こま切れ" で品質は低い。

DirectPlay ジッター バッファでは、最小限の遅延時間で最高品質の音声通信を提供する方法を、2 つの方法により判断する。最初に、ネットワークの状態を監視して、遅れや混雑状況を判断する。次に、音声の中断を最小限に抑えながら遅延時間を可能な限り短縮するため、ジッター バッファ (またはキュー) のサイズを動的に調整する。

DirectPlay Voice ジッター バッファは、ネットワークの状態に合わせて自動的に調整される (デフォルト動作の場合)。アルゴリズムでネットワークの状態をどの程度厳密に追跡するかは、DVCLIENTCONFIG 構造体の dwBufferAggressiveness メンバと dwBufferQuality メンバを使って手動で調整できる。"アグレッシブネス (即応性)" のレベルを上げるほど、ネットワークの状態が厳密に監視される。通常、品質の値が高いほど音質は上がるが、遅延時間は長くなる。また、値が小さいほど、遅延時間は短くなるが音質は低下する。IDirectPlayVoiceClient::Connect を呼び出してセッションに接続するときは、これらの 2 つのメンバを設定できる。 また、IDirectPlayVoiceClient::SetClientConfig を呼び出して、セッション中はいつでも設定できる。

アグレッシブネスのレベルは、ゲーム アプリケーション実行中のネットワーク状態に合わせて選択することが重要である。ネットワーク パフォーマンスが安定しているときに高レベルのアグレッシブネスが選択されていると、一時的な問題が誤まって解釈され、存在しないかもしれない問題が過剰に補正される可能性があるためである。