我正在尝试编写一个可以被Microsoft Lync客户端识别为Microphone
源的DirectShow音频捕获过滤器。这些是我已经采取的步骤:
过滤器源自CSource
;其输出引脚来自CSourceStream
并实现IKsPropertySet
和IAMStreamConfig
以及所有必要的方法(包括IUnknown
方法)
确保在AM_MEDIA_TYPE
和WAVEFORMATEX
GetStreamCaps()
及其GetMediaType()
标头的相应元数据
在fillBuffer()
中,每个媒体样本都填充了正弦波测试序列
在.def
文件中创建COM服务器的类工厂并导出DLL函数,在CLSID_AudioInputDeviceCategory
下注册过滤器。
使用regsvr32
注册我的过滤器后,当前所有内容都在GraphEdit中运行:过滤器显示在“音频捕获设备”下,并且音调正确播放。
然而,我在"真实"中获得了不同的结果。程式。例如,在Picasa的网络摄像头测试仪中,过滤器显示为音频源,但切换到它会导致程序崩溃。
在Lync客户端的所有版本中,过滤器根本不会显示为Microphone
下的Audio Device -> Microphone
选项。我已在Lync documentation中读到只返回带有物理扬声器和麦克风的虚拟音频设备。
在查看了更多内容之后,似乎Virtual Audio Cable产生了被系统识别的预期效果,如下所示:
我需要灵活地编写自己的代码解决方案,这样可以获得无需购买许可证的额外好处。
我是否需要切换到Windows Media Foundation,支持我的过滤器中的其他接口,将源过滤器与硬件扬声器源耦合等?
我需要采取哪些步骤才能使我的过滤器显示为Microphone
来源?
答案 0 :(得分:2)
Lync(Skype for Business)不使用DirectShow进行音频捕获,因此它无法看到您的虚拟设备而无法接收它。据推测,它使用WASAPI。虚拟音频电缆可能实现了音频设备的内核级驱动程序,WASAPI通过用户模式API获取和公开。无法将虚拟音频源连接到不使用DirectShow进行音频捕获的应用程序。