写一个虚拟摄像头?
我需要创建一个虚拟摄像头,它看起来像一个真实的摄像头,但实际上是播放一组图片作为输入。我见过一些解决方案,比如ManyCam和Fake Webcam,但它们都有一些限制,比如分辨率、最大文件大小、帧率等等。我正在使用Windows XP SP3。
我知道我需要为这个任务编写一个WIA接口,但作为一个Python程序员,我从来没有写过驱动程序或设备接口。编写这个接口的主要任务是什么?流程大概是怎样的?
2 个回答
首先请阅读这个链接
https://learn.microsoft.com/en-us/windows/win32/directshow/writing-source-filters
然后你可以参考这个项目
https://github.com/roman380/tmhare.mvps.org-vcam
你可以在这个虚拟摄像头的示例基础上进行开发。
这个示例实现了IAMStreamConfig
和IKsPropertySet
这两个接口。
它是使用CSourceStream
和CSource
这两个类构建的,这两个类实现了IPin
和IBaseFilter
这两个接口。
你需要写一个DirectShow过滤器,这个过滤器是一个COM服务器,它需要实现几个接口:IPin
、IAMStreamConfig
和IKsPropertySet
。对于IPin
部分,建议你从继承CSourceStream
类开始。为了做到这一点,你需要获取Windows SDK,安装SDK后,你会在samples\multimedia\directshow
文件夹中找到DirectShow基础类的源代码,在那里你可以找到CSourceStream
(还有很多其他的类)。COM服务器的DllRegisterServer
函数应该通过过滤器映射器将你的过滤器注册到CLSID_VideoInputDeviceCategory
类别中。
构建好COM服务器后,你需要用regsvr32
工具来注册它,这样你的虚拟摄像头就会出现在摄像头列表中。
另外,检查一下samples\multimedia\directshow\filters\ball
这个示例,它可以被改进,并作为你任务的起点。