Напишите фильтр аудиоисточника для использования в качестве микрофона Lync.

Я пытаюсь написать DirectShow Audio Capture Filter, который может распознаваться клиентом Microsoft Lync как Microphone источник. Вот шаги, которые я уже предпринял:

  1. Фильтр происходит от CSource; его вывод выводится из CSourceStream и реализует IKsPropertySet а также IAMStreamConfig и все необходимые методы (вкл. IUnknown методы)

  2. Убедитесь, что соответствующие метаданные для AM_MEDIA_TYPE И его WAVEFORMATEX заголовок установлен в GetStreamCaps() а также GetMediaType()

  3. В fillBuffer()каждый образец среды заполняется тестовой последовательностью синусоидальной волны

  4. Создал фабрику классов для COM-сервера и экспортировал функции DLL в .def файл, регистрация фильтра под CLSID_AudioInputDeviceCategory,

После регистрации моего фильтра с помощью regsvr32в настоящее время все работает в GraphEdit: фильтр отображается в разделе «Устройства захвата звука», и звук воспроизводится правильно.

GraphEdit.exe демонстрация


Однако я получаю разные результаты в «настоящих» программах. Например, в тестере веб-камеры Picasa фильтр отображается как источник звука, но переключение на него приводит к сбою программы.

Во всех версиях клиента Lync фильтр вообще не отображается как Microphone выбор под Audio Device -> Microphone, Я прочитал в Документация Lync что возвращаются только виртуальные аудиоустройства с физическим динамиком и микрофоном.

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

Lync VAC demo


Я нуждаюсь в гибкости написания своего собственного решения для кода, что дает дополнительное преимущество: нет необходимости покупать лицензию.

Нужно ли переключаться на Windows Media Foundation, поддерживать дополнительные интерфейсы в моем фильтре, связывать фильтр источника с источником аппаратного динамика и т. Д.?

Какие шаги мне нужно предпринять, чтобы мой фильтр выглядел как Microphone источник?

2

Решение

Lync (Skype для бизнеса) не использует DirectShow для захвата звука, поэтому он не видит ваше виртуальное устройство и не может его забрать. Предположительно, он использует WASAPI. Виртуальный аудиокабель, по-видимому, реализует драйвер уровня ядра для аудиоустройства, который WASAPI получает и предоставляет через API пользовательского режима. Невозможно подключить ваш виртуальный источник звука к приложению, которое не использует DirectShow для захвата звука.

2

Другие решения


По вопросам рекламы [email protected]