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

标签 winapi windows-10 webcam directshow video-capture

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

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

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

最佳答案

虚拟网络摄像头通常是一种纯软件实现,应用程序发现它就像具有物理表示的设备一样。上述应用程序使用 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 服务,该服务又将生成的视频作为源与常规摄像机一起分发。应用程序看到此软件实现的方式就像它是网络摄像头一样。

关于winapi - 如何在 Windows 10 中创建虚拟网络摄像头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33693131/

相关文章:

python - 从弹出菜单中选择项目 win32 api Python

c++ - 如何将文件从回收站还原到特定位置?

Python 模块错误仅在 Windows 10 中出现?

perl - 如何使用 perl 在 Windows 10 上获取 OsVersion

python-3.x - 给定该文件的路径,如何使用 python 关闭在 windows 上的 excel 应用程序中打开的一个特定 csv 文件?

Bash:使用文件名的一部分对查找结果进行排序

c++ - 使用 boost::serialization 时如何刷新文件缓冲区?

windows - Windows 应用程序如何使用多个进程?

javascript - getUserMedia 在 Chrome 中不起作用

java - 使用网络摄像头改进条形码扫描 - Java