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

Posted

技术标签:

【中文标题】如何在 Windows 10 中创建虚拟网络摄像头?【英文标题】:How to create virtual webcam in Windows 10? 【发布时间】:2016-02-15 01:22:56 【问题描述】:

我想从网络摄像头获取视频,在帧上渲染一些文本并进行一些运动跟踪,然后将其传递给虚拟网络摄像头,以便轻松进行流式传输。

我在 *** 上找到了一些答案,建议我应该使用 DirectShow。根据DirectShow documentation 中的信息,DirectShow SDK 是 Windows SDK 的一部分。所以我安装了latest Windows SDK,但它似乎不包括DirectShow,因为C:\Program Files (x86)\Microsoft SDKs\Windows 下没有DirectShow 示例。 (*** 的答案也很老了——大约在 2010 年左右)

您能否建议一种使 DirectShow 工作的方法(包括在 Visual Studio 2015 上工作的示例)或 DirectShow 的其他替代方法,以帮助我创建虚拟网络摄像头?

【问题讨论】:

从 Windows SDK 7.x 获取示例;使用最新的 Visual Studio 构建。没有标准的虚拟相机示例,您可以谷歌 Vivek 的 VCam。 我下载了适用于 Windows 7 的 Windows SDK。当我启动安装程序并收到以下警告消息:imgur.com/AhYhhlR(说我有 .NET Framework 4 的预发布版本,而某些组件不会安装,我应该从提供的链接安装 .NET Framework 4)。无论如何我都继续了,但是在安装了不在目标目录中的示例之后。当我尝试安装 .NET Framework 4 时,安装程​​序拒绝安装它,说我已经安装了 .NET Framework。我猜 Windows 10 的设计初衷不是支持这么旧的 SDK。 您可以将其安装在较旧的 windows 版本上并将文件复制到 windows 10。 DirectShow 不再受支持。我认为它已在 Vista 中被弃用。它已被 Media Foundation 取代你可以看看 Media Foundation Capture Source 你应该可以从这里找到一些信息msdn.microsoft.com/en-us/library/windows/desktop/… DirectShow 已经有 15 年没有积极开发了。它尚未 [尚未] 弃用,并且绝对受到支持,例如 AVI support bug in Windows 10 DirectShow,Microsoft 最近修复了它并通过 Windows Update 提供了修复程序。 【参考方案1】:

虚拟网络摄像头通常是一种纯软件实现,应用程序发现它就好像它是具有物理表示的设备一样。上述应用程序使用 API 与网络摄像头配合使用,扩展 API 和添加您自己的视频源的能力是创建虚拟网络摄像头的方法。

在 Windows 中,有一些 API 可以使用视频源:Video for Windows、DirectShow、Media Foundation(按时间顺序)。

Video for Windows 并不是真正可扩展的,而且总体功能有限。如果您为虚拟相机提供内核模式驱动程序,它将看到一个虚拟设备。

DirectShow 是大多数支持视频捕获的 Windows 应用程序使用的 API,它存在于所有 Windows 版本中,包括 Windows 10(仅 Windows RT 除外)。然后它是完全可扩展的,在大多数情况下,术语“虚拟网络摄像头”是指 DirectShow 虚拟网络摄像头。许多 *** 问题中讨论的创建 DirectShow 虚拟网络摄像头的方法对于使用 DirectShow 实现视频捕获的应用程序仍然完全适用于 Windows 10:

Virtual webcam input as byte stream Simulate a DirectShow Webcam

DirectShow 示例已从 Windows SDK 中删除,但您仍可以在旧版本中找到它们:

Getting DirectShow Samples on Windows 8

如果您为摄像机设备提供内核模式驱动程序(您的虚拟网络摄像头通过自定义内核驱动程序),DirectShow 也会像其他视频 API 一样看到它。

Media Foundation 应该是 DirectShow 的继承者,但它在可扩展性部分的视频捕获功能根本不存在。微软决定不允许自定义视频源应用程序能够以与网络摄像头相同的方式发现。由于 Media Foundation 的复杂性、开销和整体不友好,它被适度数量的应用程序使用。要再次为 Media Foundation 应用程序实现虚拟网络摄像头,就像 Windows 的 Video 一样,您必须实现内核模式驱动程序。

【讨论】:

能否请您写一个示例 C、C++ 开源 github,以便所有 windows 奋斗者社区都可以关注您的代码并做出贡献? @YumYumYum:原来的 VCam 样本是多年来托管的地方:tmhare.mvps.org/downloads.htm 当然,随着时间的推移,已经开发了多种衍生产品和类似的过滤器。 您评论中的链接已损坏。 @TimMB:见alax.info/blog/2161 + github.com/roman380/tmhare.mvps.org-vcam【参考方案2】:

这是一个古老的互联网问题,但我认为我可以贡献:

大约一年前我正在研究这个问题,几乎完全放弃了我的项目,直到我在微软的 Github 上找到了Microsoft's SimpleMediaSource driver sample。它记录在Microsoft's Docs 上,但对于没有经验的人来说,这本书很难读。自从我上次查看文档以来,文档似乎已经更新和改进。为了让它工作,我必须在每次使用 Visual Studio 编译后手动删除 DLL 并将其复制粘贴到 C:\System32 中。我还必须下载并安装现已删除的(据我所知)devcon 实用程序,以使用devcon dp_add/dp_remove 命令添加和删除驱动程序。您还需要Windows Driver Kit (WDK)。

您需要在 Windows 中启用未签名的驱动程序加载,因此如果您想分发它可能不是一个好方法。 Anticheat 和 DRM 软件也可能不喜欢它:)

有两个项目正在编译:

MediaSource - 自定义媒体源的 COM DLL 项目

SimpleMediaSourceDriver - UMDF 驱动安装包

【讨论】:

以上是关于如何在 Windows 10 中创建虚拟网络摄像头?的主要内容,如果未能解决你的问题,请参考以下文章

在 Xampp Windows 10 中创建虚拟主机

PD中创建LINUX时虚拟网卡的配置问题

是否有一种编程方式可以在 Windows 中创建自定义网络配置文件并为其分配虚拟网络适配器?

在Xampp Windows 10中创建虚拟主机

在 Visual Studio 2010 和 Windows 10 中创建虚拟目录、IIS 时出错

如何在 .NET 中创建虚拟网络适配器?