We Are All Streamers Now

The past couple of weeks have been essentially wall-to-wall conference calls of one form or another, both on the clock and off: another podcast episode came out this week (in Portuguese, sorry, but focused on remote working), we had a Pixels Camp Tea Time broadcast this Thursday, and there were a couple of Friday impromptu get togethers, both at work and on our own time:

Our motley crew trying out Jitsi Meet, courtesy of nosuchuser.

Now, I’m working “normally” and taking on a few extra calls outside my timezone for good measure (which means I’m also more than a bit fascinated with–no, jealous of–all the creativity and free time out there…).

The timezones I currently deal with, courtesy of Clocker.

So I’ve been spending a lot of time on calls, and progressively tweaking my office setup in various ways.

Mic/Headset

I use a cheap headset for work calls (which are mostly audio-only, but trending towards more video as people start craving richer interaction), but have a Samson Meteor mic for everything else (that I really should order a decent stand for someday).

My Surface has excellent internal microphones (that put my iMac‘s to shame), but I’ve gotten away with using webcam built-in mikes in a pinch.

Camera

Speaking of which, it is hardly news that Apple has let Mac webcam quality degrade to an embarrassing level (even recent laptops still ship with the same built-in, utterly crummy 720p webcam they did a few years ago), so I’ve been making my way through the Logitech webcam range for a few years.

I now have a Logitech Brio 4K on my iMac (which I got for the color range rather than the resolution, which is wasted on most conferencing platforms) and a C920 for my Surface Pro 4.

The Surface also has an excellent built-in webcam, but I have it set up beneath my monitors and to the side, so when I upgraded my Mac setup it made sense to slide C920 over to the top of the nearest monitor.

Lighting

I’ve tried a number of different lighting setups, but the simplest works best for me: I just turn my desk lamp back towards the wall to get nice, uniform diffused lighting.

Your mileage may vary, obviously, and a LED ring of some kind may come in useful (I have one of these I use for photography, but I find it a bit of an eyesore to keep on my desk).

Studio

The time soon comes when you start wanting a bit more control over both screen sharing and camera, and I’ve been playing around with OBS Studio on both Windows and macOS to that effect.

That works great for screencasts, but getting OBS to output to a virtual webcam (so that I can inject the result into Teams or Skype), is another matter altogether. There is a very nice plugin for Windows, but I can’t seem to find a decent solution for the Mac.

There is a workaround, but it is quite CPU-intensive (and my iMac is “just” an i5): Webcamoid. It has a hideous UI, but is the only thing I could get working under Mojave to capture an entire screen and send it out as a virtual camera image.

So what I do is get OBS to “project” all its rendered overlays onto that extra screen, and send the result out as a “webcam”.

Fortunately, I had temporarily set up a third 1080p monitor way off to my right side (using an adapter I had lying around). It now does double duty as a “distraction” zone (I keep IM on it, easy to glance at but not within my field of vision) and a “projector” whenever I have a call that requires that sort of sophistication.

Update: There is an ongoing discussion regarding adding a virtual camera output to OBS, which is encouraging.

Control Surfaces

The thing about running a studio setup, though, is that you need good ways to quickly switch your setup. I use Mission Control on the Mac or Task View on Windows extensively to quickly switch between focus, on-call and project apps, but sometimes you need a dedicated control surface both for ergonomics and for doing more complex automation.

A friend of mine has an Elgato Stream Deck, which is nice but frankly overpriced, so I’ve been looking for alternatives. Using Touch Portal in the iPad seems to be a popular solution (and I’m very used to using Logic Remote with GarageBand), but it requires running more software, and I’m not really keen on that.

I have found a great solution that buried inside macOS Accessibility, but it’s only really feasible under Catalina (which I’m not going to use on my machines for now). It’s called Accessibility Keyboard, and it lets you set up custom button panels that you can click on to generate key combos, launch applications, or… run AppleScript, which means you can effectively do anything with it:

Accessibility Keyboard comes with a neat graphical panel editor

All you need to do (on Catalina) is build your panel, enable Sidecar and drop the panel window into your iPad–and there you go, an instant customized control surface with zero add-ons.

Of course, you have to upgrade to Catalina, which so far has shipped four revisions without fixing quite a few critical bugs…

So I’m looking into ways of turning the Raspberry Pi touchscreen I’m using as a desk console (which currently runs Chromium and Node-RED to control heating and lighting) into a Bluetooth keyboard for my Mac, and it’s… sort of working already–I’ll keep you posted on that, since I’m looking at ways of turning it into a more generic dashboard-y thing. Node-RED‘s built-in dashboard is great, but a bit fiddly.

Platform Choices

Like I pointed out the other day, you need to be picky about what videoconferencing solution to pick, and the security implications that come with it. I’m especially biased against Zoom given how intrusive the application has been from the start (enumerating other running apps and windows, sending out telemetry of various kinds, and most notably last year’s security fracas).

So much so that I either use their web client (via this plugin) or trash the application every time. I recently learned, however, that Zoom is also available in brew, so it’s much easier now:

# Before call
brew cask install zoomus
# After call
brew cask uninstall zoomus

The EFF called them out a few days ago (as did several other people, and they recently recanted regarding their careless use of the Facebook SDK (and even then only partially).

But right now there are relatively few options out there outside an enterprise/education context1. So, prodded by my friends, I spent a bit of time investigating self-hosted, zero-footprint solutions like Jitsi.meet (which uses WebRTC and lets you use just about anything as a client).

After a couple of hours this afternoon, I published azure-ubuntu-jitsi, which lets me get a full-featured videoconferencing server going within minutes thanks to the wonders of cloud automation.

All it needs right now are a few configuration tweaks, but I’m pretty sure it’s going to be very useful in the coming months…


  1. And you really should be looking at enterprise-grade solutions with strong identity protection, like Teams, but I’ll let the matter rest… ↩︎