RTMP/SRT on public Internet
RTMP behavior (TCP-based)
RTMP uses TCP for transport. TCP guarantees in-order, lossless delivery through unlimited retransmissions, sliding windows and backpressure. When the network is unstable:- Lost packets are retransmitted automatically by TCP
- The sender slows down and buffers more data
- Delay grows silently as TCP tries to recover
- Output at the receiver remains continuous
SRT behavior (UDP-based)
SRT implements reliability using UDP plus selective retransmissions. Unlike TCP, SRT enforces a strictlatency window (e.g., 500–3000 ms). Packets must arrive within this time, otherwise they are dropped.
When the network is unstable:
- Retransmissions may arrive too late
- Jitter bursts may exceed the buffer window
- Packets that miss the latency budget are discarded
- Decoders receive incomplete GOPs and break
SRT offers more capabilities than RTMP, but requires precise configuration to match the network conditions. If SRT proves difficult to configure, RTMP is a reliable fallback.
Limited outgoing bandwidth
Uplink bandwidth can become a limiting factor when several high-bitrate streams are sent simultaneously from one server to the Gcore transcoder and compete for the same outgoing connection. When multiple simultaneous live streams compete for the same uplink:- RTMP (TCP) slows down each stream, increases buffering, and eventually inflates latency to keep all streams alive.
- SRT (UDP) does not introduce backpressure; it continues sending packets at encoder rate. If uplink bandwidth is insufficient, packets are dropped or retransmitted too late.
Encoder frame buffer
Most H.264/H.265 encoders introduce internal delay by using lookahead, B-frames, and scenecut analysis, which buffer and reorder frames before they are sent. This encoder-side buffering (often 1.3–1.5 seconds) adds to total end-to-end ingest latency and reduces the budget available to the rest of the pipeline. For SRT, keep encoder buffering low and configure the SRTlatency window to account for the expected network RTT, jitter, and retransmission time — otherwise the combined delay pushes packets past their deadline. The -tune zerolatency flag (or equivalent encoder parameters) disables lookahead, B-frames, and frame reordering to minimize encoder-side delay.
The zerolatency encoder tuning section in the SRT article covers encoder frame buffering and frame reordering in depth.
Protocol comparison
If RTMP capabilities are sufficient, continue using it — its TCP-based algorithm handles most network issues. Switch to SRT when lower latency or codec flexibility is required.
In scenarios where RTMP works correctly but SRT shows visual glitches or intermittent disconnects, the root cause is usually that the default SRT latency (commonly 500–1200 ms) is smaller than the combined encoder frame preparation time, network path RTT, jitter bursts, and loss-recovery time. The retransmission window is then insufficient: packets arrive after the deadline, are marked late, and get dropped, which leads to broken GOPs and transcoder instability. Increasing the SRT latency to ~2000 ms expands the correction window and allows late packets to arrive in time, smoothing jitter and restoring a stable, predictable ingest stream.
Protocol-specific configuration is covered in the RTMP and SRT articles.
Demo RTMP/SRT comparison
This video demonstrates RTMP and SRT behavior with different settings under unstable internet conditions. SRT requires parameter tuning — the default latency is often insufficient for real-world network jitter and encoder buffering.- Stream URL:
&latency=2000is added - Output > Encoder Settings:
- Keyframe Interval:
1sec - CPU Usage Preset:
veryfast - Profile:
baseline - Tune:
zerolatency - x264 Options:
rc-lookahead=0:bframes=0:scenecut=0
- Keyframe Interval: