Using a Canon DSLR as a webcam on macOS with Zoom

With the COVID-19 lockdown, I needed to do some videoconferencing with zoom.us, but I wanted something higher quality than my MacBook’s built-in webcam. So instead I wanted to use my Canon 5D III. (These instructions are for macOS only, not Windows)

First we need to export your camera’s proprietary liveview into a video stream we can use. To do this you can install v002-Camera-Live:

https://github.com/v002/v002-Camera-Live

Turn on your camera and connect it to your computer with USB, then run Camera Live and double click your camera in the list to activate it. This makes the liveview output from your Canon camera available as a Syphon video stream.

But zoom.us doesn’t support Syphon video directly, it only supports webcams. So you now need to convert the Syphon stream into a virtual webcam using CamTwist Studio:

http://www.camtwiststudio.com/

In CamTwist’s menu, go into Preferences and change the resolution to 1280×720 and the framerate to 25 fps, then quit CamTwist and reopen it. Double click “Syphon” in the left pane, then on the right pane select “Camera Live” as your source. Now in the menu bar, click View -> Preview, and you should see a small preview window from your Canon camera:

Configuring CamTwist to use Camera Live as the source

If your camera falls asleep, you will need to half-press its shutter to wake it back up and reselect the Camera Live stream in the right pane.

Now your Canon camera will appear as a webcam in Chrome’s settings, at least in Chrome version 81, so you’ll be able to use it with various webapps. But it will not be available in the Zoom.us app’s video settings if you’re using Mojave or Catalina. This is because Zoom is running in a high security mode that prevents CamTwist’s extension from being loaded into it.

To fix this you need to codesign the zoom.us app to add an entitlement which allows it to load libraries from third-party authors. Quit Zoom if it is already running.

First, create a codesigning identity for yourself:

  • Open the “Keychain Access” app
  • In the main menu select Keychain Access -> Certificate Assistant -> Create a certificate…
  • Call it “my-zoom”, set identity type to “self-signed root”, and certificate type to “code signing”
  • Click Create, and continue to finish the wizard

Now run these commands in the Terminal to make a new copy of the zoom.us app on your desktop and export its current entitlements to a file:

# First run this to install the XCode commandline tools:
xcode-select --install

# Now you can continue with the rest:
cd ~/Desktop
cp -a /Applications/zoom.us.app ./
codesign -d --entitlements :- zoom.us.app > entitlements.plist

Open up the entitlements.plist file that is created on your desktop in TextEdit to add these two lines before the closing </dict>:

<key>com.apple.security.cs.disable-library-validation</key>
<true/>

The end result should look like this:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>com.apple.security.automation.apple-events</key>
	<true/>
	<key>com.apple.security.device.audio-input</key>
	<true/>
	<key>com.apple.security.device.camera</key>
	<true/>
	<key>com.apple.security.cs.disable-library-validation</key>
	<true/>
</dict>
</plist>

Now back in the Terminal, you can use that new entitlements file to re-sign Zoom:

codesign -s "my-zoom" -f --options=runtime --entitlements entitlements.plist --timestamp zoom.us.app

Now you have a fixed version of Zoom on your desktop ready to use! You can either move it into your Applications folder to replace the original one, or keep it on the desktop. You may need to right-click on it and click “Open” to run it instead of double-clicking on it. Now if you enter Zoom’s preferences, you should find CamTwist as a choosable camera and everything will work nicely:

CamTwist is choosable as my camera finally!

Note that you’ll likely need to repeat this codesigning when Zoom is updated.

27 thoughts on “Using a Canon DSLR as a webcam on macOS with Zoom”

  1. Thank you for putting this together! It worked flawlessly and allowed me to Zoom with my family and my in-laws for Mother’s Day.

    I was honestly *shocked* that the Canon mirrorless DSLR couldn’t just simply be seen as a camera by macOS natively over USB. And, because I expected it to work seamlessly, I didn’t test it out in advance. I was unprepared to download a driver/direct USB stream interface (or, honestly, I’d have probably just written one given unlimited time), download a stream converter, and manually sign a custom Zoom configuration. Without your guide, I’d have been stuck using the built-in camera on my MacBook — and not been able to use the wide-angle option my Canon provides. It was easy to read, concise, and worked perfectly; I had everything set to go in under five minutes.

  2. Thanks so much for these instructions. Everything worked great until the last command when I get the following error:
    mike@MikesMBP Desktop % codesign -s “my-zoom” -f –options=runtime –entitlements entitlements.plist –timestamp zoom.us.app
    zoom.us.app: replacing existing signature
    zoom.us.app: resource fork, Finder information, or similar detritus not allowed
    mike@MikesMBP Desktop %

    Any suggestions?
    Thanks.

    1. Hm I think this might happen if you had never opened Zoom before since it was downloaded. Try opening it and dismissing the “this file was downloaded!” warning (you may need to right click it and click Open). Then quit it and try that command again.

      You can also run this before signing just in case this is what it’s worried about:

      rm -f zoom.us.app/.DS_Store

  3. This was tremendous – thank you so much. I have a GH5 connected via Blackmagic Mini Recorder and though the CamTwist made it visible in Quicktime Player (for recording) it didn’t show up in Zoom or FaceTime. This has really helped improve quality of video when Zoom’ing family and friends.

    I tried doing the same steps but for FaceTime.app and amending the entitlements file but the file is substantially larger and the resulting FaceTime.app crashes on execution. But having Zoom is a great win, thanks again.

  4. I can’t seem to get this to work. I am running Mojave 10.14.6. It seems to go ok until I open the entitlements.plist which show up as entitlements.plistcodesign. When I open the file in text edit it is blank. I have tried copying the whole end result command box and saving but it still won’t recognize my camera. Any thoughts?

    1. You must have made a mistake when copying and pasting the codesign command, because the file should definitely not end up being called “entitlements.plistcodesign”.

      1. Thanks, (showing my ignorance in the coding aspect of computing) I was copying and pasting the whole set of commands. Today I copied them line by line and it worked perfectly.

        1. That’s curious, copying and pasting the whole block works for me, which internet browser are you using?

  5. Hi Nicholas,
    thanks for this instructions.
    I get the following error:

    “zoom.us.app: replacing existing signature
    xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
    zoom.us.app: the codesign_allocate helper tool cannot be found or used”

    Any suggestions?

    1. Ah, try running “xcode-select –install” and install the commandline tools if prompted, then try again.

        1. Thanks for the feedback, I’ve added this instruction to my post now so it’ll solve this for others as well.

  6. I’ve run each step successfully, now the last step gives me this error: invalid argument “runtime”. any thoughts?

    1. Hm which version of macOS do you have? This feature (hardened runtime) is new in Mojave I think. In older macOS versions you can probably skip the codesigning altogether.

    1. Yep most likely codesigning is not required for you, so you should be able to see your webcam in your unmodified original Zoom app’s preferences once you have v002-Camera-Live and CamTwist running.

      1. All that comes up is the built-in, even though camera live and camtwist are both running. Zoom 5.0.2

        1. Ah okay, try this codesigning command instead (it’s a single line):

          codesign -s "my-zoom" -f --entitlements entitlements.plist --timestamp zoom.us.app

  7. Nikolas, thanks for the Zoom instructions, worked without problems. Do you know how to make Slack recognize the camera?

    1. It’s likely to be the same procedure except substitute “Slack” for “zoom” in the instructions.

      If all else fails you can use Slack in the Google Chrome web-browser – Chrome supports CamTwist.

  8. Hello! I appreciate the very detailed instructions you’ve provided here. I’m running macOS 11.2.2 on an Apple M1 MacBook Pro with Zoom 5.5.4.

    I’m able to follow your directions and I do not get any error messages, so it would appear that things are going well. CamTwist can see my Canon 6D and preview it.

    However, the modified copy of Zoom is does not show CamTwist as an option. Any suggestions would be sincerely appreciated.

  9. Thanks Nicholas. I’ve used the Canon Utility and it worked great until Zoom 5.5.4. It doesn’t recognize the Canon EOS utility, or the Sony Webcam Utility anymore.

    I was thinking that your approach to modifying the entitlements.plist file would do the trick, as that was a great solution earlier. Thanks for responding to my post yesterday – I’ll try the Canon utility again.

    1. Ah, I’ll retest this here and see if I can figure out what goes wrong in the new version

  10. I want to see If I can attach a fake camera to macos so I can start up facetime. Do you think that possible

    1. Are you running macOS in a VM? If so you can attach a webcam via USB passthrough.

      Otherwise it doesn’t look like Facetime is happy with the synthetic webcam presented by Camtwist Studio.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.