My OBS Setup for Video Recording and Live Streaming on macOS
This note records my OBS setup on macOS for two scenarios:
- video recording;
- live streaming with the Bilibili macOS client.
The confusing part is audio routing. The video side is much simpler.
My OBS Setup for Video Recording and Live Streaming on macOS
My requirements (core problem definition)
Across both scenarios, I have a few consistent audio expectations.
Live streaming requirements
For live streaming, the audio heard in the live room must include:
1 | live audience should hear: |
At the same time, on my local side:
1 | I should hear: |
So the key constraint is:
system audio must be routed both to my headphones AND to the stream, while microphone audio must be routed to the stream, and optionally to my monitoring.
This typically involves a mix of:
- Multi-output routing (system audio duplication)
- OBS audio monitoring (microphone forwarding)
- virtual audio device bridging via BlackHole 2ch
Video recording requirements
For video recording, the pipeline is simpler because OBS Studio is the final output:
1 | recorded video should contain: |
Local listening is also simpler:
1 | I usually want: |
No streaming platform is involved, so no external routing (e.g. BlackHole output sharing) is strictly required.
2. Hardware and software setup
Hardware
- MacBook (Apple Silicon, macOS)
- iPhone used as camera via Continuity Camera (optional video source)
- microphone: DJI Mic Mini (wireless lavalier mic system)
- wired/wireless headphones, airpods are fine.
Software stack
- OBS Studio for recording and streaming control
- BlackHole 2ch for virtual audio routing (system audio → OBS / stream)
- Bilibili macOS client for live streaming output
- macOS built-in tools:
- Audio MIDI Setup (for Multi-Output Device creation)
- System Sound settings (input/output selection)
- Continuity Camera (for iPhone video input)
Concepts
Before the actual routing, there are two concepts.
System audio and Multi-Output Device
Basically all the sound produced by your system apps, be it Apple Music, MineCraft, Chrome, etc, belong to your system audio.
Contrary to it is your microphone voice audio which normally captured by your recording apps like OBS. Voice audio is not system audio.
macOS has a Multi-Output Device feature, which namely receives the system audio and copy them to multiple deveices.
For example, if it contains:
1 | Headphones |
then one audio stream can be copied to both places:
1 | audio |
This is useful in live streaming because system/app audio must go to BlackHole 2ch for the live room, but I also need to hear it in my headphones.
For normal video recording, I usually do not need a Multi-Output Device.
OBS Audio Monitoring
OBS Audio Monitoring means OBS sends a copy of an audio source to a selected output device.
The global monitoring device is set here:
1 | OBS -> Settings -> Audio -> Advanced |
Then each source can decide whether to use monitoring:
1 | Audio Mixer -> source -> Advanced Audio Properties |
For example, if the microphone source is set to:
1 | Audio Monitoring = Monitor and Output |
and the OBS monitoring device is:
1 | BlackHole 2ch |
then the microphone audio is copied to BlackHole:
1 | microphone |
This is the key trick for live streaming with the Bilibili client.
Video setup
We use same setup for recording and live streaming.
- Add video sources depending on your needs:
- Sources -> + -> Screen Capture (entire display)
- Sources -> + -> Window Capture (single application window)
- Sources -> + -> Video Capture Device (camera, e.g. iPhone Continuity Camera)
- Set and check resolution:
- macOS: System Settings -> Displays -> check “Scaled / Looks like XXX × XXX”
- OBS: Settings -> Video
- Base (Canvas) Resolution = screen resolution (usually 1920×1080 or Mac scaled resolution)
- Output (Scaled) Resolution = same as canvas (recording) or lower (e.g. 1280×720 for streaming)
- Arrange video sources in the OBS canvas (drag to move and resize).
- Use
Transform -> Fit to Screen (fill canvas)orsctrech to screento match source to canvas when needed. - Change layer order by dragging sources in the Sources list (top = visible front layer).
For live streaming, additionally enable in OBS: Controls → Start Virtual Camera
Audio setup
Video recording audio routing
Video recording is simple because OBS is the final recorder.
Normal recording
Add the microphone in OBS:
1 | Sources -> + -> Audio Input Capture -> microphone |
The path is:
1 | microphone |
If I also want system/app audio in the video, I capture it directly into OBS.
1 | system/app audio |
In this case:
- BlackHole is not needed.
- Multi-Output Device is not needed.
- OBS monitoring is usually not needed.
Optional: If you want to hear your voice
Sometimes I may want to hear my own microphone voice, for example to check the audio quality during recording.
In that case I must wear headphones and set the monitoring device to headphones.
Set:
1 | OBS -> Settings -> Audio -> Advanced |
Then for the microphone source:
1 | Audio Mixer -> microphone -> Advanced Audio Properties |
The path becomes:
1 | microphone |
Live streaming audio routing
Live streaming is different because OBS is not the final streaming app. The Bilibili macOS client is the final app.
Bilibili receives audio from:
1 | BlackHole 2ch |
So the goal is:
1 | system/app audio -> BlackHole 2ch -> Bilibili |
At the same time, I need to hear system/app audio myself:
1 | system/app audio -> headphones -> me |
So system/app audio and microphone voice use different routes.
Route system audio to blackhole and your headphones
In our live-streaming case, we want our system audio sent to BlackHole 2ch, and we also want to hear it through our headphones. So we have to create a Multi-Output Device that includes both BlackHole 2ch and the headphones.
Create a Multi-Output Device in:
1 | Applications -> Utilities -> Audio MIDI Setup |
Include:
1 | Headphones |
Do NOT include your laptop speaker. If the sound is played through MacBook speakers, the microphone may capture it again,causing echoes.
Then set:
1 | System Settings -> Sound -> Output = Multi-Output Device |
Now system/app audio is copied to both headphones and BlackHole:
1 | system/app audio |
After this, in macOS control center, set Sound to Multi-Output Device instead of the default speaker.
Route microphone voice to blackhole
Microphone voice goes into OBS first, then it’s monitored and sent to BlackHole 2ch by OBS.
Add the microphone:
1 | Sources -> + -> Audio Input Capture -> microphone |
Then send the processed microphone voice to BlackHole using OBS monitoring.
Set:
1 | OBS -> Settings -> Audio -> Advanced |
For the microphone source:
1 | Audio Mixer -> microphone -> Advanced Audio Properties |
The path is:
1 | microphone |
In this normal live-streaming setup, I do not hear my own microphone voice. I only hear system/app audio.
Optional: If you want to hear your voice
Like in the video reording senario, sometimes you may also want to hear the voice audio yourself, in that case you should set the monitoring device to Multi-Output Device, which includes headphones, instead of solely BlackHole 2ch.
For livestreaming: connect video and audio to Bilibili and start streaming
Open 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.
In livestreaming, system sounds should be copied and delivered to both the Bilibili client and your headphones, this is achived by create and use a Multi-Output Device in your macOS system setting. So you should be able to hear the system sounds when wearing the headphones.
Advanced
Device choices
Microphone
There are many possible microphone choices:
1 | MacBook built-in microphone |
I currently use DJI Mic Mini.
The exact microphone is not important for the routing design. In OBS, it is just an audio input source:
1 | Sources -> + -> Audio Input Capture -> microphone |
For video recording, OBS records it directly.
For live streaming, OBS sends it to BlackHole through Audio Monitoring.
Camera
Camera choices include:
1 | MacBook built-in camera |
I currently use iPhone Continuity Camera.
In OBS, it is just a video source:
1 | Sources -> + -> Video Capture Device -> iPhone Camera |
A common layout is:
1 | screen capture |
Continuity Camera is convenient and usually looks better than the MacBook built-in camera. If I need more manual camera control, a third-party iPhone camera app such as Camo may be better.
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.
If you want to mute your voice during livestreaming, either set Disable Monitoring beneath the Mic/Aux section, or set Audio Monitoring = Monitor Off. Then OBS will stop forwarding your microphone audio to BlackHole, which is used as the microphone input in the Bilibili client.
Muting Mic/Aux in OBS will not mute your voice in the livestream. The mute button only affects OBS’s Main Output Mix (i.e. OBS’s own streaming/recording output), which is not used in this setup.
In this configuration, the livestream audio actually comes from:
1
2
3
4
5OBS Monitoring
↓
BlackHole
↓
Bilibili ClientSo the key factor is whether the audio is being monitored, not whether it is muted in the OBS mixer.