2013-08-18 4 views
0

Я выполняю VLC из своего приложения для захвата и кодирования с устройства записи звука DirectShow. VLC отправляет закодированные данные в мое приложение через STDOUT. Мне нужен способ перечислить устройства захвата звука DirectShow. К сожалению, VLC, похоже, не обеспечивает какой-либо не-GUI-способ для этого.Расположение реестров устройств записи звука DirectShow

В поисках простого способа получить список имен устройств, я наткнулся на этих ключах реестра, когда дочерние ключи названы после того, как аудио устройств захвата:

  • 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? (Возможно, через какой-то вывод диагностического инструмента.)

+0

'1' Простой способ перечисления через API' 2' небольшая коррекция - DirectShow не является списком DirectX '3', это больше, чем записи в реестре: есть перечисления, которые программируют программные программы, а не только из раздела реестра' 4 'disgnostic tool is [здесь] (http://www.alax.info/trac/public/browser/trunk/Utilities/EnumerateAudioCaptureFilterCapabilities/Win32/Release), найдите строки« Friendly Name »(шаг оттуда для C++ исходный код). Вы также можете перечислить с помощью Windows SDK 'GraphEdt.exe' в интерактивном режиме. –

+0

@RomanR., Спасибо за эту полезную информацию! Пожалуйста, подумайте о публикации этого ответа. – Brad

+0

Я не был уверен, что вы будете довольны этим знанием, или вы все равно будете искать способы настроить его в реестре ... –

ответ

1

Список DirectShow (основного ядра Windows, а не часть 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, что возможно, но не рекомендуется для широкого использования из-за изменения стандартного поведения системы.