21

我需要创建一个伪装成网络摄像头的虚拟网络摄像头,但将其播放的一组图像作为输入。我见过像 ManyCam 和 Fake Webcam 这样的解决方案,但它们似乎都有一个限制(分辨率、最大文件大小、fps 等)。我正在使用 Windows XP SP3。

我知道我必须为此任务编写一个 WIA 接口,但作为一名 Python 程序员,我从未编写过设备的驱动程序或接口。编写这个接口的主要任务是什么?流程会是什么样子?

4

2 回答 2

26

您需要编写 DirectShow 过滤器,它是一个实现IPin,IAMStreamConfigIKsPropertySet接口的 COM 服务器。对于IPin您最好从继承CSourceStream类开始的部分,因为您需要获取 Windows SDK,安装了 SDK,samples\multimedia\directshow文件夹中将有一个 DirectShow Base Classes 源代码,您会在其中找到CSourceStream(以及许多其他) . DllRegisterServerCOM 服务器的功能应该CLSID_VideoInputDeviceCategory使用过滤器映射器在类别中注册您的过滤器。

构建 COM 服务器后,您使用工具注册它regsvr32,您的虚拟网络摄像头应该出现在网络摄像头列表中。

还要检查samples\multimedia\directshow\filters\ball可以改进并用作任务起点的示例。

于 2011-06-05T16:53:14.633 回答
1

首先阅读此
https://docs.microsoft.com/en-us/windows/win32/directshow/writing-source-filters

然后你可以采用
https://github.com/roman380/tmhare.mvps.org-vcam

您可以在此示例虚拟相机上工作。

This implements IAMStreamConfigand IKsPropertySetinterfaces
这是使用CSourceStreamCSource类构建的,该类实现IPinIBaseFilter

于 2021-01-23T11:22:43.787 回答