一款 26 年前的 LEGO Studios 摄像头(最初于 2000 年发布)现在可以在现代 MacBook Pro 上作为实时网络摄像头使用。通过利用用户空间驱动程序和 OBS Virtual Camera,开发者 Benjamin Kelly 绕过了该设备内部 Logitech QuickCam Web 硬件缺乏官方 macOS 驱动程序这一事实。

这张图片识别了由新的用户空间驱动程序重新激活的特定 26 年前的硬件。
绕过内核限制
出于安全原因,现代 macOS 使得加载内核扩展变得困难,这通常会导致旧款 USB 设备无法被识别。为了解决这个问题,开发者使用 libusb 编写了一个名为 legocam 的驱动程序,它允许标准程序直接与 USB 设备通信,而无需系统级的内核权限。
该项目包含大约 400 行 C 和 Objective-C 代码。它通过特定的 USB ID (046d:0850) 识别摄像头,并处理唤醒传感器和开始流式传输所需的底层通信。
协议逆向工程
由于该摄像头的特定通信协议已不再有 macOS 的相关文档,开发者转向了 Linux 社区。通过分析 gspca_stv06xx 驱动程序,他们确定了操作 STV0610 USB 桥接器和 VV6410 图像传感器所需的精确寄存器写入序列和同步 USB 数据包结构。
legocam 工具将这些原始数据包拼接在一起,并将帧作为原始 356x292 像素的 Bayer 模式 (bayer_grbg8) 输出到 stdout。这保持了初始数据处理的简单性,并将其与最终的显示逻辑解耦。
虚拟摄像头桥接
虽然可以使用像 ffplay 之类的工具查看原始数据,但 macOS 要求设备必须拥有签名的摄像头扩展才能出现在 Zoom 或 FaceTime 等应用中。为了规避这一点,开发者创建了第二个名为 obscam 的程序。
Obscam 从第一个程序中获取原始帧,使用 libswscale 将其转换为彩色,并推送到 OBS Virtual Camera。由于 OBS 已经提供了签名扩展,LEGO 摄像头便可以在任何标准的视频应用程序中作为“OBS Virtual Camera”被选中。

此视觉效果展示了复古硬件与现代 macOS 软件的成功集成。
硬件限制与约束
由于硬件过于陈旧,该设置面临显著的性能权衡。帧率被限制在每秒大约 5 帧,这是由原始 USB 1.1 带宽和传感器的内部时钟造成的限制,而非软件实现的限制。
此外,该摄像头缺乏自动曝光功能,用户需要通过命令行参数手动设置曝光和增益值。目前,LEGO 积木上的麦克风和物理快照按钮仍无法工作。