Configure SRT Connection Timeout in FFmpeg

This article provides a quick guide on how to configure the connection handshaking timeout for Secure Reliable Transport (SRT) streams in FFmpeg. You will learn the specific URL parameters required to adjust this duration, helping you prevent infinite connection hangs and optimize your live streaming workflows.

To configure the connection handshaking timeout in FFmpeg for SRT, you must append the handshake_timeout parameter directly to the SRT destination or source URL as a query string.

The handshake_timeout Parameter

The handshake_timeout option controls the maximum time FFmpeg will wait for the SRT handshake to complete before closing the connection.

  • Unit of Measurement: Microseconds (1 second = 1,000,000 microseconds).
  • Default Value: 10,000,000 microseconds (10 seconds).

URL Syntax

To apply this setting, add ?handshake_timeout=VALUE to the end of your SRT URL. If you are already using other query parameters (like mode or latency), separate them using an ampersand (&).

Basic Syntax:

srt://<IP_ADDRESS>:<PORT>?handshake_timeout=<MICROSECONDS>

Multiple Parameters Syntax:

srt://<IP_ADDRESS>:<PORT>?mode=caller&latency=2000000&handshake_timeout=5000000

Practical FFmpeg Examples

1. Streaming to an SRT Receiver (Caller Mode)

If you want to stream video to a remote server and set the handshake timeout to 5 seconds (5,000,000 microseconds), use the following command:

ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -c:a aac -f mpegts "srt://192.168.1.100:9000?mode=caller&handshake_timeout=5000000"

2. Receiving an SRT Stream (Listener Mode)

If your FFmpeg instance is listening for an incoming SRT stream and you want to set the connection handshake timeout to 3 seconds (3,000,000 microseconds):

ffmpeg -i "srt://0.0.0.0:9000?mode=listener&handshake_timeout=3000000" -c copy output.mp4

Important Considerations

  • Quotes around URLs: Always wrap the SRT URL in double quotes in your terminal to prevent the shell from interpreting characters like ? and & as system commands.
  • General Timeout vs. Handshake Timeout: Do not confuse handshake_timeout with timeout. The timeout parameter in SRT URLs is used for general blocking system calls, whereas handshake_timeout specifically dictates the limit for the initial connection phase.