macOS:访问虚拟相机 (OBS) 作为 AVFoundation CaptureDevice

macOS: Accessing a virtual Cameras (OBS) as AVFoundation CaptureDevice

在 macOS 上,是否可以将虚拟相机(例如 OBS)视为 CaptureDevice? 我看到了,比如Google Chrome or Zoom 都可以用这个摄像头,但是用AVCaptureDevice.DiscoverySession 就看不到了

我做错了吗?

    var deviceTypes: [AVCaptureDevice.DeviceType] = [.builtInMicrophone, .builtInWideAngleCamera]
    #if os(OSX)
    deviceTypes.append(.externalUnknown)
    #else
    deviceTypes.append(contentsOf: [.builtInDualCamera,
                                    .builtInDualWideCamera,
                                    .builtInTelephotoCamera,
                                    .builtInTripleCamera,
                                    .builtInTrueDepthCamera,
                                    .builtInUltraWideCamera])
    #endif
    let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: deviceTypes,
        mediaType: nil, position: .unspecified)

    result = discoverySession.devices.map { device in
        device.localizedName
    }

尝试将 DiscoverSession mediaType 设置为 .video,并确保您的 OBS 虚拟相机正常工作:您应该可以在相机菜单中 select 它在 Photo Booth.app.

这可能与强化运行时和库验证有关。

打开库验证后,macOS 不再加载使用第 3 方凭据签名的框架或插件。这是强化运行时的一部分,现在默认启用。不知道 OBS,但虚拟捕获设备通常作为 CoreMediaIO 插件实现,在应用程序启动时加载,因此受此影响。

为了进行快速测试,您可以尝试禁用 Hardened Runtime 或设置 entitlement that disables library validation 并打开 HR。不过,我不知道 Mac App Store 是否接受具有此权利的应用程序。
另一种方法是使用您的签名凭据重新签署 CoreMediaIO 插件(如果是 possible/allowed):https://developer.apple.com/forums/thread/126895?answerId=398061022#398061022

developers of Camo have a good FAQ with some technical details about the library validation implications on CoreMediaIO plug-ins and there's also a comprehensive Whosebug answer here.