How to Live Stream on MacOS with OBS
(Sidecar second display + BlackHole app + OBS Virtual Camera)
This note describes a setup for streaming on macOS using OBS for scene&visual control and the Bilibili macOS client for going live. It requires only a Mac and wired headphones.
The experience generalizes to other live streaming platforms.
How to Live Stream on macOS with OBS
Hardware
- macOS computer
- iPad as a second display via Sidecar (convenient but not required; any second monitor works.)
- Wired headphones (recommended to avoid acoustic feedback)
- Microphone (optional): built-in Mac mic works; if you buy a USB mic or headset mic, set it as the system input
A dedicated microphone is optional (you can use the built-in Mac microphone).
My goal
My goal is two-fold:
- I can hear the sound from my macOS apps, such as the Apple Music and the WeChat, in both my wired headphones and the live room.
- I can speak to the laptop Microphone and hear my voice in the live room.
Why OBS is not used for direct RTMP streaming
The natural way of doing livestream is via third-party RTMP streaming (stream key / server) and OBS supports that directly with a OBS "output" interface for transportation of visual&audio signals.
However, Bilibili has restrictions on that. based on account requirements (e.g., follower threshold)
- Reference: https://www.bilibili.com/blackboard/activity-pSrb2KQb6G.html
My account does not meet the requirement, so I cannot stream directly from OBS using RTMP.
In that case, I do live via the official Bilibili macOS client, while OBS provides video (virtual camera) and audio routing.
Key concept: OBS “Audio Monitoring”
By default, OBS sends all audio sources to a so-called output which is used directly for RTMP streaming. However, since I don't meet the RTMP streaming requirement, I can't use this method to deliver my audios.
Alternatively, I can use Audio Monitoring. OBS can duplicate each audio source and send the copy to a designated Monitoring Device.
In this setup, the Monitoring Device is set to BlackHole, because the Bilibili client can use BlackHole as its audio input device. As a result, any audio routed to BlackHole becomes audible in the live stream.
Audio design (what goes where)
- System/app audio (WeChat, browser, music, etc.) does not need to enter OBS. It is routed by macOS directly to BlackHole (for the stream) and to headphones (for you to hear) using a Multi-Output Device.
- Microphone voice is captured by OBS (Mic/Aux) and then sent to BlackHole via OBS Audio Monitoring, so the Bilibili client receives it.
Checkout the diagram for details:
1 | flowchart TD |
1. macOS: Create a Multi-Output Audio Device (Headphones + BlackHole)
- Open Audio MIDI Setup app (Applications → Utilities).
- Create or edit a Multi-Output Device, and select:
- ✅ Your wired headphones (or USB audio device)
- ✅ BlackHole 2ch
- Avoid MacBook Speakers (to reduce acoustic leakage into the mic)
- Make the headphones my primary device and set drift correction for BlackHole. Then leave the app.
- Open System Preferrence, set System Settings → Sound → Output to the Multi-Output Device.
- Set System Settings → Sound → Input to MacBook Microphone (or your external mic).
2. OBS: Configure only the video source (no system-audio source needed)
Video source (the second display)
- Create a dedicated Scene (e.g., “Paper”).
- Add a Source: Screen Capture (macOS) and select the Sidecar/iPad display (or external monitor).
- Right-click the source → Transform → Fit to Screen (use Reset Transform if needed).
Canvas resolution
In OBS → Settings → Video, set Base (Canvas) Resolution to match the extended display’s logical resolution (“UI Looks like”), not the iPad panel spec.
You can get the data via:
system_profiler SPDisplaysDataType command in your terminal. Its format is W x H.
3. OBS → BlackHole: Send microphone voice to BlackHole via Monitoring
- OBS → Settings → Audio → Monitoring Device: set to BlackHole 2ch.
- In the Audio Mixer, click the gear icon → Advanced Audio Properties: Set Mic/Aux to Monitor and Output. (Output means the OBS output interface which is not used in my case)
4. Connect OBS to the Bilibili macOS client
- Video input in Bilibili client: select OBS Virtual Camera (Start it in OBS: Controls → Start Virtual Camera)
- Audio input/microphone in Bilibili client: select BlackHole 2ch
- Start the live stream in the Bilibili client.
Quick verification
- Speaking should move Mic/Aux bar in OBS.
- Playing audio in Apple Music/browser should be audible in your headphones (via Multi-Output).
- If you set System Settings → Sound → Input to BlackHole and play audio in Apple Music or a browser, you should see the Input Level meter moving. That indicates BlackHole is successfully receiving your system audio.
- The live room (checked from a phone) should contain both: your voice and system/app audio.
If you later add a dedicated microphone, only change macOS Sound Input to that mic; the rest of the pipeline remains the same.
Note
- If you’re on a WeChat call, macOS may duck (lower) the volume of audio from other apps, so you may hear little or nothing from non-WeChat apps in your headphones—and therefore in BlackHole (and your livestream) as well. The exact cause of this behavior is unclear. To restore normal audio, end the WeChat call; sometimes that isn’t enough, and you may need to fully quit&reopen the WeChat app.