
开发者仅用400行代码为2000年乐高摄像头编写macOS驱动
来源标题:Legocam: My Lego webcam from 2000, working on a modern Mac
一名开发者用约400行C和Objective-C代码为2000年乐高电影工作室套装中的罗技QuickCam摄像头编写了macOS用户态驱动legocam,使其能在Zoom、FaceTime和浏览器中正常使用。该摄像头内部为罗技QuickCam Web,多年无可用macOS驱动。开发者借助libusb直接与USB设备通信,并参考Linux的gspca_stv06xx驱动实现了协议。现在该摄像头可作为普通命令运行。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
LEGO Studios 摄像头内部其实是一个 Logitech QuickCam。多年来一直没有 Mac 驱动能支持它,所以我写了一个小型的用户态驱动,并将它接入 OBS Virtual Camera。现在它可以在 Zoom 中使用了。
2000 年圣诞节,妈妈送给我 LEGO 与 Steven Spielberg 电影制作套装(1349)。我非常喜欢它。最棒的部分是摄像头:一个装在 LEGO 砖块外壳里的小型网络摄像头。我把它夹在 LEGO 遥控车底座上,做成一辆间谍车,让车在我那台小小的 Sony VAIO 笔记本电脑周围行驶,直到 USB 线能够到的范围为止。
这个摄像头内部是 Logitech QuickCam Web,USB ID 为 046d:0850。长期以来,没有任何 macOS 驱动能支持它。所以我写了一个。
legocam 大约有 400 行 C 和 Objective-C 代码,现在这个摄像头可以出现在 Zoom、FaceTime 和浏览器中。
现代 macOS 让加载内核扩展变得很困难,这是有充分理由的。我并不需要内核扩展。libusb 可以让普通程序直接与 USB 设备通信,所以 legocam 只是一个你运行的命令。
困难之处在于知道该对摄像头说什么。幸运的是,Linux 仍然支持它。gspca_stv06xx 驱动非常了解这个摄像头:一个 STV0610 USB 桥接芯片,前面连接着 VV6410 图像传感器。我阅读了那个驱动并复制了协议:要写入哪些寄存器、按什么顺序写入,才能唤醒传感器并开始传输视频流。
摄像头通过一个等时 USB 端点发送帧。每个数据包都有小型头部,用于标记一帧的开始、图像数据和一帧的结束。legocam 将数据拼接起来,并把每个完整的帧写入 stdout:原始的 356x292 像素,采用 Bayer 模式(bayer_grbg8)。
将原始帧写入 stdout 可以保持简单。ffplay 可以直接显示它们:
make view
让它进入 Zoom
一个打印帧的命令并不是网络摄像头。在 macOS 上,新的摄像头必须是一个经过签名的摄像头扩展,而免费的 Apple 开发者账户无法为其签名。但 OBS 已经附带了一个经过签名的扩展:OBS Virtual Camera。因此我写了第二个小程序 obscam。它通过 CoreMediaIO 找到 OBS 摄像头设备,打开其输入流,并将帧转换颜色后用 libswscale 推入其中。OBS 应用甚至不需要运行。
make webcam
然后在任何应用中选择“OBS Virtual Camera”。
Photo Booth,来自 LEGO 摄像头的实时画面。第一个测试对象是 Buttercup,我的一只哈巴狗。
我已经在一台搭载 macOS 15.7.3 的 Intel MacBook Pro 上测试过它。如果你在 Apple Silicon 上尝试,请告诉我结果如何。
如果没有那些多年前为大多数人都已丢弃的摄像头编写并维护 Linux gspca_stv06xx 驱动的人,这一切都不会存在。legocam 采用 GPL-2.0 许可证,就像它从中学习的驱动一样。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。