如何在 macOS 上公开虚拟摄像头?

23
我想为视频聊天编写自己的相机滤镜,并在任何/所有流行的视频聊天应用程序(Zoom,Hangouts,Skype等)中应用它们。我想象中的工作方式是编写一个 macOS 应用程序,读取相机源,应用我的滤镜,并公开一个额外的虚拟相机。然后,在任何视频聊天应用程序中都可以选择这个虚拟相机。
我已经花费了很多时间研究如何做到这一点,但我仍然不清楚是否可以使用现代 macOS API 实现。StackOverflow 上有一些类似的问题(例如 herehere),但它们要么没有答案,要么非常古老。我希望这个问题能够收集到2020年如何实现这一点的建议/链接/想法。
以下是我目前的进展:
在直播流社区中有一个受欢迎的工具叫做OBS Studio。它可以捕获来自不同来源(相机、桌面等)的输入,有一个插件系统用于应用效果,然后将输出流传输到流行的服务(例如Twitch)。但是,在macOS上没有将流作为虚拟相机公开的功能。在讨论线程线程)中,人们谈论了一个名为Syphon和一个名为CamTwist的工具。
不幸的是,Syphon不再公开虚拟相机: “SyphonInject在macOS 10.14(Mojave)中不再起作用。苹果关闭了允许全局目录中的脚本添加加载到任何进程中的漏洞。尝试注入任何进程将默默失败。如果禁用SIP,则会起作用,但这是一个可怕的想法,我不会建议或帮助任何人这样做。”
幸运的是,CamTwist可以使用。我在我的macOS Catalina上运行它,在我的相机流上应用了一些内置效果,并在我的Hangouts设置中看到它显示为一个新的相机(在重新启动Chrome之后)。这很令人鼓舞。
不幸的是,CamTwist相当老旧且未得到良好维护。它使用Quartz Composer实现效果,但是Quartz Composer已被苹果弃用,在Catalina中可能是它的最后时刻。
macOS SDK曾经有一个名为CoreMediaIO的API,这可能是公开虚拟相机的方法,但是该API也已被弃用。目前不清楚是否存在现代替代方案。
我想问这个问题的另一种方式是:CamTwist是如何实现的,它为什么仍然可以在macOS Catalina中工作,以及您将如何在2020年实现相同的功能?

任何能够解释这一切的信息都将不胜感激!


就我个人而言,自从我有了Mac以来,过去一周左右我一直在使用OBS + CamTwist。它在与Zoom等应用程序一起使用时都很好,直到今天(几个小时前)我安装了一个新的OSX更新后就出问题了 :| 编辑:实际上,它似乎只在Zoom上出了问题。可能是今天的新Zoom更新。其他所有应用程序都正常 :) - Justin L.
编辑:看起来它可以在Google Meet和OBS之间工作,但它不会出现在照相亭中。可能是OSX API问题。 - Justin L.
1
请查看此链接:https://github.com/satoshi0212/VirtualCameraSample - Syed Sadrul Ullah Sahad
非常晚的回复,但我想将这个目录放在这个页面上以供将来参考。在 MacOS 上有一个目录 /Library/CoreMediaIO/Plug-Ins/DAL/,其中包含虚拟相机的 .plugin 文件,例如 SnapCamera.plugin - twe4ked
3个回答

2
我也想像Snap Camera一样创建自己的相机滤镜。因此,我研究了CoreMediaIO和Syphon。你有没有查看过这个Github项目?https://github.com/lvsti/CoreMediaIO-DAL-Example 这个仓库最初是Apple官方CoreMediaIO示例代码的分支。你知道的,原始代码由于上次更新是在2012年,所以已经不太适用于现代系统。因此,该仓库的所有者进行了更改,使其能够编译现代系统。
你可以知道该代码可以在macOS 10.14(Mojave)中运行,以查看以下问题:https://github.com/lvsti/CoreMediaIO-DAL-Example/issues/4 实际上,我还没有创建相机滤镜,因为我不知道如何将图像发送到由CoreMediaIO构建的虚拟相机。我想了解更多信息。如果你知道,请告诉我。

你可以查看以下的Github项目。 https://github.com/johnboiles/coremediaio-dal-minimal-example 现在它还不能工作。但我相信很快就会工作。 - tommy19970714

1

在 WWDC 2022 上宣布了 CoreMediaIO 的新 API:

了解如何使用 Core Media IO 轻松创建 macOS 系统扩展,包括软件相机、硬件相机和创意相机。我们将向您介绍我们的现代化替代传统 DAL 插件的扩展 - 这些扩展是安全、快速且完全兼容使用相机输入的任何应用程序。我们将向您介绍Core Media IO API,并分享它们如何支持相机制造商、视频会议应用程序的特效功能、创意应用程序等。

https://developer.apple.com/videos/play/wwdc2022/10022/


0

CamTwist使用CoreMedioIO。你怎么会觉得它已经过时了?我在查看10.15 SDK的标题时,没有看到任何迹象表明它已经过时。最近还有更新,就在10.14。


这个开发者页面上写着“此文档不再更新”,我在最新的文档中也没有找到相应的内容。同时,通过谷歌搜索“CoreMediaIO”可以看到一些关于示例代码失效和其他混淆的讨论(来自SO和其他论坛)。如果CoreMediaIO是正确的选择,那么有没有一个好的地方可以学习如何使用它呢?谢谢! - user18184
1
文档的归档很混乱。苹果更改了其文档的样式,并将所有文档都使用旧样式进行归档,无论其内容是否仍然相关。标题是明确的。我不确定示例代码是否有效。您链接的问题已经被自我回答者解决并得到了解决,所以有这个。此外,正如我所说,CamTwist(您报告的工作)使用CoreMediaIO。 - Ken Thomases

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接