我想从一个摄像头的视频,渲染一些文本的框架,并做一些运动跟踪,并将其传递到一个虚拟摄像头,以便它可以很容易地流。
我在stackoverflow上找到了一些建议我应该使用DirectShow的答案。根据DirectShow documentation中的信息,Windows SDK是Windows SDK的一部分。所以我安装了latest Windows SDK,但它似乎没有包含DirectShow,因为在C:\Program Files (x86)\Microsoft SDKs\Windows下没有DirectShow示例。( stackoverflow的答案也相当古老,大约在2010年左右)
你能推荐一种让DirectShow工作的方法(包括在Visual Studio2015上工作的示例)或DirectShow的其他替代方法,可以帮助我创建一个虚拟摄像头吗?
发布于 2016-03-11 16:41:12
虚拟网络摄像头通常是应用程序发现的纯软件实现,就好像它是具有物理表示的设备一样。上述应用程序使用API与网络摄像机一起工作,并且能够扩展API并添加您自己的视频源,这是创建虚拟网络摄像机的方法。
在Windows中,有一些API可以使用视频源: video for Windows、DirectShow、Media Foundation (按时间顺序)。
Video for Windows并不是真正可扩展的,整体功能也是有限的。如果您为虚拟摄像机提供内核模式驱动程序,它将看到一个虚拟设备。
DirectShow是大多数支持视频捕获的视窗应用程序使用的API,它存在于包括Windows10在内的所有视窗版本中(除了Windows RT)。然后它是完全可扩展的,在大多数情况下,术语“虚拟摄像头”指的是DirectShow虚拟摄像头。在许多DirectShow问题中讨论的创建StackOverflow虚拟摄像头的方法在Windows10中仍然完全有效,对于使用DirectShow实现视频捕获的应用程序:
DirectShow示例已从Windows SDK中删除,但您仍然可以在旧版本中找到它们:
如果您为摄像头设备提供了内核模式驱动程序(通过自定义内核驱动程序来查看您的虚拟摄像头),DirectShow也会像其他视频API一样看到它。
Media Foundation被认为是DirectShow的继任者,但它的视频捕获功能在可扩展性方面根本不存在。微软决定不允许自定义视频源应用程序将能够发现与网络摄像头相同的方式。由于Media Foundation的复杂性、开销和整体不友好性,它被适量的应用程序使用。要为Media Foundation应用程序实现虚拟网络摄像头,您必须实现内核模式驱动程序。
发布于 2021-10-26 00:17:23
这在互联网上是一个古老的问题,但我认为我可以做出贡献:
大约一年前,我一直在研究这个问题,几乎完全放弃了我的项目,直到我在微软的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中启用未签名的驱动程序加载,因此如果您想要分发它,这可能不是一个很好的方法。防作弊和数字版权管理软件可能也不会欣赏它:)
有两个项目正在编译中:
自定义媒体源的
MediaSource - COM DLL项目SimpleMediaSourceDriver - UMDF驱动程序安装包
https://stackoverflow.com/questions/33693131
复制相似问题