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

38
我想从网络摄像头中获取视频,为帧渲染一些文本,并进行一些运动跟踪,然后将其传递到虚拟摄像头,以便轻松地进行流式传输。
我在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的方法,可以帮助我创建虚拟摄像头?

从Windows SDK 7.x获取示例;使用最新的Visual Studio进行构建。没有标准的虚拟相机示例,您可以在谷歌上搜索Vivek的VCam。 - Roman R.
我下载了Windows 7的Windows SDK。当我启动安装程序时,出现了一个警告消息:http://imgur.com/AhYhhlR(说我有.NET Framework 4的预发布版,某些组件将不会被安装,我应该从提供的链接安装.NET Framework 4)。我仍然继续安装,但是在安装后,示例文件并没有出现在目标目录中。当我尝试安装.NET Framework 4时,安装程序拒绝安装,并表示我已经安装了.NET Framework。我想Windows 10并不支持这么老的SDK。 - Lukáš Neoproud
1
您可以在旧版Windows上安装它,并将文件复制到Windows 10。 - wimh
1
DirectShow不再受支持。我认为它在Vista中已被弃用。它已被Media Foundation取代。您可以查看Media Foundation Capture Source。您应该能够从这里找到一些信息:https://msdn.microsoft.com/en-us/library/windows/desktop/bb970511(v=vs.85).aspx - Vincent
2
DirectShow在过去15年中没有得到积极的开发。它尚未被弃用,而且绝对得到支持,例如Windows 10 DirectShow中AVI支持的错误,Microsoft最近修复了该问题并通过Windows Update提供了修复程序。 - Roman R.
@LukášNeoproud,您能否使用以下答案构建VC? - GMAC
3个回答

28

虚拟摄像头通常是一种仅由软件实现的设备,应用程序会将其发现为具有物理表示的设备。提到的应用程序使用API与网络摄像头进行交互,扩展这些API并添加自己的视频源是创建虚拟网络摄像头的方法。

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

Video for Windows 实际上不可扩展,并且在功能上受到限制。如果您为虚拟摄像头提供内核模式驱动程序,则会看到一个虚拟设备。

DirectShow是大多数启用视频捕获的Windows应用程序使用的API,它存在于所有Windows版本中,包括Windows 10(除了Windows RT)。然后它是完全可扩展的,在大多数情况下,“虚拟网络摄像头”一词指的是DirectShow虚拟网络摄像头。讨论如何创建DirectShow虚拟网络摄像头的方法在许多StackOverflow问题中都是完全有效的,适用于使用DirectShow实现视频捕获的应用程序:

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

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

媒体基础架构(Media Foundation)被认为是DirectShow的继承者,但在可扩展性方面的视频捕获能力实际上并不存在1。微软决定不允许自定义视频源应用程序与网络摄像头一样被发现。由于媒体基础架构的复杂性、开销和总体不友好性,它仅被少量应用程序使用。要为媒体基础架构应用程序实现虚拟摄像头,就像在Video for Windows的情况下一样,必须实现内核模式驱动程序。


1从Windows Build 22000(Windows 11)开始,有了新的APIMFCreateVirtualCamera,提供虚拟摄像头创建功能。开发人员可以实现一个视频源,将其连接到所谓的Windows Camera Frame Server服务,该服务将生成的视频作为源与常规摄像头一起分发。应用程序看到这个软件实现,就像它是一个网络摄像头一样。


3
你能否编写一个样例的 C、C++ 开源Github 项目,让所有Windows初学者社区都能够遵循您的代码并进行贡献? - user285594
2
@YumYumYum:原始的VCam示例一直托管在这里多年:http://tmhare.mvps.org/downloads.htm 当然,随着时间的推移,还开发了多个衍生版本和类似的滤镜。 - Roman R.
你的评论中的链接已经失效。 - Tim MB
3
好的,我会尽力进行翻译。以下是需要翻译的内容:@TimMB: See https://alax.info/blog/2161 + https://github.com/roman380/tmhare.mvps.org-vcam - Roman R.

5
这是一个网络上古老的问题,但我想我可以做出贡献:
大约一年前,我对此进行了调查,几乎要完全放弃我的项目,直到我在微软的Github上找到了他们的SimpleMediaSource驱动程序示例。虽然文档在这里有记录,但如果您之前没有编写过驱动程序,那么阅读起来会很困难。幸运的是,文档似乎已经更新并改进了自我使用以来。
为了使它工作,我必须在每次使用Visual Studio进行编译后手动将DLL从中删除并复制粘贴到C:\System32。我还必须侧面下载并安装现已删除(从我所知道的)devcon实用程序,以使用devcon dp_add/dp_remove命令添加和删除驱动程序。您还需要Windows Driver Kit (WDK)
您需要在Windows中启用未签名的驱动程序加载,因此如果要分发它,则可能不是一个好方法。反作弊和DRM软件也可能不欣赏它:)
有两个项目正在编译:

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

SimpleMediaSourceDriver - UMDF驱动程序安装包


3

只需要安装OBS Studio

在新版本中,它会自动安装易于使用的虚拟摄像头,镜像了OBS场景。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接