我需要创建一个虚拟网络摄像头,这个网络摄像头可以作为网络摄像头,但需要输入一组它所播放的图像。我看到了像ManyCam和假摄像头这样的解决方案,但它们似乎都有一个限制,或者其他(解析度,最大文件大小,fps等),我正在使用Windows XP SP3。写一个虚拟摄像头?
我知道我必须为此任务编写一个WIA接口,但作为一名Python程序员,我从来没有将驱动程序或接口写入设备。写这个接口的主要任务是什么?流程是什么样子?
我需要创建一个虚拟网络摄像头,这个网络摄像头可以作为网络摄像头,但需要输入一组它所播放的图像。我看到了像ManyCam和假摄像头这样的解决方案,但它们似乎都有一个限制,或者其他(解析度,最大文件大小,fps等),我正在使用Windows XP SP3。写一个虚拟摄像头?
我知道我必须为此任务编写一个WIA接口,但作为一名Python程序员,我从来没有将驱动程序或接口写入设备。写这个接口的主要任务是什么?流程是什么样子?
你需要编写DirectShow过滤器,它是一个COM服务器,它实现了一个IPin
,IAMStreamConfig
和IKsPropertySet
接口。对于IPin
部分,您最好从继承CSourceStream
类开始,因为您需要获得Windows SDK,如果安装了SDK,则会在samples\multimedia\directshow
文件夹中存在DirectShow基类源,在那里您会找到CSourceStream
(等等)。 DllRegisterServer
COM服务器的功能应使用过滤器映射程序在CLSID_VideoInputDeviceCategory
类别内注册您的过滤器。
建立COM服务器后,您使用regsvr32
工具进行注册,并且虚拟摄像头应出现在网络摄像头列表中。
另请检查samples\multimedia\directshow\filters\ball
样本,该样本可以改进并用作任务的起点。
非常感谢您详细的流程。我会看样品和学习。再次感谢 :) – aloogobi 2011-06-07 12:13:23
无关的建议:“不要说你是一个Python程序员”,你是一个喜欢(或只知道)Python的程序员......但是。 – Javier 2011-06-05 15:47:41
可能是他/她是cpython的核心开发者...... :-) – 6502 2011-06-05 17:02:23
@Javier伟大的建议!尽管它可能更多是一种文化的东西。 @ 6502只是想着这让我发疯。如果我是cpython的开发者,我不会是C程序员吗?或者我可能是一个蟒蛇程序员,因为我编程蟒 – aloogobi 2011-06-07 12:12:36