DirectShowフィルターにレンダラーを追加するのはなぜグラフへのオーディオ入力をスムーズにしているのですか?
-
27-10-2019 - |
質問
DELPHI 6アプリケーションには、DSPACKコンポーネントライブラリで構築されたDirectShowフィルターグラフがあります。グラフの構造は次のとおりです。
- カスタムプッシュソースオーディオフィルター
- サンプルグラバー
- ティーフィルター(ただし、WAVファイルライターとレンダラーの両方をオンにした場合にのみ)
- レンダラー(優先PC出力デバイス)
- WAVファイルライター
ティーフィルターは、私が持っている場合にのみグラフに追加されます 両方 レンダラーとWAVファイルライターフィルターがオンになりました。それ以外の場合は、フィルターのみを接続します は サンプルグラバーに直接オンにしました。
オーディオは、オーディオをリアルタイムでストリーミングしているWiFi接続RTSPオーディオサーバーで配信されています。もし私が しないでください WAVファイルライターをオンにすると、ヘッドフォンが出てくるオーディオには、緩衝されていないオーディオストリームに関連付けられた典型的なポンピングと時折のクリック音があります。奇妙なことに、WAVファイルライターフィルターをオンにするとすぐに、オーディオはガラスとして滑らかになります。
WAVファイルライターのソースコードがあり、基本的には、必要に応じて適切なWAVファイルヘッダーを出力し、必要に応じてオーディオバッファーを書き込むタスクを処理します。そのため、特にレンダラー(フィルター)の上流ではなく、代わりにレンダラーと一緒にティーフィルターの端からぶら下がっているピアフィルターであるため、着信オーディオストリームを滑らかにすると奇妙になります。
ファイルライターフィルターをオンにしたときにオーディオ配信をスムーズにするために何が起こっているのか教えてもらえますか?ティーフィルターは固有のバッファリングを行いますか?同じメカニズムを複製して、ファイルライターがオンになっていないときにスムーズなオーディオを作成できるようにしたいと思います。リアルタイムのオーディオストリームにこれ以上遅れを追加したくないので、自分のバッファリングを追加しないようにしようとしています。
解決
ライブソースがあり、それを聞くことと配信されたオーディオを同時に聴くことができる場合、ファイルライターを追加すると遅延を導入するかどうかを判断できる場合があります。または、サイズの変更または交渉されたバッファーの数がある場合があります DecideBufferSize
.
メディアサンプルのタイムスタンプにオフセットを追加するなど、プッシュフィルターに明示的なバッファリングを導入することをお勧めします。ティーフィルターでの固有のバッファリングは信頼できない場合があります。納期の変動は避けられません。
より洗練されたアプローチは、最小限のバッファリングまたはなしで実行する必要がある場合は、ピッチを保存しながらオーディオをストレッチ/圧縮することです。