如何从 WDM 流式音频源(Realtek 高清音频)捕获

How to capture from WDM Streaming audio sources (Realtek HD Audio)

我正在尝试在 DirectShow 中使用各种音频源,我的系统中有这些捕获设备,我认为它们很常见(由芯片组驱动程序提供):

Realtek 高清音频线路输入
Realtek 高清音频立体声输入
Realtek 高清音频麦克风输入

它们看起来像捕获源,公开模拟输入和 24 位 pcm 输出,并且可以将输出连接到其他过滤器(渲染器等)。
但是捕获过滤器的 IMediaFilter::Run 中的 return 代码是 ERROR_BAD_COMMAND 这并没有说太多。我在我的程序和 GraphStudioNext 中都试过了,但没有显示任何额外信息。

是否可以使用这些进行捕获?如何使用?

更新

例如,我用麦克风输入尝试了这张图(实际连接并工作)。在此设置中,图形不会启动 (ERROR_BAD_COMMAND),但使用其他来源时,它会启动。
这是同一台设备,但驱动程序不同。有效的是 "Audio capture sources" 类别,无效的是 "WDM Streaming Capture Devices".

使用 GraphStudioNext 检查设备的最简单方法是使用 PCM 音频输入设备本身、AVI Mux 过滤器和 File Writer 过滤器连接成一个记录图(使用默认媒体类型):

您点击运行,记录图通过Filter Writer在图构建过程中提示的位置生成非空文件。

--

所以现在我意识到你的问题有点不同。您会在

下看到与您的音频输入设备相对应的过滤器
  • Audio Capture Sources -- CLSID_AudioInputDeviceCategory
  • WDM 流媒体捕获设备 -- AM_KSCATEGORY_CAPTURE

问题是第一个过滤器有效而另一个无效。

来自 AM_KSCATEGORY_CAPTURE 的类似过滤器似乎正在连接到拓扑中,但尝试 运行 会触发 ERROR_BAD_COMMAND

首先,这些确实是不同的过滤器。即使底层硬件可能相同,"frontend" 过滤器也不同。 "works" 是 Audio Capture Filter 由 WDM 设备支持的包装器。在另一种情况下,它是通用 WDM 过滤器代理,一般来说,其行为是未定义的。过滤器没有记录,我猜它没有收到足够的初始化或没有实现所需的行为,所以这个代理不是也不应该与音频捕获过滤器代理互换。