Setting Up Live Streaming For Facebook

My lovely bride and I shared a few songs on Facebook Live last night to ring out 2020. The setup ended up being complex enough that I thought I’d document it here for anyone (including my future self) who might find it useful. Here’s a quick diagram of the flow:

And a few details:

  • The mic was a large diaphragm condenser (AT2020) that our friend Brian graciously lent us. It worked really well for picking up the sound from our singing and instruments in a fairly large space. I also fed my guitar in directly, which allowed me to get a little more low-end from that instrument and to process its signal independently of everything else going on in the room.
  • The audio interface was a little 2 channel Behringer (UMC202HD), which was solid and sounded great. More channels would have been useful, however, to be able to feed Kris’ guitar into the system directly as well and conceivably add a mic.
  • MainStage is fantastically fun and flexible, though it has a little bit of a learning curve. I used it to compress, EQ, and mix the incoming signals, as well as to provide the reverb for the pennywhistle piece. (Thanks to my son Liam for buying a copy!)
  • I used the MIDI controller (an AKAI MPKmini) only to turn on and off the reverb, though it can also easily drive virtual instruments, trigger loops, adjust patch parameters, etc. in MainStage.
  • Blackhole is a nice little audio driver that allows you to pass audio from one program to another on a Mac. In this case, I just used it to allow MainStage to send a signal to OBS.
  • For the video, I determined that the camera on an iPhone does a much nicer job capturing clean video than the Facetime camera that’s built into the Mac, so I used a program called EpocCam that allows one to use the phone camera as a webcam.
  • OBS is a software package that’s widely used for real time streaming. I’d originally not planned to use it, but when we did some tests beforehand, the video quality using Facebook’s built-in tools with the camera signal was terrible — super-compressed with a lot of nasty artifacts. OBS allowed me to pre-compress the video signal before sending it up to Facebook, which resulted in a much nicer image and far more modest bandwidth requirements.
  • Seriously, don’t use Facebook’s “camera” option for live streaming.
  • Finally, we used Facebook Live with a streaming key to share the video into a Facebook Live event. This was great from a standpoint of getting the word out to our friends, but the video was still fairly stuttery and unreliable at points. (The audio seemed rock-solid though, which was great. If you need to compromise on something when streaming, choppy audio is much worse than sub-par video.) OBS seemed to be cranking the stream out at a reliable framerate, so I’m pretty sure the video issues were on Facebook’s side.

On the whole, we were very happy with how this setup worked out. Having so many moving parts felt like a precarious house of cards, but all of the components worked reliably. And with the flexibility that OBS and MainStage bring, it would be straightforward to add multiple camera angles, do more sophisticated audio processing, or switch to a different streaming service to raise our production standards in the future. One potential limitation would be the processing power of the Mac running the show, but as is, this setup didn’t ask more than about 20% CPU of the 2019 16″ MacBook Pro that we were using. (And the new Apple Silicon will provide substantially more headroom for this sort of processing.)

Lastly, here are a few photos of the production rig. As with so many things, it’s a lot messier in real life than in a flowchart!