Я пытаюсь написать DirectShow Audio Capture Filter, который может распознаваться клиентом Microsoft Lync как Microphone
источник. Вот шаги, которые я уже предпринял:
Фильтр происходит от CSource
; его вывод выводится из CSourceStream
и реализует IKsPropertySet
а также IAMStreamConfig
и все необходимые методы (вкл. IUnknown
методы)
Убедитесь, что соответствующие метаданные для AM_MEDIA_TYPE
И его WAVEFORMATEX
заголовок установлен в GetStreamCaps()
а также GetMediaType()
В fillBuffer()
каждый образец среды заполняется тестовой последовательностью синусоидальной волны
Создал фабрику классов для COM-сервера и экспортировал функции DLL в .def
файл, регистрация фильтра под CLSID_AudioInputDeviceCategory
,
После регистрации моего фильтра с помощью regsvr32
в настоящее время все работает в GraphEdit: фильтр отображается в разделе «Устройства захвата звука», и звук воспроизводится правильно.
Однако я получаю разные результаты в «настоящих» программах. Например, в тестере веб-камеры Picasa фильтр отображается как источник звука, но переключение на него приводит к сбою программы.
Во всех версиях клиента Lync фильтр вообще не отображается как Microphone
выбор под Audio Device -> Microphone
, Я прочитал в Документация Lync что возвращаются только виртуальные аудиоустройства с физическим динамиком и микрофоном.
Посмотрев еще немного, кажется, что Виртуальный аудио кабель производит желаемый эффект распознавания системой, как показано ниже:
Я нуждаюсь в гибкости написания своего собственного решения для кода, что дает дополнительное преимущество: нет необходимости покупать лицензию.
Нужно ли переключаться на Windows Media Foundation, поддерживать дополнительные интерфейсы в моем фильтре, связывать фильтр источника с источником аппаратного динамика и т. Д.?
Какие шаги мне нужно предпринять, чтобы мой фильтр выглядел как Microphone
источник?
Lync (Skype для бизнеса) не использует DirectShow для захвата звука, поэтому он не видит ваше виртуальное устройство и не может его забрать. Предположительно, он использует WASAPI. Виртуальный аудиокабель, по-видимому, реализует драйвер уровня ядра для аудиоустройства, который WASAPI получает и предоставляет через API пользовательского режима. Невозможно подключить ваш виртуальный источник звука к приложению, которое не использует DirectShow для захвата звука.