Obs-mac-virtualcam: macOS System Apps blocking DAL (FaceTime, Photo Booth)

Created on 14 May 2020  路  16Comments  路  Source: johnboiles/obs-mac-virtualcam

Quoting the wiki:

Recent versions of macOS seem to disallow DAL plugins for system apps (e.g. Safari, Facetime, Photobooth).
TODO: Which versions of macOS block DAL plugins in which apps?

If people with older versions of macOS could provide these information that would be much appreciated 馃槂
(Just post them in the comment section here)

Current state:

10.13 High Sierra

|App|Works with DAL|
|---|---|
|FaceTime|No|

Old macOS documentation help wanted

Most helpful comment

macOS High Sierra 10.13.6
| App | Works? | Console |
|-----|--------|-----------------|
| Photobooth.app | Yes | | |
| FaceTime.app | Yes | |
| Safari.app | No | (couldn't find anything) |
| QuickTime Player.app | Sort of [1] | OBSDAL: Server is not available and OBSDAL: Queue is full, bailing out repeatedly.

[1] After selecting the source, the stream has lots of hiccups, and only shows the default splash screen "OBS Virtual Cam is inactive".

All 16 comments

10.14.5 Mojave
App | Works with DAL | Console Output
------------ | ------------- | -------------
FaceTime | nope | Error loading /Library/CoreMediaIO/Plug-Ins/DAL/obs-mac-virtualcam.plugin/Contents/MacOS/obs-mac-virtualcam: dlopen(/Library/CoreMediaIO/Plug-Ins/DAL/obs-mac-virtualcam.plugin/Contents/MacOS/obs-mac-virtualcam, 0x0106): code signature in (/Library/CoreMediaIO/Plug-Ins/DAL/obs-mac-virtualcam.plugin/Contents/MacOS/obs-mac-virtualcam) not valid for use in process: mapping process is a platform binary, but mapped file is not
Quicktime | yes - as long as VirtCam isn't started only outputs [email protected] | OBSDAL: -[PlugIn startStream] OBSDAL: -[Stream startServingDefaultFrames] OBSDAL: Server is not available
Quicktime | no, not really - if VirtCam is started recording crashes after a view frames | OBSDAL: Queue is full, bailing out repeated once a second as long Quicktime is running
PhotoBooth | no | Error loading /Library/CoreMediaIO/Plug-Ins/DAL/obs-mac-virtualcam.plugin/Contents/MacOS/obs-mac-virtualcam: dlopen(/Library/CoreMediaIO/Plug-Ins/DAL/obs-mac-virtualcam.plugin/Contents/MacOS/obs-mac-virtualcam, 0x0106): code signature in (/Library/CoreMediaIO/Plug-Ins/DAL/obs-mac-virtualcam.plugin/Contents/MacOS/obs-mac-virtualcam) not valid for use in process: mapping process is a platform binary, but mapped file is not

all console.log entries are followed by a kernel message
Library Validation failed: Rejecting '/Library/CoreMediaIO/Plug-Ins/DAL/obs-mac-virtualcam.plugin/Contents/MacOS/obs-mac-virtualcam' (Team ID: 62G85M9ZN5, platform: no) for process 'FaceTime(12741)' (Team ID: none, platform: yes), reason: mapping process is a platform binary, but mapped file is not

Thanks for the investigation!!!

I wonder if there are any workarounds for mapping process is a platform binary, but mapped file is not. Perhaps disabling SIP?

The QuickTime recording issue is something different I think. I suspect it's a timestamping issue. Tracking that in #91

Not sure! I think Apple could solve this securely by adding a layer of indirection where the DAL plugins run in a separate process from FaceTime/PhotoBooth. Similar to how Chrome solved this but at the OS level

macOS High Sierra 10.13.6
| App | Works? | Console |
|-----|--------|-----------------|
| Photobooth.app | Yes | | |
| FaceTime.app | Yes | |
| Safari.app | No | (couldn't find anything) |
| QuickTime Player.app | Sort of [1] | OBSDAL: Server is not available and OBSDAL: Queue is full, bailing out repeatedly.

[1] After selecting the source, the stream has lots of hiccups, and only shows the default splash screen "OBS Virtual Cam is inactive".

macOS Mojave 10.14.6

App | Works? | Console
-- | -- | --
Zoom.app | Yes | (v 5.0.2)
FaceTime.app | No | 聽
Photobooth.app |聽Yes |
Microsoft Teams.app | Yes | (v 1.3.00.9271)
GoToMeeting.app |聽Yes | (v 10.8.0 b 16786)
GoToTraining |聽Yes |

Interesting that PhotoBooth does not work for @c3labs on 10.14.5 but it does work for @max-ott on 10.14.6

Photobooth also does not work for me on 10.14.6.

As a sidenote, I discovered that if I duplicate the Facetime.app into something else like "MyFacetime.app" and run that, all the DAL cams are listed. Apparently this "demotes" the platform apps to user apps?

On "MyPhotoBooth" I can actually use those.

On "MyFaceTime" however, I cannot use the virtual cams as it seem to be defaulting to a normal camera anyhow (or the avconferenced involved providing the AVConferencePreview XPC service?) .

default 11:09:31.029255 +0200   FaceTime    User selected new camera from menu: obs-virtual-cam-device
default 11:09:31.029371 +0200   FaceTime    Found matching device: [obs-virtual-cam-device] <private>
default 11:09:31.029433 +0200   FaceTime    AVConferencePreview [WARNING] -[AVConferencePreview setLocalCameraWithUID:]:708 requestedCameraUniqueID = obs-virtual-cam-device
default 11:09:31.030051 +0200   FaceTime    AVConferencePreview [WARNING] -[AVConferencePreview localCameraUID]:766 AVConferencePreview localCamera obs-virtual-cam-device
default 11:09:31.041256 +0200   FaceTime    Adding video menu item (camera): [obs-virtual-cam-device] <private> -> <private>

This is an interesting thread which discusses the problem with Apple, with the "only" solution at this point is to disable SIP.

@gerwindehaan whoa neat trick! Yeah if FaceTime uses XPC to something that actually handles the video that'd make sense a simple rename wouldn't work.

Out of curiosity I tried the trick to rename FaceTime mentioned above and also disabled SIP (yes, I know I should not do this) and I'm able to switch to "OBS Virtual Camera" however FaceTime only seems to see the OBS logo and no video.

Screen Shot 2020-07-11 at 7 28 47 PM

With SIP enabled it wouldn't even show the logo for me.

Commented https://github.com/johnboiles/obs-mac-virtualcam/issues/4#issuecomment-657896452 on the other thread, but thought it was mentioning here.

I know disabling SIP has been brought up a few times, and isn't perfect for everyone (obviously), but you don't have to fully disable SIP to get it working in all apps. I am running Catalina right now and FaceTime is working with EpocCam (same idea as this plugin).

csrutil enable --without fs will do it and leave some protections in place.

You can read more about the implications of that here: https://eclecticlight.co/2017/04/28/sierras-system-integrity-protection-sip-beyond-root/

I also added this to the wiki here. Let me know if thats ok or if we would like to see any changes.

Out of curiosity I tried the trick to rename FaceTime mentioned above and also disabled SIP (yes, I know I should not do this) and I'm able to switch to "OBS Virtual Camera" however FaceTime only seems to see the OBS logo and no video.

Screen Shot 2020-07-11 at 7 28 47 PM

With SIP enabled it wouldn't even show the logo for me.

Having this same issue. Not sure what kind of workaround could be put in place. Thanks!

Also having the same issue. I want to use my iPhone as a webcam on my Macbppl when I have the lid closed and it is docked using my external monitor.

Can confirm that the duplicating FaceTime app does work on macOS Big Sur still but you can't use It (as before) seems the only way is to disable SIP?

Is it not possible for us to sign the plugins? I have a developer apple account

The DAL plugin distributed here should be properly signed and stuff.

Same issue here with FaceTime.app after enabling SIP. Additionally, the OBS logo is mirrored sideways (a version string of "1.2.1" is displayed at the bottom of the OBS logo graphics but only readable from right to left).

Closing since this is more or less a duplicate of #4 but would be worth compiling all these workarounds into the OBS wiki or something.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

lisaross picture lisaross  路  9Comments

emmecirm picture emmecirm  路  3Comments

mkarliner picture mkarliner  路  11Comments

wookayin picture wookayin  路  3Comments

johnboiles picture johnboiles  路  4Comments