1

今日、私が作成した DirectShow グラフを使用してテストを実行しました。このグラフには、グラフの上部にある VOIP 電話に割り当てられたキャプチャ フィルタが含まれていました。アプリは、フィルター グラフの操作の一部として、キャプチャ フィルターからオーディオを取得し、WAV ファイルを書き込みます。好奇心から、プログラムの 2 つのコピーを実行しましたが、そのうちの 1 つがキャプチャ デバイスが「使用中」であるというエラーをスローすることを完全に期待していました。驚いたことに、プログラムの両方のコピーが正常に動作し、それぞれが録音されたオーディオの独自の WAV ファイルを作成しました。両方のファイルのオーディオはスムーズで問題なく、含まれているオーディオ データに関しては互いに双子でした。

すべての DirectShow キャプチャ フィルターが、複数のフィルター グラフ間で共有される機能を示すと期待できますか? または、すべてのデバイス/ドライバーが異なりますか?

4

1 に答える 1

2

フィルター インスタンスが排他的アクセス リソース (ハードウェア、特定の TCP ポートなど) を内部で共有しない場合は、プロセス内または複数のプロセス内でそれらを自由に複製できます。特定のフィルターがシステム全体の単一のインスタンスでのみアクティブになるという意味はありません。

重要な例は次のとおりです。

  • USB ビデオ キャプチャ: 通常、ビデオ キャプチャ デバイスは 1 つのアプリケーションのみが使用することを意図しているため、アクティブになるとすぐにロックされ、他のアプリケーションやフィルタ インスタンスからキャプチャすることはできません。

  • オーディオ再生: オーディオ用の一般的なユーザー モード API は、実際の再生実装の上にあるレイヤーであり、内部的にドライバーが複数のオーディオ対応アプリケーションからのオーディオをミックスします。したがって、オーディオを再生する場合、実際のデバイスはアプリケーション間で共有され、アプリケーションからのオーディオを透過的に結合するコードが実行されているため、排他ロックは関与しません。

于 2011-11-20T08:10:25.513 に答える