My OBS Setup for Video Recording and Live Streaming on macOS

This note records my OBS setup on macOS for two scenarios:

  1. video recording;
  2. 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
2
3
live audience should hear:
- system/app audio (music, browser, game, etc.)
- microphone voice (my speaking voice)

At the same time, on my local side:

1
2
3
I should hear:
- system/app audio (always)
- microphone voice (optional, depends on situation; sometimes I want monitoring, sometimes I don't)

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
2
3
recorded video should contain:
- microphone voice (always required)
- system/app audio (optional, but often useful)

Local listening is also simpler:

1
2
3
I usually want:
- system/app audio in my headphones
- microphone voice (optional, depends on situation; sometimes I want monitoring, sometimes I don't)

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
2
Headphones
BlackHole 2ch

then one audio stream can be copied to both places:

1
2
3
4
5
audio

Multi-Output Device
├─ Headphones
└─ BlackHole 2ch

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
2
OBS -> Settings -> Audio -> Advanced
Monitoring Device = ...

Then each source can decide whether to use monitoring:

1
2
Audio Mixer -> source -> Advanced Audio Properties
Audio Monitoring = Monitor Off / Monitor Only / Monitor and Output

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
2
3
4
5
6
7
microphone

OBS

OBS Audio Monitoring

BlackHole 2ch

This is the key trick for live streaming with the Bilibili client.

Video setup

We use same setup for recording and live streaming.

  1. 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)
  2. 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)
  3. Arrange video sources in the OBS canvas (drag to move and resize).
  4. Use Transform -> Fit to Screen (fill canvas) or sctrech to screen to match source to canvas when needed.
  5. 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
2
3
4
5
microphone

OBS

local video file

If I also want system/app audio in the video, I capture it directly into OBS.

1
2
3
4
5
system/app audio

OBS

local video file

In this case:

  1. BlackHole is not needed.
  2. Multi-Output Device is not needed.
  3. 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
2
OBS -> Settings -> Audio -> Advanced
Monitoring Device = headphones

Then for the microphone source:

1
2
Audio Mixer -> microphone -> Advanced Audio Properties
Audio Monitoring = Monitor and Output

The path becomes:

1
2
3
4
5
microphone

OBS
├─ local video file
└─ (through monitoring)headphones

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
2
system/app audio -> BlackHole 2ch -> Bilibili
microphone voice -> 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
2
Headphones
BlackHole 2ch

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
2
3
4
5
system/app audio

Multi-Output Device
├─ Headphones # I hear it
└─ BlackHole 2ch # Bilibili receives it

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
2
OBS -> Settings -> Audio -> Advanced
Monitoring Device = BlackHole 2ch

For the microphone source:

1
2
Audio Mixer -> microphone -> Advanced Audio Properties
Audio Monitoring = Monitor Only (Monitor and Output is fine as well. Since the "output" is not used in our livestreaming case)

The path is:

1
2
3
4
5
6
7
8
9
microphone

OBS

OBS Audio Monitoring

BlackHole 2ch

Bilibili

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
2
3
4
5
MacBook built-in microphone
iPhone microphone
AirPods microphone
USB microphone
wireless 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
2
3
MacBook built-in camera
dedicated webcam/camera
iPhone Continuity 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
2
3
screen capture
+
iPhone camera overlay in the bottom-right corner

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
    5
    OBS Monitoring

    BlackHole

    Bilibili Client

    So the key factor is whether the audio is being monitored, not whether it is muted in the OBS mixer.