首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改DirectShow推送源筛选器中出现的组和子组?

如何更改DirectShow推送源筛选器中出现的组和子组?
EN

Stack Overflow用户
提问于 2015-07-23 21:35:14
回答 1查看 268关注 0票数 0

我正在使用代码从下面的开源文章中创建一个C# DirectShow push源代码过滤器,该过滤器构建了一个名为VirtualCam的过滤器

http://www.codeproject.com/Articles/437617/DirectShow-Virtual-Video-Capture-Source-Filter-in

GraphEdit实用程序可以找到它,并在视频捕获源组中显示它,名为CSharp Virtual ,我可以用它构建一个过滤器图,它工作得很好。Skype也能找到它。但是,我想使用它的所有其他软件都找不到它,因为当使用VideoInputSource作为主组时,它不会出现在设备枚举调用中。我相信这是那个组的类ID:

代码语言:javascript
复制
/// <summary> CLSID_VideoInputDeviceCategory, video capture category </summary>
public static readonly Guid VideoInputDevice = new Guid(0x860BB310, 0x5D01, 0x11d0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86);

我从一个用于扫描视频输入设备的开源实用程序中获得了这个类ID。它也是找不到VirtualCam过滤器的应用程序之一。这些应用程序只能找到像我的网络摄像头这样的设备(换句话说,VirtualCam没有出现在可用的设备列表中)。

我需要对VirtualCam源代码做些什么,以便它将自己声明/注册为视频输入设备,并显示在类别中的设备枚举扫描中,以便大多数软件能够看到并使用它?

UPDATE:在GraphEdit中,我看到了大多数应用程序找不到的VirtualCam过滤器和可以找到的视频捕获设备之间的主要区别是,VirtualCam过滤器没有定义任何引脚,而其他视频捕获设备有。如果这是问题所在,我应该如何正确地定义一个可以让VirtualCam被发现并正常工作以服务于声明的接口的引脚?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-24 05:29:07

没有分组,该组被称为“类别”。过滤器被注册到类别中。您感兴趣的类别是CLSID_VideoInputDeviceCategory,也称为“视频捕获源”。

从注册的角度来看,我唯一能想到的问题是32/64比特。注册为32位过滤器的过滤器在64位应用程序中是不可见的,反之亦然。这可能很棘手,因为您的项目是C#,而且可能是为AnyCPU构建的,但是无论如何,您可以使用32位和64位GraphEdit (或者更确切地说是GraphStudioNext)来确保筛选器在列表中。过滤器列表中的存在确保了注册步骤的通过。

从那时起,它是由应用程序的实现来显示或不显示特定的视频源。有些应用程序显示每个已注册的源,其他如Skype试图实例化源代码并进行一些初始检查。如果他们不喜欢源,它将从选择列表中删除。

对于视频源的实现要求还没有很好的定义,但是大多数应用程序都希望获得一个与WDM Video Capture Filter兼容的过滤器。如果SDK AmCap样品可以预览它,更好的应用程序可以接受视频源,更糟的实现还有其他假设。

通常,视频源必须在filter类中实现IBaseFilter,而IPinIAMStreamConfig接口必须在引脚中实现。它还应该在引脚中实现IQualityControlIKsPropertySet。实现ISpecifyPropertyPages也很好,因为糟糕的实现也可能会在那里(即使没有附加页面)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31598449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档