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)

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, it only supports webcams. So you 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 development tools:
xcode-select --install

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.

4 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.

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.