我正在使用一个多媒体应用程序,该程序可以同时从捕获卡播放多个视频。我要实现的目的是在不影响应用程序或系统级别的全局容量的情况下,分别静音一个或多个输入流。

我的假设是每个输入流都有一个mpeg-2多路分解器实例。如果是这样,我们可以访问每个实例的属性以设置音量级别(0或正常)。

由于捕获卡的音频被路由到多路分配器中,所以我不确定DVD-DV音频滤波器是否是分离的,是否可以作为一组路由到Windows音频系统的通道进行控制。

一些挖掘建议使用IBasicAudio,但我不确定如何从“过滤器图形管理器”中检索接口(interface)。这是我使用GraphEdit得到的:

任何帮助,将不胜感激。

最佳答案

Filter Graph Manager的IBasicAudio实现只不过是将调用简单地转发到第一个合适的实现IBasicAudio的过滤器。也就是说,如果图形中有一个音频流,则可能效果很好。如果有两个或多个,则需要找到音频渲染器过滤器并使用其IBasicAudio

MSDN指示您始终通过FGM查询,但这仅在您有一个音频源/渲染器的情况下才是一个很好的建议。



获取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获取接口(interface)指针。在图形中只有单个音频流的情况下效果很好。

08-16 01:18