我需要创建一个伪装成网络摄像头的虚拟网络摄像头,但将其播放的一组图像作为输入。我见过像 ManyCam 和 Fake Webcam 这样的解决方案,但它们似乎都有一个限制(分辨率、最大文件大小、fps 等)。我正在使用 Windows XP SP3。
我知道我必须为此任务编写一个 WIA 接口,但作为一名 Python 程序员,我从未编写过设备的驱动程序或接口。编写这个接口的主要任务是什么?流程会是什么样子?
您需要编写 DirectShow 过滤器,它是一个实现IPin
,IAMStreamConfig
和IKsPropertySet
接口的 COM 服务器。对于IPin
您最好从继承CSourceStream
类开始的部分,因为您需要获取 Windows SDK,安装了 SDK,samples\multimedia\directshow
文件夹中将有一个 DirectShow Base Classes 源代码,您会在其中找到CSourceStream
(以及许多其他) . DllRegisterServer
COM 服务器的功能应该CLSID_VideoInputDeviceCategory
使用过滤器映射器在类别中注册您的过滤器。
构建 COM 服务器后,您使用工具注册它regsvr32
,您的虚拟网络摄像头应该出现在网络摄像头列表中。
还要检查samples\multimedia\directshow\filters\ball
可以改进并用作任务起点的示例。
首先阅读此
https://docs.microsoft.com/en-us/windows/win32/directshow/writing-source-filters
然后你可以采用
https://github.com/roman380/tmhare.mvps.org-vcam
您可以在此示例虚拟相机上工作。
This implements IAMStreamConfig
and IKsPropertySet
interfaces
这是使用CSourceStream
和CSource
类构建的,该类实现IPin
和IBaseFilter