私はビデオプレーヤーを書いています。オーディオ部分については、XAudio2 を使用しています。このために、BufferEndイベントを待っている別のスレッドがあり、その後、バッファに新しいデータを入力してSubmitSourceBufferを呼び出します。問題は、バッファー サイズが小さい (1024 バイト) 場合、XAudio2 (ドライバーまたはサウンド カード) が次のバッファーを再生する前に大きな遅延が発生することです。測定を行ったところ、XAudio はこのようなチャンクの再生に最大 2 倍の時間を要しました。(48khz の 2 チャンネル pcm の 1024 バイトのチャンクは、ほぼ 5 ミリ秒で再生されるはずですが、私のコンピューターでは最大 10 ミリ秒で再生されます)。また、バッファを4kバイト以上にすると、遅延はほとんどありません。ビデオクロックまたは外部クロックと同期できるようにするには、このような小さなバッファーが必要です (ffplay のように)。バッファを大きくしすぎると、エンドユーザーは、同期による出力で多くのノイズを聞くことになります。
また、オーディオをデコードおよび同期するすべての機能、または遅延をブロックまたは生成する可能性のあるその他の機能について測定を行いました。実行には0または1ミリ秒かかるため、100%問題ではありません。
それが何であり、なぜそれが起こっているのか誰か知っていますか? 小さなバッファで同じ遅延の問題があるかどうかを誰かが確認できますか?