Photo by Ravi Palwe / Unsplash

Canon EOS Webcam with M1 MacBook Pro

Sep 19, 2022

I have been working on a MacBook Pro for nearly as long as I can remember. For a long time, I have considered making the switch to RHEL or Fedora as my main workhorse, but at this point keeping MacOS around has been more about OS familiarity. Being a creator in the video/music space, purely for hobby, puts me in a slightly unique position when considering Linux, even though I work at Red Hat.

Earlier this year I made the switch to an ARM-based M1 MacBook Pro, which work kindly provided. Since this was initially a migration from an x86_64-based model to the new M1, I simply used my old system to restore my previous environment and applications to the new MacBook Pro. This was great with a few exceptions (some which I wouldn't quite realize until later).

  • Manually installed applications would remain on x86_64 architecture
  • Homebrew applications would also remain on x86_64 architecture

This means that my new M1 MacBook Pro would have to work extra hard to run applications from day to day. Rosetta 2 handled this impressively well, but of course this isn't ideal. As luck would have it, my environment absolutely blew up during the last minor OS update, and it was nearly impossible to recover. Making things more complicated, the only backups I really had were all with Intel-based applications.

So let's start over...

When to use Intel-based Applications

When starting over, I made an important discovery (yes, I'm a little slow to the game). The Canon EOS Webcam Utility was incredible when it launched during the height of the pandemic. It made me so proud to own a Canon product, because they released this tool quickly in the absence of webcams - if you remember, there was a shortage due to work from home restrictions. But Canon has long forgotten about this useful utility, despite the outpouring of requests from users. The recommendations from Canon to simply "download x86_64-based versions" of Chrome (for Google Hangouts), Teams, Webex, Zoom, and literally every other application they claim compatibility with, is a pretty pathetic response. Let's try to limit this to only one Intel-based application - OBS.

Step 1: Install Homebrew

Make sure to have Homebrew installed on your new M1 Mac. Next, you're going to want to grab the Intel-based version of this application by running the following command. This will set a one-time architecture flag for installing an Intel-based version of a specific package.

arch -x86_64 brew install obs 

Step 2: Download and Install the Canon EOS Webcam Utility

Go to the following LINK for the Official Canon EOS Webcam Utility. If you wish to find this download yourself, you can go to the official Canon EOS Webcam Utility main page follow these steps:

  1. Select your camera model
  2. Select "Software & Drivers"
  3. Select "Mac" as the Operating system, and "macOS Catalina v10.15" (this is important)
  4. Find the link for the "EOS Webcam Utility 1.0 macOS", enter your information and download the package

IMPORTANT: The only option to download the EOS Webcam Utility for Mac is if you select "macOS Catalina v10.15". This is because Canon hasn't put any effort into the development of this software since this version of MacOS (which is an Intel-based OS for what it's worth).

Step 3: Configure OBS to use the EOS Webcam Utility

Next, open OBS and set up your scene as you normally would. For your source, you will now see an option for the "EOS Webcam Utility". You would not be able to see this if you installed the ARM-based version of OBS. Select this "device", and finally click on "Start Virtual Camera" on the far-right hand side of OBS.

Now with Google Hangouts, or any of the other applications that have switched over to official ARM-based deployments, you can simply select OBS from the video options, and things will work beautifully - as they should. If your application can talk directly to the EOS Utility, it's only because the version of the application you're currently running is actually an Intel-based application.

One way to determine which apps are considered Intel-based applications, is to run the following command:

system_profiler SPApplicationsDataType -json | jq -r '.SPApplicationsDataType' | jq '.[] | select(.arch_kind | test("arch_i64"))'

You can also use this GUI-based method to determine if your applications are running as Apple Silicon, Universal, or Intel by going to "About This Mac" > "System Report" > and under "Software" select "Applications". You will see something similar to the following screen:

Conclusion

This post doesn't follow my standard "cloud" content, but I hope that someone finds it to be useful. There are definitely some downsides to using an Intel-based version of OBS. It consumes more resources (from what I've found), and it can even sometimes crash. Although I haven't quite figured this one out yet, I would assume it has something to do with the Rosetta emulation behavior, mixed with real hardware devices. I'll have to look into this a little more when I have time, and then report back.