OBS Media Source is the loop engine — not Twitch

On a typical Twitch setup the chain is: file → OBS source → stream mix → Twitch. Twitch receives whatever OBS sends. Infinite background music means configuring the source correctly and feeding it a file that can restart without a discontinuity.

Configure Media Source for a bed

  1. In OBS: Sources → + → Media Source.
  2. Uncheck “Local File” only if you know you need a URL; for beds, use a local seamless file.
  3. Check Loop.
  4. Optional: Restart playback when source becomes active if you hide/show the source between scenes and want a predictable downbeat (know that restart will expose a bad seam instantly).
  5. Set audio monitoring / tracks so the bed is in the stream mix but not feeding your headset twice unless you want that.

VLC Video Source is the alternative when you need a playlist. Same seam rule applies to every item in that playlist.

Why streamers hear a gap at the “loop”

  • File ends with padded silence from an MP3 export.
  • Loop unchecked — OBS finishes the file and sits on the last frame/silence.
  • Scene switch recreates the source and starts from sample 0 against a loud intro.

Prepare the bed with Loop Music so the restart is silent, then keep Loop enabled.

Levels while you talk

A perfect seam at −3 dB under speech still ruins the stream. Duck the bed (sidechain/compressor or manual riding) so commentary wins. Seamless looping fixes the join; gain staging fixes intelligibility.

Click still there with Loop on? Diagnose the click.