内容提要
Neon 是一款 Windows 11 虚拟摄像头工具,基于 MFCreateVirtualCamera API,无需驱动即可创建最多 16 台虚拟相机,支持播放列表、音视频同步和 HTTP API 控制。它通过双进程架构分离解码与帧传输,确保稳定性。音频输出需借助虚拟声卡,已知限制包括仅支持 Windows 11 22000+ 和无法伪装物理摄像头。项目开源,MIT 许可。
延伸解读
为什么需要双进程架构
Neon 将解码和帧传输分离到两个进程,是因为 Media Foundation 的 media source 由系统 Frame Server 加载到 svchost 中,无法在其中运行解码器或 HTTP 服务。这种设计避免了解码崩溃拖垮系统服务,但引入了额外的帧拷贝和 IPC 开销。对 1080p30 来说代价可接受,实测能跑满帧率。
音频输出的限制与变通
Media Foundation 虚拟摄像头只支持视频,Windows 没有用户态虚拟麦克风 API,因此 Neon 只能将视频音轨渲染到输出设备。要让会议软件将其作为麦克风,需借助 VB-Audio Virtual Cable 等虚拟声卡,将输出连接到虚拟输入。这是用户态方案的天花板,不如内核驱动方案优雅,但避免了驱动签名和安装的复杂性。
使用中的注意事项
Neon 仅支持 Windows 11 22000+,且相机名称修改会重建设备,导致已打开的应用需重新选择。系统还会强制在名称后追加“Windows Virtual Camera”后缀,防止伪装物理摄像头。此外,相机不支持图片或纯音频文件,分辨率帧率在创建时固定,所有视频会被拉伸。长视频可能因缺少时钟漂移校正而出现音画不同步,需注意。
Q&A
Neon 是什么?它主要解决什么问题?
Neon 是一款 Windows 11 虚拟摄像头工具,基于 MFCreateVirtualCamera API,无需驱动即可创建最多 16 台虚拟相机。它解决了传统 DirectShow 虚拟摄像头在现代应用(如 Teams、新版 Edge)中不被识别的问题,让用户可以直接在会议软件中选择本地视频作为摄像头画面。
Neon 如何实现虚拟摄像头?它需要安装驱动吗?
Neon 使用 Windows 11 的 MFCreateVirtualCamera API,在用户态创建虚拟摄像头,无需安装内核驱动或进行驱动签名。它通过注册 COM 组件,由系统 Frame Server 托管,因此任何支持标准相机枚举的软件都能识别。
Neon 支持哪些功能?比如可以创建多少台虚拟相机?
Neon 支持最多 16 台虚拟相机同时运行,每台相机可独立设置名称、分辨率(默认 1280x720@30,最高 4096 分辨率、120fps)和帧率。每台相机可关联播放列表,支持顺序播放、循环模式、精确 seek、音视频同步,并可通过 HTTP API 控制。
Neon 的音频是如何处理的?为什么需要虚拟声卡?
Neon 的虚拟摄像头只支持视频,音频输出需要借助虚拟声卡(如 VB-Audio Virtual Cable)。它将视频中的音轨渲染到指定的输出设备,然后通过虚拟声卡将音频作为麦克风输入提供给会议软件。这是因为 Windows 没有用户态的虚拟麦克风 API,必须使用内核驱动,而 Neon 是用户态方案。
Neon 有哪些已知限制?
Neon 的已知限制包括:仅支持 Windows 11 22000 及以上版本;无法伪装成物理摄像头,系统会强制添加“Windows Virtual Camera”后缀;不支持图片或纯音频文件作为播放项;相机创建后分辨率帧率固定,视频会被拉伸;改名会重建虚拟摄像头,导致已打开的应用需要重新选择设备。
Neon 的安装和使用步骤是什么?
安装 Neon 需要先构建(使用 VS2022 和 Windows SDK 22000+,依赖通过 vcpkg 管理),或直接下载 Releases 安装包。安装后运行三条命令:`dfvcam install`(管理员权限,一次性注册)、`dfvcam doctor`(自检)、`dfvcam serve --port 8686`(启动服务)。相机是会话生命周期的,服务退出后相机消失,下次启动会按配置重建。
Neon 的播放列表有哪些行为特性?
Neon 的播放列表支持播放中更换列表不断流(当前视频若在新列表中则继续播放,否则重新开始);支持三档循环(不循环、单条循环、整表循环);上一条/下一条总是环绕;暂停后音画同步续播;坏文件自动跳过并记录原因;seek 精确到帧。
Neon 的 HTTP API 有哪些特点?如何保证安全?
Neon 提供完整的 HTTP API,默认监听 127.0.0.1:8686,免认证。若需暴露到局域网,可在 config.json 中配置 auth 节启用 JWT(HS256),签名密钥每次启动随机生成,重启后旧 token 失效。命令类接口是异步的,返回 200 仅表示命令入队,实际效果需轮询查询。
Neon 的架构是怎样的?为什么采用双进程设计?
Neon 采用双进程架构:dfvcam.exe 负责解码、缩放、音频渲染、HTTP 控制等重活;dfvcam_source.dll 作为 COM media source,仅从管道接收 NV12 帧并交给 Frame Server。这样设计是因为 media source 由系统 Frame Server 加载到 svchost 进程,无法在其中运行解码器等,分离可避免解码崩溃影响系统服务,代价是多一次帧拷贝和 IPC。
Neon 的性能表现如何?
实测双路 1080p30 并发拉流可达 29.9/30.2 fps,满帧;低帧率相机 2fps 探针为 2.2 fps;16 槽占满时创建第 17 台会返回 400 拒绝;配置异常时会自动回退到默认值并告警。单元测试 40 项,行为探针最多 105 项,且测试可复现。