<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Vajra Cast</title>
    <description>The latest articles on Forem by Vajra Cast (@vajracast).</description>
    <link>https://forem.com/vajracast</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3769204%2Fe68cf31c-f2e5-42ce-8d57-2a0626ac5bd5.png</url>
      <title>Forem: Vajra Cast</title>
      <link>https://forem.com/vajracast</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/vajracast"/>
    <language>en</language>
    <item>
      <title>RTMP to SRT Migration: Complete Step-by-Step Guide</title>
      <dc:creator>Vajra Cast</dc:creator>
      <pubDate>Thu, 12 Feb 2026 16:02:20 +0000</pubDate>
      <link>https://forem.com/vajracast/rtmp-to-srt-migration-complete-step-by-step-guide-alb</link>
      <guid>https://forem.com/vajracast/rtmp-to-srt-migration-complete-step-by-step-guide-alb</guid>
      <description>&lt;h2&gt;
  
  
  Why Migrate from RTMP to SRT?
&lt;/h2&gt;

&lt;p&gt;RTMP was designed for a different internet. SRT was built for unreliable networks with UDP transport, selective retransmission (ARQ), and built-in AES encryption.&lt;/p&gt;

&lt;p&gt;What you gain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built-in encryption:&lt;/strong&gt; AES-128 or AES-256, native to the protocol&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lower latency:&lt;/strong&gt; UDP avoids TCP head-of-line blocking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better error recovery:&lt;/strong&gt; tolerates up to 30% packet loss&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time diagnostics:&lt;/strong&gt; RTT, jitter, packet loss, bandwidth estimation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bonding:&lt;/strong&gt; SRTLA aggregates multiple connections&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Before You Start
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Inventory Your RTMP Endpoints
&lt;/h3&gt;

&lt;p&gt;List every ingest point and output destination.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check Encoder SRT Support
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Encoder&lt;/th&gt;
&lt;th&gt;SRT Support&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OBS Studio&lt;/td&gt;
&lt;td&gt;Yes (v27+)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vMix&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wirecast&lt;/td&gt;
&lt;td&gt;Yes (v14+)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FFmpeg&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BELABOX&lt;/td&gt;
&lt;td&gt;Yes + SRTLA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Older hardware&lt;/td&gt;
&lt;td&gt;Often no&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Encoders without SRT need protocol conversion at the gateway.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check Your Network
&lt;/h3&gt;

&lt;p&gt;SRT uses UDP. Most corporate firewalls block it by default:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Server side&lt;/span&gt;
nc &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; 9000
&lt;span class="c"&gt;# Encoder side&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"test"&lt;/span&gt; | nc &lt;span class="nt"&gt;-u&lt;/span&gt; your-server.com 9000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 1: Set Up Your SRT Gateway
&lt;/h2&gt;

&lt;p&gt;Use a gateway as the central conversion point. Migrate one encoder at a time.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create SRT Listener on port 9000&lt;/li&gt;
&lt;li&gt;Set latency based on network path (60ms LAN to 3000ms cellular)&lt;/li&gt;
&lt;li&gt;Enable AES-256 encryption&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 2: Configure OBS for SRT
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;srt://your-server:9000?latency=500000&amp;amp;passphrase=YourPassphrase&amp;amp;pbkeylen=32
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OBS uses &lt;strong&gt;microseconds&lt;/strong&gt;: 500ms = 500000.&lt;/p&gt;

&lt;p&gt;Output settings: CBR, 6000 Kbps, keyframe 2s, zerolatency tune.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Configure FFmpeg
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg &lt;span class="nt"&gt;-i&lt;/span&gt; input.mp4 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt;:v libx264 &lt;span class="nt"&gt;-b&lt;/span&gt;:v 6000k &lt;span class="nt"&gt;-g&lt;/span&gt; 60 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt;:a aac &lt;span class="nt"&gt;-b&lt;/span&gt;:a 128k &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-f&lt;/span&gt; mpegts &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"srt://your-server:9000?mode=caller&amp;amp;latency=500000&amp;amp;passphrase=YourPassphrase&amp;amp;pbkeylen=32"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key: &lt;code&gt;-f mpegts&lt;/code&gt; because SRT uses MPEG-TS, not FLV.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Keep RTMP Outputs Where Needed
&lt;/h2&gt;

&lt;p&gt;YouTube, Twitch, Facebook still require RTMP. Your gateway converts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Encoder -&amp;gt; SRT (encrypted) -&amp;gt; Gateway -&amp;gt; RTMP -&amp;gt; YouTube/Twitch
                                       -&amp;gt; SRT  -&amp;gt; Production
                                       -&amp;gt; SRT  -&amp;gt; Recording
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Set Up Failover
&lt;/h2&gt;

&lt;p&gt;With SRT real-time health metrics, detect degradation before full failure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Packet loss&lt;/strong&gt;: switch at &amp;gt;5% sustained for 2 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeout&lt;/strong&gt;: switch after 500ms of no data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bitrate floor&lt;/strong&gt;: switch if below 50% expected&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Validation Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] SRT connection establishes&lt;/li&gt;
&lt;li&gt;[ ] Encryption active (AES-256)&lt;/li&gt;
&lt;li&gt;[ ] No unrecovered packet loss&lt;/li&gt;
&lt;li&gt;[ ] Video plays cleanly on all outputs&lt;/li&gt;
&lt;li&gt;[ ] Audio in sync&lt;/li&gt;
&lt;li&gt;[ ] Failover tested&lt;/li&gt;
&lt;li&gt;[ ] 4-hour duration test passed&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Migration Timeline
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Week&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Audit RTMP setup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Deploy SRT gateway, test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Migrate first encoder, run parallel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Validate, test failover&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Migrate remaining encoders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Decommission RTMP ingest points&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Migrate in parallel, not in-place.&lt;/strong&gt; Run SRT alongside RTMP until confident.&lt;/p&gt;

&lt;p&gt;More: &lt;a href="https://vajracast.com/blog/srt-vs-rtmp-streaming/" rel="noopener noreferrer"&gt;SRT vs RTMP comparison&lt;/a&gt; | &lt;a href="https://vajracast.com/blog/srt-streaming-setup-guide/" rel="noopener noreferrer"&gt;SRT Setup Guide&lt;/a&gt;&lt;/p&gt;

</description>
      <category>srt</category>
      <category>rtmp</category>
      <category>streaming</category>
      <category>migration</category>
    </item>
    <item>
      <title>SRT Streaming Setup Guide: From Zero to Production</title>
      <dc:creator>Vajra Cast</dc:creator>
      <pubDate>Thu, 12 Feb 2026 16:01:55 +0000</pubDate>
      <link>https://forem.com/vajracast/srt-streaming-setup-guide-from-zero-to-production-2ljb</link>
      <guid>https://forem.com/vajracast/srt-streaming-setup-guide-from-zero-to-production-2ljb</guid>
      <description>&lt;h2&gt;
  
  
  Why SRT
&lt;/h2&gt;

&lt;p&gt;SRT (Secure Reliable Transport) has become the go-to protocol for professional video transport over the internet. If you are moving video between locations, SRT gives you reliability, encryption, and observability that RTMP cannot match.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding SRT Modes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Listener Mode (Server)
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;listener&lt;/strong&gt; opens a port and waits for incoming connections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;srt://your-server:9000?mode=listener
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use when running a centralized gateway, accepting streams from multiple sources, or your server has a public IP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Caller Mode (Client)
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;caller&lt;/strong&gt; initiates the connection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;srt://remote-server:9000?mode=caller
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use when you are an encoder sending to a server, behind NAT, or pushing to a specific destination.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Choose Your Ports
&lt;/h2&gt;

&lt;p&gt;SRT uses UDP. Convention is port 9000+, one port per listener. Ensure firewall allows &lt;strong&gt;UDP inbound&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Configure Latency
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;latency&lt;/code&gt; parameter controls the buffer size for error recovery:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Network Condition&lt;/th&gt;
&lt;th&gt;Recommended Latency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LAN (&amp;lt;1ms RTT)&lt;/td&gt;
&lt;td&gt;20-60ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same city (~5ms RTT)&lt;/td&gt;
&lt;td&gt;120-200ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same continent (~30ms RTT)&lt;/td&gt;
&lt;td&gt;250-500ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-continent (~100ms RTT)&lt;/td&gt;
&lt;td&gt;500-1500ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Satellite/Cellular&lt;/td&gt;
&lt;td&gt;1000-4000ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Rule of thumb:&lt;/strong&gt; Set latency to at least &lt;strong&gt;4x your round-trip time&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Enable Encryption
&lt;/h2&gt;

&lt;p&gt;SRT supports AES-128 and AES-256. Always enable over the internet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;srt://server:9000?passphrase=YourSecurePassphrase&amp;amp;pbkeylen=32
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;passphrase&lt;/code&gt;: 10-79 characters&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pbkeylen&lt;/code&gt;: 16 (AES-128), 24 (AES-192), 32 (AES-256)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both sides must match.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Optimize Performance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Maximum Bandwidth:&lt;/strong&gt; &lt;code&gt;maxbw=10000000&lt;/code&gt; caps at 10 Mbps including retransmissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overhead Bandwidth:&lt;/strong&gt; &lt;code&gt;oheadbw=25&lt;/code&gt; (default 25%). Increase on lossy networks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connection Timeout:&lt;/strong&gt; &lt;code&gt;connect_timeout=3000&lt;/code&gt; for caller mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monitoring Your Stream
&lt;/h2&gt;

&lt;p&gt;Key SRT metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RTT&lt;/strong&gt;: should be stable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Packet Loss Rate&lt;/strong&gt;: below 1% is good, SRT handles up to 30%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retransmitted Packets&lt;/strong&gt;: non-zero is normal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Available Bandwidth&lt;/strong&gt;: estimated path bandwidth&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common Pitfalls
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Latency too low&lt;/strong&gt;: causes artifacts when SRT cannot recover packets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firewall blocking UDP&lt;/strong&gt;: SRT uses UDP, not TCP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mismatched passphrases&lt;/strong&gt;: connections silently fail&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrong caller/listener&lt;/strong&gt;: both sides must agree on roles&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Set up automatic failover with a backup input&lt;/li&gt;
&lt;li&gt;Configure multi-destination output&lt;/li&gt;
&lt;li&gt;Explore &lt;a href="https://vajracast.com/blog/srtla-bonding-belabox-guide/" rel="noopener noreferrer"&gt;SRTLA bonding&lt;/a&gt; for mobile production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full protocol comparison: &lt;a href="https://vajracast.com/blog/srt-vs-rtmp-streaming/" rel="noopener noreferrer"&gt;SRT vs RTMP&lt;/a&gt;&lt;/p&gt;

</description>
      <category>srt</category>
      <category>streaming</category>
      <category>tutorial</category>
      <category>networking</category>
    </item>
    <item>
      <title>Video Stream Failover: Best Practices for Zero-Downtime Broadcasting</title>
      <dc:creator>Vajra Cast</dc:creator>
      <pubDate>Thu, 12 Feb 2026 15:55:31 +0000</pubDate>
      <link>https://forem.com/vajracast/video-stream-failover-best-practices-for-zero-downtime-broadcasting-2355</link>
      <guid>https://forem.com/vajracast/video-stream-failover-best-practices-for-zero-downtime-broadcasting-2355</guid>
      <description>&lt;h2&gt;
  
  
  Why Failover Matters
&lt;/h2&gt;

&lt;p&gt;In live broadcasting, a dropped stream isn't just a technical issue. It's lost audience, lost revenue, and damaged reputation. From a sports event with 50,000 viewers to a corporate town hall with 500 employees, the expectation is the same: &lt;strong&gt;it must not go down.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Video stream failover is the safety net that catches your broadcast when the primary feed fails.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Video Failover?
&lt;/h2&gt;

&lt;p&gt;Failover is the automatic switching from a primary video input to a backup when the system detects a failure. A good failover system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detects failure fast:&lt;/strong&gt; milliseconds, not seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switches cleanly:&lt;/strong&gt; minimal visual disruption for viewers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recovers automatically:&lt;/strong&gt; returns to the primary when it's healthy again&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Requires no manual intervention:&lt;/strong&gt; the whole point is automation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Architecture: Redundant Inputs
&lt;/h2&gt;

&lt;p&gt;The foundation of any failover setup is &lt;strong&gt;redundant inputs&lt;/strong&gt;. You need at least two independent paths:&lt;/p&gt;

&lt;h3&gt;
  
  
  Active/Standby
&lt;/h3&gt;

&lt;p&gt;The simplest model. One input is active, the other is hot standby:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Primary SRT -&amp;gt; [Gateway] -&amp;gt; Output
Backup RTMP -&amp;gt; [Gateway] (on failure)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Active/Active
&lt;/h3&gt;

&lt;p&gt;Both inputs carry the stream simultaneously. The gateway selects the best one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Input A (SRT) -&amp;gt; [Gateway: compare] -&amp;gt; Best signal -&amp;gt; Output
Input B (SRT) -&amp;gt; [Gateway: compare]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More bandwidth cost, but higher reliability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Detection: How Fast Can You React?
&lt;/h2&gt;

&lt;p&gt;The speed of failover depends on how quickly you detect the problem:&lt;/p&gt;

&lt;h3&gt;
  
  
  Stream Health Monitoring
&lt;/h3&gt;

&lt;p&gt;Monitor the incoming stream for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Packet loss:&lt;/strong&gt; SRT reports this in real-time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bitrate drops:&lt;/strong&gt; sudden decrease often precedes a full failure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Black/frozen frames:&lt;/strong&gt; content-aware detection (advanced)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio silence:&lt;/strong&gt; loss of audio signal&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Timeouts
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Detection Method&lt;/th&gt;
&lt;th&gt;Typical Timeout&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SRT packet loss&lt;/td&gt;
&lt;td&gt;&amp;lt;50ms&lt;/td&gt;
&lt;td&gt;SRT statistics report instantly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP disconnect&lt;/td&gt;
&lt;td&gt;1-5s&lt;/td&gt;
&lt;td&gt;TCP timeout dependent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bitrate threshold&lt;/td&gt;
&lt;td&gt;200-500ms&lt;/td&gt;
&lt;td&gt;Configurable window&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Content analysis&lt;/td&gt;
&lt;td&gt;500ms-2s&lt;/td&gt;
&lt;td&gt;Compute intensive&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The 50ms Target
&lt;/h3&gt;

&lt;p&gt;Professional broadcast equipment targets &lt;strong&gt;sub-50ms failover&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Failure detected within 20ms&lt;/li&gt;
&lt;li&gt;Switch command issued within 10ms&lt;/li&gt;
&lt;li&gt;Output buffer absorbs the transition within 20ms&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At 50ms, the switch is &lt;strong&gt;invisible to viewers&lt;/strong&gt;, happening within 1-2 video frames.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pattern 1: Gateway-Level Failover
&lt;/h3&gt;

&lt;p&gt;The gateway itself handles failover logic. This is the simplest and most reliable approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure primary and backup inputs&lt;/li&gt;
&lt;li&gt;Set detection thresholds (packet loss %, bitrate floor, timeout)&lt;/li&gt;
&lt;li&gt;The gateway switches automatically and logs every event&lt;/li&gt;
&lt;li&gt;When primary recovers, it switches back&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pattern 2: Encoder-Level Redundancy
&lt;/h3&gt;

&lt;p&gt;Run two encoders independently:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Camera -&amp;gt; Encoder A -&amp;gt; SRT -&amp;gt; Gateway
Camera -&amp;gt; Encoder B -&amp;gt; SRT -&amp;gt; Gateway (backup)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Protects against encoder failure, not just network failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 3: Geographic Redundancy
&lt;/h3&gt;

&lt;p&gt;For mission-critical broadcasts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Venue Encoder -&amp;gt; SRT -&amp;gt; Gateway (Region A)
Venue Encoder -&amp;gt; SRT -&amp;gt; Gateway (Region B) [failover]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both gateways output to CDN. CDN-level origin failover provides the final layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monitoring and Alerts
&lt;/h2&gt;

&lt;p&gt;Failover without monitoring is flying blind:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Real-time dashboards&lt;/strong&gt;: visualize all input health metrics simultaneously&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated alerts&lt;/strong&gt;: get notified when failover activates (Slack, email, webhook)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event logging&lt;/strong&gt;: timestamp every switch event for post-mortem analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recovery notifications&lt;/strong&gt;: know when the primary is back&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Testing Your Failover
&lt;/h2&gt;

&lt;p&gt;Never trust a failover system you haven't tested:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scheduled drills&lt;/strong&gt;: pull the primary cable during a test stream&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network simulation&lt;/strong&gt;: inject packet loss with &lt;code&gt;tc&lt;/code&gt; to test SRT recovery vs. failover threshold&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encoder failure&lt;/strong&gt;: kill the encoder process and measure switch time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recovery testing&lt;/strong&gt;: verify the system returns to primary&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Load testing&lt;/strong&gt;: confirm failover works under peak output conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common Mistakes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Single point of failure in the switch itself&lt;/strong&gt;: if your failover device fails, everything fails&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backup feed not monitored&lt;/strong&gt;: your backup might be dead when you need it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Too-aggressive timeouts&lt;/strong&gt;: switching on momentary packet loss creates unnecessary disruption&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No automatic recovery&lt;/strong&gt;: manual "switch back" means someone has to be awake at 3 AM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not testing&lt;/strong&gt;: the first time your failover fires shouldn't be during a live event&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For more on SRT protocol fundamentals, see &lt;a href="https://vajracast.com/blog/srt-vs-rtmp-streaming/" rel="noopener noreferrer"&gt;SRT vs RTMP: Which Should You Use?&lt;/a&gt;. For setup details, read the &lt;a href="https://vajracast.com/blog/srt-streaming-setup-guide/" rel="noopener noreferrer"&gt;SRT Streaming Setup Guide&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>streaming</category>
      <category>broadcast</category>
      <category>reliability</category>
      <category>video</category>
    </item>
    <item>
      <title>OBS to SRT Streaming: Setup Guide for Low-Latency Broadcasting</title>
      <dc:creator>Vajra Cast</dc:creator>
      <pubDate>Thu, 12 Feb 2026 15:53:47 +0000</pubDate>
      <link>https://forem.com/vajracast/obs-to-srt-streaming-setup-guide-for-low-latency-broadcasting-3amb</link>
      <guid>https://forem.com/vajracast/obs-to-srt-streaming-setup-guide-for-low-latency-broadcasting-3amb</guid>
      <description>&lt;h2&gt;
  
  
  Why Use SRT with OBS?
&lt;/h2&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Encryption:&lt;/strong&gt; SRT encrypts your stream with AES-128 or AES-256 natively. No RTMPS certificate management, no TLS overhead. Just a shared passphrase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error recovery:&lt;/strong&gt; 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time diagnostics:&lt;/strong&gt; 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.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This guide covers everything you need to connect OBS to an SRT destination.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before starting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OBS Studio 30 or newer.&lt;/strong&gt; Older versions have SRT support but with fewer configuration options and known bugs. Update to the latest version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An SRT destination:&lt;/strong&gt; a server running an SRT listener.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UDP connectivity.&lt;/strong&gt; SRT uses UDP. If you are behind a corporate firewall that blocks outbound UDP, you will need an exception for your SRT port.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Quick test: can you reach your server on UDP?&lt;/span&gt;
nc &lt;span class="nt"&gt;-vz&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; your-server.com 9000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 1: Configure the SRT Destination
&lt;/h2&gt;

&lt;p&gt;First, set up the receiving end. You need an SRT listener:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose a port (e.g., 9000)&lt;/li&gt;
&lt;li&gt;Set latency to &lt;strong&gt;500ms&lt;/strong&gt; as a starting point&lt;/li&gt;
&lt;li&gt;Enable encryption with a strong passphrase and AES-256&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your SRT endpoint is now: &lt;code&gt;srt://your-server.com:9000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you want to test quickly, you can use FFmpeg as a listener:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"srt://0.0.0.0:9000?mode=listener&amp;amp;latency=500000"&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; copy output.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Configure OBS Stream Settings
&lt;/h2&gt;

&lt;p&gt;Open OBS and go to &lt;strong&gt;Settings &amp;gt; Stream&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Service&lt;/strong&gt;: Select &lt;strong&gt;Custom...&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server&lt;/strong&gt;: Enter your SRT URL with all parameters:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;srt://your-server.com:9000?latency=500000&amp;amp;passphrase=YourSecurePassphrase&amp;amp;pbkeylen=32
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Stream Key&lt;/strong&gt;: Leave this &lt;strong&gt;empty&lt;/strong&gt;. SRT does not use stream keys.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Critical: Latency Units
&lt;/h3&gt;

&lt;p&gt;OBS specifies SRT latency in &lt;strong&gt;microseconds&lt;/strong&gt;, not milliseconds. This is the single most common configuration mistake:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Desired Latency&lt;/th&gt;
&lt;th&gt;OBS Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;120ms&lt;/td&gt;
&lt;td&gt;120000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500ms&lt;/td&gt;
&lt;td&gt;500000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1000ms&lt;/td&gt;
&lt;td&gt;1000000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2000ms&lt;/td&gt;
&lt;td&gt;2000000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you set &lt;code&gt;latency=500&lt;/code&gt; in OBS, you are requesting 0.5ms, effectively zero buffer.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Full SRT URL Explained
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;srt://your-server.com:9000?mode=caller&amp;amp;latency=500000&amp;amp;passphrase=MyPass123&amp;amp;pbkeylen=32&amp;amp;oheadbw=25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;caller&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OBS initiates the connection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;latency&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;500000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;500ms receive buffer in microseconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;passphrase&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MyPass123&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shared encryption passphrase (10-79 characters)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pbkeylen&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;32&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AES-256 (16=AES-128, 24=AES-192, 32=AES-256)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oheadbw&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;25&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;25% overhead bandwidth for retransmissions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 3: Configure OBS Output Settings
&lt;/h2&gt;

&lt;p&gt;Go to &lt;strong&gt;Settings &amp;gt; Output&lt;/strong&gt; and switch to &lt;strong&gt;Advanced&lt;/strong&gt; mode.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encoder Settings
&lt;/h3&gt;

&lt;h4&gt;
  
  
  x264 (Software Encoding)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Encoder: x264
Rate Control: CBR
Bitrate: 6000 Kbps
Keyframe Interval: 2 seconds
CPU Usage Preset: veryfast
Profile: high
Tune: zerolatency
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;zerolatency&lt;/code&gt; tune disables x264's frame reordering and look-ahead features, reducing encoding latency by 2-5 frames.&lt;/p&gt;

&lt;h4&gt;
  
  
  NVENC (NVIDIA GPU)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Encoder: NVIDIA NVENC H.264
Rate Control: CBR
Bitrate: 6000 Kbps
Keyframe Interval: 2 seconds
Preset: P4
Profile: high
B-Frames: 0 (minimum latency) or 2 (better quality)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Intel QSV
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Encoder: QuickSync H.264
Rate Control: CBR
Bitrate: 6000 Kbps
Keyframe Interval: 2 seconds
Profile: high
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why CBR?
&lt;/h3&gt;

&lt;p&gt;SRT works best with Constant Bitrate encoding:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Bandwidth prediction:&lt;/strong&gt; SRT allocates overhead bandwidth as a percentage of the stream bitrate. With CBR, this is predictable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Packet scheduling:&lt;/strong&gt; Constant bitrate produces evenly-spaced packets, which SRT can schedule efficiently.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 4: Resolution and Bitrate Guidelines
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resolution&lt;/th&gt;
&lt;th&gt;Frame Rate&lt;/th&gt;
&lt;th&gt;Minimum Bitrate&lt;/th&gt;
&lt;th&gt;Recommended Bitrate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1280x720&lt;/td&gt;
&lt;td&gt;30 fps&lt;/td&gt;
&lt;td&gt;2500 Kbps&lt;/td&gt;
&lt;td&gt;4000 Kbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1280x720&lt;/td&gt;
&lt;td&gt;60 fps&lt;/td&gt;
&lt;td&gt;3500 Kbps&lt;/td&gt;
&lt;td&gt;5000 Kbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1920x1080&lt;/td&gt;
&lt;td&gt;30 fps&lt;/td&gt;
&lt;td&gt;4000 Kbps&lt;/td&gt;
&lt;td&gt;6000 Kbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1920x1080&lt;/td&gt;
&lt;td&gt;60 fps&lt;/td&gt;
&lt;td&gt;6000 Kbps&lt;/td&gt;
&lt;td&gt;8000 Kbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3840x2160&lt;/td&gt;
&lt;td&gt;30 fps&lt;/td&gt;
&lt;td&gt;15000 Kbps&lt;/td&gt;
&lt;td&gt;20000 Kbps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 5: Latency Tuning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Measuring Your Baseline
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Start streaming with &lt;code&gt;latency=500000&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Observe the reported RTT for 5 minutes&lt;/li&gt;
&lt;li&gt;Note the average RTT and the peak RTT&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Calculating Optimal Latency
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Optimal Latency = 4 * Average RTT + 2 * (Peak RTT - Average RTT)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example: Average RTT = 40ms, Peak RTT = 65ms&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Latency = 4 * 40 + 2 * (65 - 40) = 160 + 50 = 210ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Round up to 250ms. In OBS: &lt;code&gt;latency=250000&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  "Failed to connect to server"
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Wrong port:&lt;/strong&gt; double-check the port number&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firewall blocking UDP:&lt;/strong&gt; SRT uses UDP, not TCP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Passphrase mismatch:&lt;/strong&gt; SRT silently rejects wrong passphrases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server not listening:&lt;/strong&gt; verify the SRT listener is running&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Stream connects but video is broken
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Latency too low:&lt;/strong&gt; increase SRT latency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyframe interval too long:&lt;/strong&gt; set to 2 seconds maximum&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Intermittent freezing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Switch to a faster encoder preset&lt;/li&gt;
&lt;li&gt;Use hardware encoding (NVENC, QSV)&lt;/li&gt;
&lt;li&gt;Reduce resolution or frame rate&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  OBS SRT Quick Reference
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Local Network (LAN)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;srt://192.168.1.100:9000?latency=60000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Same City
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;srt://server.example.com:9000?latency=250000&amp;amp;passphrase=YourPassphrase&amp;amp;pbkeylen=32
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Cross-Country
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;srt://server.example.com:9000?latency=800000&amp;amp;passphrase=YourPassphrase&amp;amp;pbkeylen=32&amp;amp;oheadbw=25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  International
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;srt://server.example.com:9000?latency=1500000&amp;amp;passphrase=YourPassphrase&amp;amp;pbkeylen=32&amp;amp;oheadbw=30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more on SRT fundamentals, read the full &lt;a href="https://vajracast.com/blog/srt-vs-rtmp-streaming/" rel="noopener noreferrer"&gt;SRT vs RTMP comparison&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>obs</category>
      <category>streaming</category>
      <category>srt</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SRT vs RTMP: Which Streaming Protocol Should You Use in 2026?</title>
      <dc:creator>Vajra Cast</dc:creator>
      <pubDate>Thu, 12 Feb 2026 15:49:59 +0000</pubDate>
      <link>https://forem.com/vajracast/srt-vs-rtmp-which-streaming-protocol-should-you-use-in-2026-16e3</link>
      <guid>https://forem.com/vajracast/srt-vs-rtmp-which-streaming-protocol-should-you-use-in-2026-16e3</guid>
      <description>&lt;h2&gt;
  
  
  The Protocol Dilemma
&lt;/h2&gt;

&lt;p&gt;If you're building a live streaming workflow in 2026, you've probably asked yourself: &lt;strong&gt;should I use SRT or RTMP?&lt;/strong&gt; Both protocols move video from point A to point B, but they do it very differently, and the right choice depends on your infrastructure, your audience, and your tolerance for dropped frames.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is RTMP?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;RTMP (Real-Time Messaging Protocol)&lt;/strong&gt; was developed by Macromedia (later Adobe) in the mid-2000s. It became the standard for Flash-based streaming and remained the de facto ingest protocol for platforms like YouTube Live, Twitch, and Facebook Live.&lt;/p&gt;

&lt;p&gt;Key characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TCP-based:&lt;/strong&gt; reliable delivery, but vulnerable to head-of-line blocking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low latency:&lt;/strong&gt; typically 1-3 seconds in optimal conditions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Widely supported:&lt;/strong&gt; virtually every encoder and platform speaks RTMP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No built-in encryption:&lt;/strong&gt; relies on RTMPS (TLS wrapper) for security&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RTMP works great on stable, low-latency networks. It's the "just works" protocol.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is SRT?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SRT (Secure Reliable Transport)&lt;/strong&gt; was developed by Haivision and open-sourced in 2017. It was designed from the ground up for unreliable networks: cellular bonding, satellite uplinks, and public internet connections.&lt;/p&gt;

&lt;p&gt;Key characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UDP-based:&lt;/strong&gt; avoids TCP head-of-line blocking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ARQ error recovery:&lt;/strong&gt; retransmits only lost packets, not the entire stream&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AES-128/256 encryption:&lt;/strong&gt; built-in, not bolted on&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adjustable latency:&lt;/strong&gt; you choose the buffer size based on network conditions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bandwidth overhead reporting:&lt;/strong&gt; real-time metrics on packet loss, jitter, RTT&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SRT was built for the real world, where networks drop packets and bandwidth fluctuates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Head-to-Head Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;RTMP&lt;/th&gt;
&lt;th&gt;SRT&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Transport&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;UDP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encryption&lt;/td&gt;
&lt;td&gt;RTMPS (TLS)&lt;/td&gt;
&lt;td&gt;AES-128/256 native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error Recovery&lt;/td&gt;
&lt;td&gt;TCP retransmit (all)&lt;/td&gt;
&lt;td&gt;ARQ (selective)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency&lt;/td&gt;
&lt;td&gt;1-3s&lt;/td&gt;
&lt;td&gt;Configurable (20ms-8s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firewall Friendly&lt;/td&gt;
&lt;td&gt;Yes (port 1935)&lt;/td&gt;
&lt;td&gt;Needs UDP ports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Packet Loss Tolerance&lt;/td&gt;
&lt;td&gt;Poor&lt;/td&gt;
&lt;td&gt;Excellent (up to 30%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bonding Support&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes (SRTLA)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adoption&lt;/td&gt;
&lt;td&gt;Universal&lt;/td&gt;
&lt;td&gt;Growing fast&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When to Use RTMP
&lt;/h2&gt;

&lt;p&gt;RTMP is still the right choice when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You're ingesting to major platforms:&lt;/strong&gt; YouTube, Twitch, and Facebook still prefer RTMP ingest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your network is stable and local:&lt;/strong&gt; LAN or dedicated circuits with &amp;lt;1ms jitter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encoder compatibility matters:&lt;/strong&gt; some older hardware only speaks RTMP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need maximum simplicity:&lt;/strong&gt; RTMP is "set the URL and go"&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When to Use SRT
&lt;/h2&gt;

&lt;p&gt;SRT is the better choice when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You're sending over the public internet:&lt;/strong&gt; SRT handles packet loss gracefully&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need encryption:&lt;/strong&gt; AES-256 is built in, no extra infrastructure needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You're doing remote production:&lt;/strong&gt; SRTLA bonding lets you aggregate multiple cellular connections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want real-time diagnostics:&lt;/strong&gt; SRT exposes loss rate, RTT, jitter, and bandwidth metrics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability is non-negotiable:&lt;/strong&gt; SRT's ARQ ensures clean delivery even on lossy networks&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Best of Both Worlds
&lt;/h2&gt;

&lt;p&gt;With a protocol-agnostic gateway like &lt;a href="https://vajracast.com" rel="noopener noreferrer"&gt;Vajra Cast&lt;/a&gt;, you don't have to choose. Accept &lt;strong&gt;both protocols simultaneously&lt;/strong&gt; and convert between them in real-time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Receive RTMP from legacy encoders, output SRT to your production network&lt;/li&gt;
&lt;li&gt;Receive SRT from remote cameras, output RTMP to social platforms&lt;/li&gt;
&lt;li&gt;Mix and match inputs and outputs across protocols&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus, with automatic failover, if your primary SRT feed drops, the gateway switches to the backup RTMP input in under 50ms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom Line
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use SRT&lt;/strong&gt; whenever possible. It's the modern choice: encrypted, resilient, and observable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use RTMP&lt;/strong&gt; when platform compatibility or legacy equipment forces your hand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use both&lt;/strong&gt; when you need maximum flexibility.&lt;/p&gt;

</description>
      <category>streaming</category>
      <category>srt</category>
      <category>rtmp</category>
      <category>video</category>
    </item>
  </channel>
</rss>
