我正在使用多媒体应用程序,可以从捕获卡同时播放多个视频。我想要实现的是单独静音一个或多个输入流,而不会影响应用程序或系统级别的全局卷。
我的假设是每个输入流都有一个mpeg-2 demux过滤器的实例。如果是这样,我们可以访问每个实例的属性来设置音量级别(0或正常)。
由于采集卡音频被路由到解复用器,我不确定DVD-DV音频滤波器是否是独立的,可以作为一组通道路由到Windows音频系统进行控制。
一些挖掘建议使用IBasicAudio,但我不确定如何从Filter Graph Manager中检索接口。以下是我使用GraphEdit获得的内容:
任何帮助都将不胜感激。
答案 0 :(得分:1)
过滤器图形管理器的IBasicAudio
实现只不过是对第一个合适的过滤器实现IBasicAudio
的简单转发。也就是说,如果图中有一个音频流,它可能会很好。在那里有两个或更多,你需要找到音频渲染器过滤器并使用他们的IBasicAudio
。
MSDN指示您始终通过FGM进行查询,但只有当您有一个音频输入/渲染器时,这是一个很好的建议。
此接口在Audio Renderer(WaveOut)过滤器和DirectSound Renderer过滤器上实现,但通过Filter Graph Manager向应用程序公开。应用程序应始终从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;
这通过FGM获取接口指针,就像MSDN建议的那样。适用于图中单个音频流的情况。