编写虚拟网络摄像头?

Posted

技术标签:

【中文标题】编写虚拟网络摄像头?【英文标题】:Writing a virtual webcam? 【发布时间】:2011-09-08 18:57:32 【问题描述】:

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

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

【问题讨论】:

不相关的建议:“不要说你一个 Python 程序员”,你是一个喜欢(或只知道)Python 的程序员......但是。 可能是他/她是 cpython 的核心开发者... :-) @Javier 很棒的建议!虽然它可能更像是一种文化的东西。 @6502 光是想想就让我发疯了。如果我是 cpython 的开发人员,那我不是 C 程序员吗?或者我可以成为一名 Python 程序员,因为我会编写 Python 程序 另见***.com/questions/4214786/… 【参考方案1】:

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

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

还可以查看samples\multimedia\directshow\filters\ball 示例,该示例可以改进并用作您的任务的起点。

【讨论】:

非常感谢您详细说明流程。我会看样本并学习。再次感谢:) @n0rd 请帮助***.com/questions/65839449/…【参考方案2】:

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

那你可以采纳https://github.com/roman380/tmhare.mvps.org-vcam

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

这实现了IAMStreamConfigIKsPropertySet 接口 这是使用实现IPinIBaseFilterCSourceStreamCSource 类构建的

【讨论】:

以上是关于编写虚拟网络摄像头?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 10 中创建虚拟网络摄像头?

将RTSP流转换为虚拟网络摄像头

怎么在Dshow中判断真实摄像头与虚拟摄头

如何把头歌的摄像头改成虚拟摄像头

Qt编写推流综合应用示例(文件推流/桌面推流/本地摄像头/网络摄像头/转发推流/视频分发)

测试:将手机摄像头用作网络摄像头的拍摄效果