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

问题描述 投票:0回答:4

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

我在 stackoverflow 上找到了一些答案,建议我应该使用 DirectShow。根据DirectShow文档中的信息,DirectShow SDK是Windows SDK的一部分。所以我安装了最新的Windows SDK,但它似乎不包含DirectShow,因为

C:\Program Files (x86)\Microsoft SDKs\Windows
下没有DirectShow示例。 (stackoverflow 上的答案也很老了 - 日期是 2010 年左右)

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

winapi windows-10 webcam directshow video-capture
4个回答
28
投票

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

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

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

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

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

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

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


1 从 Windows Build 22000 (Windows 11) 开始,有新的 API

MFCreateVirtualCamera
提供虚拟相机创建功能。开发人员可以实现一个视频源,API 将其连接到所谓的 Windows Camera Frame Server 服务,该服务又将生成的视频作为源与常规摄像机一起分发。应用程序看到此软件实现的方式就像它是网络摄像头一样。


5
投票

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

大约一年前我正在研究这个问题,几乎完全放弃了我的项目,直到我在他们的 Github 上发现了 Microsoft 的 SimpleMediaSource 驱动程序示例。它被记录在here,但如果您以前没有编写过驱动程序,那么读起来会很困难 - 对我来说就是这种情况。幸运的是,自从我使用它以来,文档似乎已经更新和改进了。

为了让它工作,我必须在每次使用 Visual Studio 编译后手动删除 DLL 并将其复制粘贴到

C:\System32
中。我还必须侧面下载并安装现已删除的(据我所知)
devcon
实用程序,以使用
devcon dp_add/dp_remove
命令添加和删除驱动程序。您还需要 Windows 驱动程序套件 (WDK)

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

有两个项目正在编译:

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

SimpleMediaSourceDriver - UMDF 驱动程序安装包


3
投票

只需安装obs studio

在较新的版本中,它会自动安装一个易于使用的虚拟网络摄像头来镜像 OBS 场景。


0
投票

我发布了一个免费项目,其中包含源自 DirectShowSDK 的源代码,用于创建虚拟相机。它可以在 SourceForge 上找到:https://sourceforge.net/projects/direct-show-demo-filters/

在这里您还可以找到一个名为 AVSHWS 的示例相机,该相机在内核空间中运行:http://ftsoft.com.cz/CamView/ - 此相机经过常规签名,您的编译将没有正确的签名并且 Windows10可以拒绝。

© www.soinside.com 2019 - 2024. All rights reserved.