Live Streaming with Multiple Musicians
Motivated by all the show cancelations due to the COVID-19 pandemic, I came up with a way to live stream performances with my band. If you’ve tried this over teleconferencing apps like Zoom, you know that the audio quality sucks and the latency makes playing together virtually impossible. The method here solves both of these problems, with the caveat that only some performers can see and hear the other players.
Each performer will need their own streaming account. There are several streaming platforms to choose from, but unless you know what you’re doing, use Twitch. It’s free, reliable, and vastly easier to use than others. Go sign up for an account and read through their overview of streaming music on the service:
Some other free options are YouTube Live and Facebook Live. Both of these have serious shortcomings, such as being limited to popular accounts, and are much harder to set up for high quality streaming. In particular, the browser-based webcam streaming features of these platforms are terrible as far as quality goes. So, seriously, use Twitch.
Finally, there are paid services that allow private shows, e.g. only to ticket holders. I’m not familiar with these so I won’t be covering them here.
We’re going to be starting with the initiator performer, and have each subsequent downstream performer add their own video and audio on top of the previous upstream performer:
The last performer in the chain will be broadcasting the final stream to the world, so this person should be logged in with the band’s main Twitch account that you share with your listeners.
The initiator won’t see or hear any of the downstream performers, and so will be unable to sync up with or respond to what the downstream performers are playing. Therefore it’s important that the initiator “conducts” the entire performance and keeps the rhythm. This works best of the initiator is a singer playing a rhythm guitar/piano part, and either the band is playing a well-rehearsed arrangement or the initiator verbally cues the other players to take solos at the appropriate times etc.
The initiator’s job is the simplest technically but the most confounding musically. As mentioned above, the initiator “conducts” the entire performance by constantly keeping the rhythm and cueing any improvised sections for the downstream performers, all while playing “alone” without seeing or hearing the other musicians.
The initiator starts their own stream as if they are doing a solo performace. The simplest way to do this is to download the Twitch mobile app, sign in and hit “Go Live”. This usually looks and sounds perfectly acceptable for an acoustic guitar + voice, but for higher quality sound, follow the downstream instructions on setting up OBS on a computer with an external mictrophone.
Each downstream performer’s job is simple muscially—just play along to the initiator—but requires an involved technical setup. At a minimum you’ll need a reasonably capable computer and headphones. Any Mac from 2015 or newer (and likely some older models, too) should suffice. (I’ve only tried this with Macs but it should work with PCs too. Let me know if you can fill in instructions for Windows.)
The gist is that you will be playing back the upstream performer’s stream in a browser, capturing that video and audio, and then compositing your own webcam and audio on top of the capture. An outline of the steps looks like this, with details below:
- Create a Twitch account
- Install OBS Studio streaming software
- Install Blackhole audio capture driver
- Create a multi-output audio device
- Open upstream performer’s stream
- Configure OBS for compositing
1. Create a Twitch account
If you haven’t done so already, create a Twitch account and log in:
2. Install OBS Studio
OBS is a free and open-source streaming software that can send streams to Twitch, Facebook, YouTube, etc. It allows combining multiple sources of video and audio and arranging/mixing them, which is exactly what we need.
Here’s a quick video explaining how to do a basic set up of OBS for music streaming on Twitch:
The main thing to do here is to run the Auto-Configuration Wizard. It’ll prompt you the first time you open OBS, but if you missed it it’s under the Tools menu:
- optimize for streaming over recording
- stick to 30 fps on a 1280x720 canvas
- click the link to get the Twitch streaming key and paste it in
- have it automatically detect bandwidth settings
3. Install Blackhole
macOS doesn’t have a built-in mechanism to capture the computer’s own audio output so we’ll be installing Blackhole, a free and open-source virtual driver that does exactly that:
4. Create a Multi-Output Audio Device
While Blackhole allows OBS to capture the computer audio output of the upstream performer’s stream, you also need to be able to hear them so you can play along in rhythm. While OBS will let you monitor its own output to a separate audio device, there’s considerable lag (100+ ms) which makes this hard to play to. Instead, you can get (almost?) zero-latency monitoring by having the computer audio output routed to your headphones alongside Blackhole by creating a “multi-output device”:
- Open Audio MIDI Setup in /Applications/Utilities
- Click the “+” button and select Create multi-output device
- In the righthand pane, first enable your headphone output and make sure it is set as the “Master device”
- Second in the righthand pane, enable Blackhole and enable Drift Correction for it
- Click on the gear icon at the bottom-left and select Use this device for sound output
5. Open Upstream Performer’s Stream
Go to your immediate upstream performer’s Twitch channel page. Click the gear icon on the video player and select Popout Player. This makes it easier to configure OBS to only capture the stream video without all the junk surrounding it. You can close the bigger window with Twitch chat to save space and CPU cycles. Get the upstream performer to start streaming and play something so you can make sure you can hear them.
6. Configure OBS for Compositing
We’re going to have OBS capture your computer display but cropped to just the upstream Twitch player window. You’ll need to resize and arrange the Twitch and OBS windows so they don’t overlap. This would be a good time to quit any unsed apps and turn on Do Not Disturb mode so you don’t accidentally broadcast any embarrassing emails.
Now we’ll set up four ”sources” in OBS: your webcam video, your mic input, the upstream Twitch video, and the Blackhole audio capture for the upstream audio:
- Add a Video Capture Device for your webcam. Make sure you select FaceTime HD from the Device list.
- Add an Audio Input Capture and select the internal mic or an external audio interface if you’re using one.
- Add a Display Capture for the Twitch window. On the second screen, enable “Crop To Window + Manual” and select the popped-out Twitch window from the list, and also enter 50 for the top crop to remove the title bar.
- Add another Audio Input Capture, this time selecting ”Blackhole” as the device to capture the upstream Twitch audio.
- On the canvas, resize and rearrange the two video sources so you can see both yourself and the upstream performer.
If you did all that correctly, you should be seeing your webcam composited with the upstream performer on the canvas, the green audio peak meter moving on both of the audio sources as the upstream performer and you make sound, and you should also be hearing the upstream performer in your headphones.
Communication and Soundcheck
Because there is a large delay between each streamer (often 10+ seconds), communication and getting levels correct is a challenge. Here are some tips:
- Start a group text with all band members to communicate before and between songs. Remember that upstream performers can’t hear you!
- Use the Start Recording button in OBS to make local recordings for soundcheck before going live.
- Get on a group FaceTime/Zoom on your phone while troubleshooting. Just make sure to mute the phone when playing to avoid echoes.
- Have a trusted friend listening to your stream and text you if they notice any issues.
If you try this out, let me know how it goes!