How to Stream Video Over RIST with FFmpeg

This article provides a practical, step-by-step guide on how to stream live video using the Reliable Internet Stream Transport (RIST) protocol with FFmpeg. You will learn how to verify your FFmpeg installation for RIST support, construct the correct commands to send and receive RIST streams, and configure essential parameters such as latency buffers, encryption, and profiles to ensure reliable, low-latency video delivery over lossy networks.

Verifying FFmpeg RIST Support

Before streaming, you must ensure your FFmpeg build includes the librist library. Run the following command in your terminal to check for RIST protocol support:

ffmpeg -protocols | grep rist

If configured correctly, the output should display rist under both input and output protocols. If it does not appear, you will need to install or compile a version of FFmpeg enabled with the --enable-librist flag.

How to Send a RIST Stream (Sender)

To stream a video file or live feed to a remote receiver, use FFmpeg to encode the input into an MPEG-TS container and target the RIST destination URL.

Here is a basic command to stream a local video file:

ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 3000k -c:a aac -f mpegts "rist://192.168.1.100:5000?rist_profile=simple"

Key Parameters Explained: * -re: Reads the input file in real-time (essential for simulating a live stream). * -f mpegts: Specifies the MPEG-TS muxer, which is required for packaging video over RIST. * rist://192.168.1.100:5000: The destination IP address and port of the receiver. * rist_profile=simple: Selects the RIST Simple Profile (best for basic point-to-point streaming).

How to Receive a RIST Stream (Receiver)

To ingest and play or save the incoming RIST stream, the receiver must bind to the designated port. Note the @ symbol in the receiver’s connection string, which instructs FFmpeg to bind and listen to the incoming connection.

To play the incoming stream using FFplay (FFmpeg’s media player):

ffplay "rist://@0.0.0.0:5000?rist_profile=simple"

To record the incoming RIST stream directly to a file without re-encoding:

ffmpeg -i "rist://@0.0.0.0:5000?rist_profile=simple" -c copy output.mp4

Advanced RIST Configuration Options

RIST allows you to fine-tune transmission settings via query parameters appended to the URL.

1. Adjusting Buffer and Latency

The buffer size determines how long the receiver waits to request and reconstruct missing packets. The default buffer is 1000 milliseconds. For high-packet-loss networks, increase this value; for ultra-low latency, decrease it.

2. Enabling Encryption and Main Profile

For secure streaming over the public internet, use the RIST Main Profile, which supports AES encryption. You must define the encryption type (128 or 256) and a shared secret key on both the sender and receiver.