编写音频源过滤器以用作Lync麦克风

时间:2015-07-29 17:06:05

标签: c++ windows audio directshow lync

我正在尝试编写一个可以被Microsoft Lync客户端识别为Microphone源的DirectShow音频捕获过滤器。这些是我已经采取的步骤:

  1. 过滤器源自CSource;其输出引脚来自CSourceStream并实现IKsPropertySetIAMStreamConfig以及所有必要的方法(包括IUnknown方法)

  2. 确保在AM_MEDIA_TYPEWAVEFORMATEX

  3. 中设置GetStreamCaps()及其GetMediaType()标头的相应元数据
  4. fillBuffer()中,每个媒体样本都填充了正弦波测试序列

  5. .def文件中创建COM服务器的类工厂并导出DLL函数,在CLSID_AudioInputDeviceCategory下注册过滤器。

  6. 使用regsvr32注册我的过滤器后,当前所有内容都在GraphEdit中运行:过滤器显示在“音频捕获设备”下,并且音调正确播放。

    GraphEdit.exe demonstration

    然而,我在"真实"中获得了不同的结果。程式。例如,在Picasa的网络摄像头测试仪中,过滤器显示为音频源,但切换到它会导致程序崩溃。

    在Lync客户端的所有版本中,过滤器根本不会显示为Microphone下的Audio Device -> Microphone选项。我已在Lync documentation中读到只返回带有物理扬声器和麦克风的虚拟音频设备。

    在查看了更多内容之后,似乎Virtual Audio Cable产生了被系统识别的预期效果,如下所示:

    Lync VAC demo

    我需要灵活地编写自己的代码解决方案,这样可以获得无需购买许可证的额外好处。

    我是否需要切换到Windows Media Foundation,支持我的过滤器中的其他接口,将源过滤器与硬件扬声器源耦合等?

    我需要采取哪些步骤才能使我的过滤器显示为Microphone来源?

1 个答案:

答案 0 :(得分:2)

Lync(Skype for Business)不使用DirectShow进行音频捕获,因此它无法看到您的虚拟设备而无法接收它。据推测,它使用WASAPI。虚拟音频电缆可能实现了音频设备的内核级驱动程序,WASAPI通过用户模式API获取和公开。无法将虚拟音频源连接到不使用DirectShow进行音频捕获的应用程序。