That annoying robotic sound

Your bitrate briefly falls. The video fixes itself, but the audio sometimes doesn't, and you get that robotic, stuttering distortion until xou fix it.

That's because Media Source was built to play video files, not for IRL streamers on the move. So we wrote one that was.

What Media Source can't do

Hold your audio together through a bitrate dip. Media Source has no buffer for network hiccups - when data arrives late, you hear it. Ours keeps a reserve of audio and rides through, speeding up or slowing down by fractions of a percent to catch back up. That's the robot sound gone.

Run about a second ahead. Media Source buffers as much as it feels like and never tells you. Ours runs on a fixed lead you set - measured side by side on the same stream, roughly a second in front.

Come back clean. After a dropout Media Source shows you whatever it has, which is usually a few seconds of blocky mess. Ours waits for a full frame first.

Setup

If you are using our CloudOBS it's already pre-installed. If not then it's really simple - full instructions are on the release page.

  1. Install the plugin (download)

  2. Create a new source - Bohemka IRL Source

  3. Fill in the Input URL (Billing area → Connection → SRT)

  4. Done.

Nothing to add to the end of the URL. SRT normally needs a latency setting written into it, and getting that wrong is exactly what causes a broken picture - so the plugin fills it in for you.

Rough connection? In the source settings, put SRT latency at 800 ms and cushion at 400 ms. A bit more delay, a lot more stability.

For the curious

Why the robot sound happens. Your stream doesn't arrive smoothly - it arrives in bursts with gaps between them. A player needs a small reserve of audio to cover those gaps. The catch is how you size it: if you look at the average amount of audio in hand, things look healthy while the reserve is actually hitting zero between bursts. Every time it empties, you get a fragment of silence or a repeat, and that's the robot sound.

Our source tracks the deepest dip over the last ten seconds instead, and sizes the reserve to cover that. When it needs to catch up it changes playback speed by fractions of a percent — you can't hear it, but over a minute it's enough to stay near live.

The SRT setting nobody tells you about. SRT re-requests lost packets, but only within a time window you set in the URL. The default is 120 ms, which is shorter than a single round trip on a lot of mobile connections — so the retry never arrives in time and the packet is simply lost. On one of our relays we counted 84 lost packets a minute at the default, and the picture managed 3.6 fps. With the window at 800 ms on the same stream: zero lost packets, a full 30 fps. That's the setting the plugin now fills in automatically.

Audio never waits for video. Video decoding runs on its own thread, so if your machine is busy or the picture is heavy, audio keeps flowing regardless. Both use the same clock, so they stay in sync. And after a reconnect the picture is held back until a clean keyframe arrives — that's why you don't get the blocky mess when it comes back.

It's cheap to run. A 1080p stream costs roughly half a percent of a typical machine's CPU. It defaults to software decoding, which sounds backwards, but graphics-card decoders can't repair damaged frames — on a lossy connection we measured software keeping 25 fps against hardware's 19 on identical data.

Works with OBS Studio 31 and 32 on Windows. On our cloud OBS it's already installed.