Skip to main content
← Back to Protocols

SRT Protocol Deep Dive

Secure Reliable Transport for professional broadcast workflows

Professional Grade
Low Latency
AES Encrypted

Protocol Specifications

Technical details of SRT implementation

Transport Layer

  • Protocol: UDP-based with ARQ (Automatic Repeat Request)
  • Port: Default 9998 (configurable)
  • Modes: Caller, Listener, Rendezvous
  • MTU: 1316 bytes (optimized for internet)

Error Correction

  • ARQ: Retransmission of lost packets
  • FEC: Forward Error Correction (optional)
  • Buffer: 20ms to 8000ms configurable
  • Tolerance: Up to 15% packet loss recovery

Security

  • Encryption: AES-128 or AES-256
  • Key Exchange: Passphrase-based (10-79 characters)
  • Authentication: Stream ID validation

Performance

  • Latency: 2-4 seconds glass-to-glass
  • Overhead: 10-15% bandwidth for error correction
  • Efficiency: 95%+ network utilization

Network Requirements & Optimization

Minimum Requirements

720p30
5 Mbps
Uplink bandwidth
1080p60
10 Mbps
Uplink bandwidth
4K30
20 Mbps
Uplink bandwidth

Bitrate Configuration Table

ResolutionVideo BitrateBuffer SizeSRT Latency
720p302,500 - 4,000 Kbps5,000 - 8,000 Kbps2000ms
720p604,500 - 6,000 Kbps9,000 - 12,000 Kbps2000ms
1080p304,500 - 6,000 Kbps9,000 - 12,000 Kbps2500ms
1080p606,000 - 9,000 Kbps12,000 - 18,000 Kbps3000ms
4K3013,000 - 20,000 Kbps26,000 - 40,000 Kbps4000ms

OBS Studio Configuration

Step-by-step setup for SRT streaming with OBS

Step 1: Stream Settings

  1. Open OBS Studio → Settings → Stream
  2. Service: Select "Custom"
  3. Server: srt://ingest.wave.inc:9998
  4. Stream Key: ?streamid=your-stream-key,latency=2000

Step 2: Output Settings

Output Mode: Advanced

Encoder: x264 (CPU) or NVENC (NVIDIA GPU)
Rate Control: CBR (Constant Bitrate)
Bitrate: 6000 Kbps (for 1080p60)
Keyframe Interval: 2 seconds
Preset: veryfast (CPU) or Quality (GPU)
Profile: high
Tune: none

Step 3: Video Settings

Base (Canvas) Resolution: 1920x1080
Output (Scaled) Resolution: 1920x1080
Downscale Filter: Lanczos (best quality)
FPS: 60 or 30

Step 4: Audio Settings

Sample Rate: 48 kHz
Channels: Stereo
Audio Bitrate: 160 Kbps (or 128 Kbps)

Encoder Compatibility

SRT support across popular encoding software

EncoderSRT SupportLatencyQualityDifficulty
OBS Studio
Native
2-4sExcellentEasy
vMix
Native
2-3sExcellentEasy
Wirecast
Native
2-4sExcellentMedium
FFmpeg
Native
1-2sExcellentAdvanced
Streamlabs
Via Plugin
3-5sGoodEasy

Troubleshooting Common Issues

Connection Refused / Cannot Connect

Cause: Firewall blocking UDP port 9998

Solution: Open UDP port 9998 in your firewall/router. For enterprise networks, work with IT to allow outbound SRT traffic.

High Latency / Buffering

Cause: SRT latency parameter set too high or network congestion

Solution: Reduce SRT latency parameter from 4000ms to 2000ms. Check network bandwidth usage and reduce video bitrate if needed.

Packet Loss / Pixelation

Cause: Network instability or insufficient bandwidth

Solution: Increase SRT latency to 3000-4000ms for better recovery. Reduce video bitrate. Check for WiFi interference (use wired connection).

Stream Disconnects Randomly

Cause: Unstable network or ISP throttling

Solution: Enable CBR (Constant Bitrate) in encoder. Increase SRT latency buffer. Contact ISP to ensure no throttling on UDP traffic.

Performance Benchmarks

Real-world SRT streaming performance metrics

2-4s
Glass-to-Glass Latency
Typical with 2000ms SRT buffer
95%+
Bandwidth Efficiency
Network utilization rate
15%
Packet Loss Recovery
Maximum recoverable loss

API Integration

import { WaveClient } from '@wave/api-client';

import { DesignTokens, getContainer, getSection } from '@/lib/design-tokens';
const wave = new WaveClient({ apiKey: 'wave_live_xxxxx' });

// Create SRT stream with custom configuration
const stream = await wave.streams.create({
  title: 'Professional Broadcast',
  protocol: 'srt',
  srt: {
    latency: 2000,        // 2 seconds
    passphrase: 'secure-password-123',
    mode: 'listener',      // or 'caller'
    pbkeylen: 16,          // AES-128 (or 32 for AES-256)
    maxbw: -1,             // unlimited bandwidth
    inputbw: 0,            // auto-detect
    oheadbw: 25            // 25% overhead for recovery
  },
  recording: { enabled: true }
});

console.log('SRT URL:', stream.ingest.srt.url);
console.log('Stream ID:', stream.ingest.srt.streamid);
console.log('Full URL:', `${stream.ingest.srt.url}?streamid=${stream.ingest.srt.streamid},latency=2000`);

// Monitor stream health
const health = await wave.streams.getHealth(stream.id);
console.log('Packet Loss:', health.srt.packetLoss);
console.log('RTT:', health.srt.rtt);
console.log('Bandwidth:', health.srt.bandwidth);
SRT Protocol Deep Dive | WAVE Documentation | WAVE