OBS to SRT Streaming: Setup Guide for Low-Latency Broadcasting

Why Use SRT with OBS?

OBS Studio has supported SRT output since version 27, and as of version 30+ it is a first-class protocol option. If you are still pointing OBS at an RTMP endpoint, you are missing out on three significant upgrades:

  1. Encryption: SRT encrypts your stream with AES-128 or AES-256 natively. No RTMPS certificate management, no TLS overhead. Just a shared passphrase.
  2. Error recovery: SRT’s selective retransmission (ARQ) recovers lost packets without retransmitting the entire stream. On a network with 2-5% packet loss, RTMP produces visible artifacts. SRT delivers a clean stream.
  3. Real-time diagnostics: SRT exposes metrics like RTT, packet loss, jitter, and retransmission count. Your receiving server can monitor stream health in real-time and react before problems become visible.

This guide covers everything you need to connect OBS to an SRT destination, whether that is Vajra Cast, a bare SRT listener, or any SRT-capable server.

Prerequisites

Before starting:

  • OBS Studio 30 or newer. Older versions have SRT support but with fewer configuration options and known bugs. Update to the latest version.
  • An SRT destination: a server running an SRT listener. This guide uses Vajra Cast, but the OBS configuration applies to any SRT endpoint.
  • UDP connectivity. SRT uses UDP. If you are behind a corporate firewall that blocks outbound UDP, you will need an exception for your SRT port. Test connectivity first:
# Quick test: can you reach your server on UDP?
nc -vz -u your-server.com 9000

Step 1: Configure the SRT Destination

First, set up the receiving end. In Vajra Cast:

  1. Create a new ingest
  2. Select SRT Listener
  3. Choose a port (e.g., 9000)
  4. Set latency to 500ms as a starting point (we will tune this later)
  5. Enable encryption with a strong passphrase and AES-256
  6. Save

Your SRT endpoint is now: srt://your-server.com:9000

If you do not have Vajra Cast yet, you can test with FFmpeg as a quick SRT listener:

ffmpeg -i "srt://0.0.0.0:9000?mode=listener&latency=500000" -c copy output.ts

Step 2: Configure OBS Stream Settings

Open OBS and go to Settings > Stream:

  1. Service: Select Custom…
  2. Server: Enter your SRT URL with all parameters:
srt://your-server.com:9000?latency=500000&passphrase=YourSecurePassphrase&pbkeylen=32
  1. Stream Key: Leave this empty. SRT does not use stream keys. If OBS requires you to enter something, type a single space.

Critical: Latency Units

OBS specifies SRT latency in microseconds, not milliseconds. This is the single most common configuration mistake:

Desired LatencyOBS Value
120ms120000
500ms500000
1000ms1000000
2000ms2000000

If you set latency=500 in OBS, you are requesting 0.5ms, effectively zero buffer. SRT will connect but fail to recover any lost packets.

The Full SRT URL Explained

srt://your-server.com:9000?mode=caller&latency=500000&passphrase=MyPass123&pbkeylen=32&oheadbw=25
ParameterValueDescription
modecallerOBS initiates the connection (default, usually omitted)
latency500000500ms receive buffer in microseconds
passphraseMyPass123Shared encryption passphrase (10-79 characters)
pbkeylen32AES-256 (16=AES-128, 24=AES-192, 32=AES-256)
oheadbw2525% overhead bandwidth for retransmissions
connect_timeout3000Connection timeout in milliseconds
tlpktdrop1Drop late packets instead of delivering out of order

You do not need to specify all parameters. The minimum viable URL is:

srt://your-server.com:9000

This connects with no encryption, default latency (120ms), and default overhead. But for any production use, always set passphrase, pbkeylen, and latency explicitly.

Step 3: Configure OBS Output Settings

Go to Settings > Output and switch to Advanced mode.

Streaming Tab

Encoder selection matters for SRT performance. The stream needs to be encoded with consistent keyframes and CBR:

x264 (Software Encoding)

Encoder: x264
Rate Control: CBR
Bitrate: 6000 Kbps
Keyframe Interval: 2 seconds
CPU Usage Preset: veryfast (or faster if CPU allows)
Profile: high
Tune: zerolatency

The zerolatency tune is important. It disables x264’s frame reordering and look-ahead features, which reduces encoding latency by 2-5 frames. For live streaming, this is almost always worth the small quality trade-off.

NVENC (NVIDIA GPU)

Encoder: NVIDIA NVENC H.264
Rate Control: CBR
Bitrate: 6000 Kbps
Keyframe Interval: 2 seconds
Preset: P4 (or P5 for better quality)
Profile: high
Look-ahead: Off
B-Frames: 0 (minimum latency) or 2 (better quality)

Setting B-Frames to 0 reduces encoding latency but slightly decreases compression efficiency. For low-latency applications, 0 B-frames is recommended. For quality-focused streaming where an extra frame of latency is acceptable, use 2.

Apple VT H264 (macOS)

Encoder: Apple VT H264 Hardware Encoder
Bitrate: 6000 Kbps
Keyframe Interval: 2 seconds
Profile: high

Intel QSV

Encoder: QuickSync H.264
Rate Control: CBR
Bitrate: 6000 Kbps
Keyframe Interval: 2 seconds
Profile: high

If your Vajra Cast server also uses Intel QSV for transcoding, you get a fully hardware-accelerated pipeline from encoding through processing to output. See our Hardware Transcoding with Intel QSV guide for details.

Why CBR?

SRT works best with Constant Bitrate encoding for two reasons:

  1. Bandwidth prediction: SRT allocates overhead bandwidth as a percentage of the stream bitrate. With CBR, this is predictable. With VBR, spikes in bitrate can exceed the available overhead, causing retransmission failures.
  2. Packet scheduling: SRT paces packet delivery. Constant bitrate produces evenly-spaced packets, which SRT can schedule efficiently across its latency buffer.

VBR can work with SRT, but you need to set maxbw high enough to accommodate bitrate peaks plus overhead. CBR eliminates this guesswork.

Step 4: Configure OBS Video Settings

Go to Settings > Video:

Base (Canvas) Resolution: 1920x1080
Output (Scaled) Resolution: 1920x1080
Common FPS Values: 30 (or 60 for fast-motion content)

Resolution vs. Bitrate Guidelines

ResolutionFrame RateMinimum BitrateRecommended Bitrate
1280x72030 fps2500 Kbps4000 Kbps
1280x72060 fps3500 Kbps5000 Kbps
1920x108030 fps4000 Kbps6000 Kbps
1920x108060 fps6000 Kbps8000 Kbps
2560x144030 fps8000 Kbps12000 Kbps
3840x216030 fps15000 Kbps20000 Kbps

These are for H.264. If your destination supports HEVC (H.265), you can reduce bitrate by approximately 40% at equivalent quality. Vajra Cast supports HEVC ingest and can transcode to H.264 for outputs that require it.

Step 5: Start Streaming and Verify

Click Start Streaming in OBS. Check these items immediately:

In OBS

Look at the bottom status bar:

  • Green square: connection established
  • Bitrate readout: should match your configured value
  • Dropped frames: should be 0%. If frames are dropping, your CPU or GPU encoder cannot keep up.

In Vajra Cast

On the ingest dashboard:

  • Connection status: should show “Connected” with the SRT caller’s IP
  • Bitrate: should match OBS encoding bitrate
  • RTT: should be stable (network round-trip time)
  • Packet loss: should be 0% or very low (<0.1%)
  • Retransmitted packets: some is normal. Sustained high count suggests network issues
  • Encryption status: should show “AES-256 SECURED”

Quick Validation Checklist

  • OBS connected and streaming (green indicator)
  • Vajra Cast shows incoming stream with correct resolution and bitrate
  • Encryption active (AES-256)
  • RTT stable (no wild spikes)
  • Packet loss below 0.1%
  • Output playing cleanly on test destination

Latency Tuning

The default 500ms latency works for most connections within the same country. But you can optimize further.

Measuring Your Baseline

  1. Start streaming with latency=500000
  2. In Vajra Cast, observe the reported RTT for 5 minutes
  3. Note the average RTT and the peak RTT

Calculating Optimal Latency

Optimal Latency = 4 * Average RTT + 2 * (Peak RTT - Average RTT)

Example: Average RTT = 40ms, Peak RTT = 65ms

Latency = 4 * 40 + 2 * (65 - 40) = 160 + 50 = 210ms

Round up to 250ms for safety margin. In OBS: latency=250000

Low-Latency Optimization

For the absolute lowest latency (e.g., live interviews, gaming):

  1. Place your SRT server geographically close to OBS (same city or region)
  2. Use a stable wired connection (not Wi-Fi)
  3. Set latency to 4x RTT with no extra margin
  4. Set encoder tune to zerolatency
  5. Set B-frames to 0
  6. Use hardware encoding (NVENC or QSV)
  7. Reduce keyframe interval to 1 second

This can achieve 80-150ms SRT latency on a good network path, with total glass-to-glass latency under 400ms including encoding and decoding.

For a detailed latency tuning reference, see our SRT Latency Tuning guide.

Troubleshooting

OBS says “Failed to connect to server”

Most common causes:

  1. Wrong port: double-check the port number matches your SRT listener
  2. Firewall blocking UDP: SRT uses UDP, not TCP. Many firewalls block UDP by default.
  3. Passphrase mismatch: SRT silently rejects connections with wrong passphrases. OBS may report this as a generic connection failure.
  4. Server not listening: verify the SRT listener is actually running on the target server

Debug steps:

# Check if the port is open from your machine
nc -vz -u your-server.com 9000

# Check if the SRT listener is running on the server
ss -ulnp | grep 9000

Stream connects but video is broken/artifacts

Causes and fixes:

  1. Latency too low: increase SRT latency. If packets cannot be recovered in time, you get artifacts.
  2. Missing MPEG-TS container: SRT uses MPEG-TS, not FLV. OBS handles this automatically, but custom FFmpeg pipelines may need -f mpegts.
  3. Keyframe interval too long: set to 2 seconds maximum. Longer intervals mean the decoder takes longer to recover after any disruption.

Intermittent freezing every few seconds

Cause: Encoder cannot maintain real-time encoding speed. The encoding queue fills up, causing periodic frame drops.

Fixes:

  • Switch to a faster encoder preset (veryfast or ultrafast for x264)
  • Use hardware encoding (NVENC, QSV)
  • Reduce resolution or frame rate
  • Close other applications competing for CPU/GPU

Audio out of sync

Cause: Usually an encoding pipeline issue, not SRT-specific.

Fixes:

  • Set Sync Offset in OBS audio mixer (right-click the audio source > Advanced Audio Properties)
  • Ensure audio sample rate is 48000 Hz (default for broadcast)
  • Restart the OBS audio pipeline by disabling and re-enabling the audio source

High packet loss shown in Vajra Cast but network seems fine

Cause: OBS is not sending at a constant rate. Bitrate fluctuations cause SRT to interpret gaps as packet loss.

Fixes:

  • Switch to CBR rate control
  • Increase oheadbw to 50% (oheadbw=50 in the SRT URL)
  • Check if other applications are competing for upload bandwidth

Advanced: Multi-Output from OBS via Vajra Cast

One of the most powerful patterns is using OBS to feed a single SRT stream to Vajra Cast, which then distributes to multiple destinations:

OBS → SRT → Vajra Cast → RTMP → YouTube
                        → RTMP → Twitch
                        → SRT  → Remote producer
                        → SRT  → Recording server
                        → HLS  → Web player

Without a gateway, you would need OBS to encode and upload multiple streams simultaneously, which multiplies CPU and bandwidth usage. With Vajra Cast’s zero-copy distribution, adding outputs costs zero additional CPU. The stream is encoded once in OBS and replicated at the gateway level.

To set this up:

  1. Configure OBS with a single SRT output to Vajra Cast (as described above)
  2. In Vajra Cast, create one ingest (SRT Listener)
  3. Create multiple outputs, each pointing to a different destination
  4. Enable or disable outputs on the fly without touching OBS

This architecture also gives you gateway-level failover. If OBS crashes or the network drops, Vajra Cast can switch to a backup input (a second OBS instance, an hardware encoder, or even a pre-recorded failover slate) without any of your output destinations noticing.

OBS SRT Settings Quick Reference

For easy copy-paste, here are complete SRT URLs for common scenarios:

Local Network (LAN)

srt://192.168.1.100:9000?latency=60000

Same City (Low Latency)

srt://server.example.com:9000?latency=250000&passphrase=YourPassphrase&pbkeylen=32

Cross-Country

srt://server.example.com:9000?latency=800000&passphrase=YourPassphrase&pbkeylen=32&oheadbw=25

International

srt://server.example.com:9000?latency=1500000&passphrase=YourPassphrase&pbkeylen=32&oheadbw=30

Maximum Reliability (Lossy Network)

srt://server.example.com:9000?latency=3000000&passphrase=YourPassphrase&pbkeylen=32&oheadbw=50

For more on SRT protocol fundamentals, see our SRT vs RTMP comparison. For the full gateway setup walkthrough, read the SRT Streaming Gateway guide.