我想从网络摄像头拍摄视频,在帧上渲染一些文字并进行一些动作跟踪并将其传递给虚拟网络摄像头,以便轻松传输。
我在stackoverflow上找到了一些答案,建议我应该使用DirectShow。根据{{3}}中的信息,DirectShow SDK是Windows SDK的一部分。所以我安装了DirectShow documentation但似乎它没有包含DirectShow,因为C:\Program Files (x86)\Microsoft SDKs\Windows
下没有DirectShow示例。 (stackoverflow的答案也很古老 - 大约在2010年左右)
您能否建议一种让DirectShow工作的方法(包括在Visual Studio 2015上运行的示例)或DirectShow的其他替代方法,这将有助于我创建虚拟网络摄像头?
答案 0 :(得分:10)
虚拟网络摄像头通常仅是一种软件实现,应用程序发现它就像是具有物理表示的设备。上述应用程序使用API来处理网络摄像头,扩展API和添加自己的视频源的能力是创建虚拟网络摄像头的方法。
在Windows中,有一些API可以使用视频源:Video for Windows,DirectShow,Media Foundation(按时间顺序排列)。
适用于Windows的视频并非真正可扩展且功能受限。如果您为虚拟摄像机提供内核模式驱动程序,它将看到虚拟设备。
DirectShow是大多数支持视频捕获的Windows应用程序使用的API,它存在于所有Windows版本中,包括Windows 10(Windows RT除外)。然后它是完全可扩展的,在大多数情况下,术语“虚拟网络摄像头”指的是DirectShow虚拟网络摄像头。对于使用DirectShow实现视频捕获的应用程序,在许多StackOverflow问题中讨论的创建DirectShow虚拟网络摄像头的方法对于Windows 10仍然完全有效:
DirectShow示例已从Windows SDK中删除,但您仍可在旧版本中找到它们:
如果您为摄像机设备(通过自定义内核驱动程序提供虚拟网络摄像头)提供内核模式驱动程序,DirectShow也会像其他视频API一样看到它。
媒体基金会是DirectShow的后继者,但它在可扩展性方面的视频捕获功能根本不存在。微软决定不允许自定义视频源应用程序能够发现与网络摄像头相同的方式。由于Media Foundation的复杂性,开销和整体不友好性,它被适量的应用程序使用。要为Media Foundation应用程序实现虚拟网络摄像头,再次像Video for Windows一样,必须实现内核模式驱动程序。