【问题标题】:How to split audio or write demuxer filter in directshow?如何在 directshow 中拆分音频或编写解复用器过滤器?
【发布时间】:2010-07-07 16:52:50
【问题描述】:

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

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

起初,我尝试创建一个基于 ITransformFilter 的过滤器。但是,似乎它考虑了只有一个输入引脚和一个输出引脚的过滤器。因为我需要几个输出引脚,所以我忽略了它,但也许它比我想象的更容易适应,所以非常感谢任何建议。

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

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

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

【问题讨论】:

    标签: c++ filter directshow


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢!我去看看。
    • 我不确定这是我需要的。看来必须提前声明输出引脚。能够实时创建它们会很好,因为在连接输入之前我不知道有多少通道。如果一两天内没有人回答,我会选择你的答案。
    • 您可以创建 16 个输出引脚,并且只使用您需要的引脚。
    • 是的,我想到了,但“最多 16 个”将来可能会改变。当它是“最多 32 个”时,什么,32 个引脚?然后,当有人有 128 通道流时?似乎不太可能,但 15 年前我不会相信你可以在 1 平方厘米内拥有 64 GB 的数据,所以......我的解决方案最终是编写一个标准的变换过滤器并连接几个实例它通过一个 Inf Tee,然后配置每个以选择我想要的频道。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多