C ++中的虚拟网络摄像头

时间:2009-10-20 18:19:40

标签: c++ visual-c++ kernel

我想编写一个新的虚拟网络摄像头驱动程序,例如将AVI或实时流作为屏幕并将其作为网络摄像头源传输。

我真的没有网络摄像头,我想添加一个流动桌面屏幕的虚拟网络摄像头。

我应该在内核模式下编写网络摄像头吗?如果是这样,你能指导我一个样本网络摄像头驱动程序吗?

如果我应该在DirectShow中执行此操作,如何在控制面板中的网络摄像头列表中添加网络摄像头设备列表,例如在Yahoo Messenger中,我可以选择该设备作为网络摄像头并将我的桌面作为网络摄像头图像流式传输。 / p>

我该如何开始?

3 个答案:

答案 0 :(得分:5)

您需要编写DirectShow源过滤器。 Windows SDK包含一个名为 baseclasses 的库,可帮助您开发此类过滤器。请参阅CSourceStream以获得良好的起点。

要让设备显示在其他视频流设备下,您必须使用CLSID_VideoInputCategory下的DirectShow API注册过滤器。您不需要/不应该编写内核驱动程序。

答案 1 :(得分:2)

你可以从DirectShow包下的示例“amcap”开始,它是初学者的优秀样本。如果要列出网络摄像头设备,请转到ChooseDevices()方法。

答案 2 :(得分:1)

您需要开发 DirectShow Source Filter 来创建虚拟摄像机,请先阅读此内容
https://docs.microsoft.com/en-us/windows/win32/directshow/writing-source-filters

那你就可以领养了
https://github.com/roman380/tmhare.mvps.org-vcam

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

这实现了 IAMStreamConfigIKsPropertySet 接口
这是使用实现 CSourceStreamCSource

IPinIBaseFilter 类构建的