gpt4 book ai didi

winapi - DirectShow 音频捕获设备的注册表位置

转载 作者:行者123 更新时间:2023-12-03 00:53:31 25 4
gpt4 key购买 nike

我正在从我的应用程序执行 VLC 以从 DirectShow 音频捕获设备捕获和编码。 VLC 通过 STDOUT 将编码数据发送到我的应用程序。我需要一种枚举 DirectShow 音频捕获设备的方法。不幸的是,VLC 似乎没有为此提供任何非 GUI 方式。

在寻找一种获取设备名称列表的简单方法时,我偶然发现了这些注册表项,其中子项以音频捕获设备命名:

  • HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum 64-bit\{33D9A762-90C8-11D0-BD43-00A0C911CE86}
  • HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum\{33D9A762-90C8-11D0-BD43-00A0C911CE86}

  • 此注册表位置是否保证与其他计算机和最新版本的 DirectX 位于同一位置?除了实现大量 DirectX 代码之外,还有其他方法可以获取 DirectShow 音频设备名称列表吗? (可能通过诊断工具的某些输出。)

    最佳答案

    DirectShow(Windows 核心 API,不再是 DirectX 的一部分)设备列表由列出特定类别(在本例中为音频输入设备,CLSID_AudioInputDeviceCategory)的枚举器提供。这是GUID有问题,注册表不一定包含那里所有设备的条目。相反,枚举器通过 API 以编程方式提供设备列表,结合不同类型的可用设备。

    没有办法以明确定义/记录的方式影响枚举顺序。

    枚举设备的最简单方法是 Windows SDK GraphEdt.exe 工具,或其更好的替代选项 GraphStudio/GraphStudioNext . Ctrl+F然后选择类别:

    enter image description here

    您还可以使用 EnumerateAudioCaptureFilterCapabilities 枚举设备及其功能。命令行工具( source code ),其中“友好名称”行按枚举顺序列出设备:

    Moniker Display Name: @device:cm:{33D9A762-90C8-11D0-BD43-00A0C911CE86}\Stereo Mix (Realtek High Defini
    Friendly Name: Stereo Mix (Realtek High Defini
    Pin: Capture
    Capability Count: 23
    Capability 0:
    AM_MEDIA_TYPE:
    .bFixedSizeSamples: 1
    .bTemporalCompression: 0
    .lSampleSize: 4
    .cbFormat: 18
    WAVEFORMATEX:
    .wFormatTag: 1
    .nChannels: 2
    .nSamplesPerSec: 44100
    .nAvgBytesPerSec: 176400
    .nBlockAlign: 4
    .wBitsPerSample: 16
    .cbSize: 0

    为了影响顺序,例如将感兴趣的设备放在列表顶部,我只能想到 API Hook ,这是可能的事情,但由于标准系统行为的改变,不建议广泛使用。

    关于winapi - DirectShow 音频捕获设备的注册表位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18295499/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com