0

我正在使用从采集卡同时播放多个视频的多媒体应用程序。我想要实现的是单独静音一个或多个输入流,而不影响应用程序或系统级别的全局音量。

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

由于采集卡音频被路由到解复用器,我不确定 DVD-DV 音频过滤器是否是独立的,并且可以作为一组路由到 Windows 音频系统的通道进行控制。

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

过滤器图

任何帮助,将不胜感激。

4

1 回答 1

1

Filter Graph Manager 的IBasicAudio实现只不过是对第一个合适的过滤器实现的调用的简单转发IBasicAudio。也就是说,如果图表中有一个音频流,它可能会很好。那里有两个或更多,您将需要找到音频渲染器过滤器并使用它们的IBasicAudio.

MSDN 指示您始终通过 FGM 进行查询,但仅当您有一个音频馈送/渲染器时,这是一个很好的建议。

此接口在 Audio Renderer (WaveOut) 过滤器和 DirectSound Renderer 过滤器上实现,但通过过滤器图形管理器向应用程序公开。应用程序应始终从 Filter Graph Manager 检索此接口。

非常基本的获取路径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 回答