如何在directshow中拆分音频或写入解复用器?

时间:2010-07-07 16:52:51

标签: c++ filter directshow

我需要将最多16个通道的PCM音频流分成几个立体声流。 由于我还没有发现任何能够做到这一点,我正在尝试编写我的第一个directshow过滤器。

任何能够分割音频的东西都会受到欢迎,但我认为我必须这样做,所以我已经做了:

首先,我尝试根据ITransformFilter创建一个过滤器。但是,它似乎只考虑了只有一个输入引脚和一个输出引脚的滤波器。由于我需要几个输出引脚,我忽略了它,但是它可能比我想象的更容易调整,所以任何建议都非常感谢。

然后,我开始基于IBaseFilter。我设法做了一些事情。当输入引脚连接时,我会创建必要的输出引脚,并在输入断开时将其销毁。但是,当我将任何输出引脚连接到ACM Wrapper(只是为了测试它)时,输入会尝试重新连接,从而破坏我的所有输出引脚。 我试图不破坏它们,但后来我检查了输入引脚的媒体类型,它已经改为立体声流。我不会从我的代码中调用QueryAccept。

我怎样才能避免重新连接,或者做出分路器过滤器的正确方法是什么?

编辑2010-07-09: 我回到ITransformFilter,但我正在创建必要的引脚。但是我遇到了与IBaseFilter相同的问题:当我将输出引脚连接到ACM Wrapper时,输入引脚将其mediatype更改为2个通道。 不知道现在该怎么办......

1 个答案:

答案 0 :(得分:1)

您可以在 Windows Server 2003 R2 Platform SDK 中查看DMOSample。它也包含在较旧的directx sdk中,但不包含在较新的windows sdk中。您可以在Samples \ Multimedia \ DirectShow \ DMO \ DMOSample中找到它。 Here是此示例的文档。

我见过有人创建了一个基于此的过滤器,它有一个立体声输入和两个单声道输出。不幸的是我无法发布源代码。