基于 DirectShow 实现的 Windows 平台虚拟摄像头
本文重点介绍利用 DirectShow 组件的特性实现在 Windows 平台下”虚拟摄像头”功能的方法, 同时简要介绍与探讨 DirectShow 本身的特性.
绝大多数虚拟摄像头从实现方式上来看可以分为两种思路:
- 在驱动层面进行开发, 模拟一个
物理摄像头
. 让 OS 以普通物理摄像头的方式调用虚拟摄像头. - 在 OS 平台通用的媒体组件层面进行开发, 模拟一个
视频流数据源
. 让 OS 层之上的应用以普通摄像头的方式调用虚拟摄像头.
其中方案 1.
的优点在于可以在当前平台下完全伪造一个物理摄像头, 只要用户行为没有脱离 OS 的控制范围, 那么这个摄像头都是可用正常使用的. 缺点是驱动开发的难度和工作量很大, 需要针对不同的硬件平台提供不同的驱动程序.
方案 2.
的优点在于开发难度相对较小, 只要针对不同的 OS 提供不同的软件即可, 无需关心硬件的差别. 缺点在于部分不依赖当前 OS 平台通用媒体组件的应用场景是没办法覆盖到的.
文本采取的方案是后者, 这同时也是 OBS 与 Mevo 等团队采用的方案. 对于我们的目标平台 Windows, 自 2005 年其正式成为 Windows Vista 的组件起至今 (2022 年 Windows 11) 就一直作为 Windows 平台下的通用媒体组件. 我们的工作也将围绕 DirectShow 展开.