1

我有一个自定义源过滤器,通过实现CSourceCSourceStream来自 dshow 基类。IFilterMapper2::RegisterFilter它使用该方法以不同的名称多次导出。现在,在我的过滤器中,我想(尽快)知道正在打开的过滤器的哪个注册实例。例如,假设我有一个模拟虚拟网络摄像头的 dll。相同的 dll 导出过滤器的两个实例,因此在(比如说)Skype 中,我可以选择virtual cam #1virtual cam #2。在 myCSourceCSourceStreamI 的构造函数中,我想知道正在构造的是虚拟凸轮 #1还是虚拟凸轮 #2 。这可以做到吗?

4

1 回答 1

2

没有记录的方法,但有一种解决方法。由于 DirectShow 是稳定的,它应该可以很好地工作。

在您的过滤器类覆盖IPersistPropertyBag::Load和您使用提供的IPropertyBag::Read映射执行的读取中,从HKEY_LOCAL_MACHINE\SOFTWARE\Classes...\CLSID_VideoInputDeviceCategory\Instance\<your-instance>. 因此,您可以将所需的所有身份证明都放在那里并可以访问。

请注意,这是从应用程序的BindToObject调用中调用的。

调用堆栈

我在由 IP 摄像机支持的虚拟视频输入中执行此操作http://alax.info/blog/1233

于 2012-04-18T06:00:15.653 回答