0

キャプチャ カードから複数のビデオを同時に再生するマルチメディア アプリケーションを使用しています。私が達成しようとしているのは、アプリケーションまたはシステム レベルでグローバル ボリュームに影響を与えることなく、1 つまたは複数の入力ストリームを個別にミュートすることです。

私の仮定は、入力ストリームごとに mpeg-2 demux フィルターのインスタンスがあるということです。その場合、各インスタンスのプロパティにアクセスして、音量レベル (0 または通常) を設定できます。

キャプチャ カードのオーディオは demux にルーティングされるため、DVD-DV オーディオ フィルタが分離されていて、Windows オーディオ システムにルーティングされるチャネルのグループとして制御できるかどうかはわかりません。

IBasicAudioを使用することをお勧めしますが、フィルター グラフ マネージャーからインターフェイスを取得する方法がわかりません。GraphEdit を使用して取得したものは次のとおりです。

フィルタ グラフ

どんな助けでも大歓迎です。

4

1 に答える 1

1

フィルタ グラフ マネージャのIBasicAudio実装は、最初の適切なフィルタ実装への呼び出しの単純な転送に他なりませんIBasicAudio。つまり、グラフにオーディオ ストリームが 1 つあれば、うまくいく可能性があります。そこに 2 つ以上ある場合は、オーディオ レンダラー フィルターを見つけて、それらのIBasicAudio.

MSDN では、常に FGM を介してクエリを実行するように指示されていますが、これは、オーディオ フィード/レンダラーが 1 つしかない場合にのみ有効なアドバイスです。

このインターフェイスは、Audio Renderer (WaveOut) フィルターと DirectSound Renderer フィルターに実装されますが、フィルター グラフ マネージャーを介してアプリケーションに公開されます。アプリケーションは常にフィルタ グラフ マネージャからこのインターフェイスを取得する必要があります。

取得の非常に基本的なパスIBasicAudioは次の\Samples\Players\PlayWnd\MainForm.csとおりです。

  this.graphBuilder = (IGraphBuilder) new FilterGraph();

  // [...]

  // Query for audio interfaces, which may not be relevant for video-only files
  this.basicAudio = this.graphBuilder as IBasicAudio;

これは、MSDN が示唆しているように、FGM を介してインターフェイス ポインターを取得します。グラフ内の単一のオーディオ ストリームの場合にうまく機能します。

于 2013-09-04T06:13:21.713 に答える