What is RIST?
The RIST (Reliable Internet Stream Transport) protocol is designed for reliable streaming of video and audio over the internet. It’s particularly useful in scenarios where traditional streaming methods may struggle, like broadcasting or live events.
As an innovative, open-source protocol, RIST enhances video transmission over unreliable networks, ensuring high-quality streaming with low latency—making it ideal for various broadcasting applications. It’s developed by the Video Services Forum’s RIST Activity Group and serves as a reliable successor to the Secure Reliable Transport (SRT) protocol.
How Does RIST Work?
RIST operates by breaking media into smaller packets for transmission. Here’s a simplified breakdown of its process:
- Packetization: Media is divided into packets.
- Error Correction: RIST adds extra data to help detect and correct any missing or corrupted packets.
- Reassembly: At the receiving end, packets are reassembled, ensuring smooth playback.
This method helps maintain quality even in challenging network conditions.
Key Features of RIST
Reliable Transmission: RIST achieves this reliability through various techniques, including packet
retransmission and error correction.
Point-to-Multipoint Support: This capability allows broadcasters to efficiently distribute content
to multiple locations simultaneously, optimizing the use of network resources.
Low Latency: RIST (Reliable Internet Stream Transport) offers minimal delay, making it ideal for
live broadcasts where timing is crucial.
Error Correction: It employs advanced error correction techniques to ensure data integrity, even
in challenging network conditions.
Scalability: RIST can easily scale to accommodate varying bandwidth and user needs, making it
versatile for different streaming environments.
Interoperability: It works well with existing protocols and infrastructure, allowing seamless
integration without the need for extensive changes.
Secure Transport: RIST includes built-in security features to protect content during
transmission, enhancing overall reliability.
RIST Profiles: Simple, Main and Advanced
RIST operates with Simple Profile, Main Profile and Advanced Profile. Each serves different
needs and levels of complexity.
RIST Simple Profile (published as VSF TR-06-1 in 2018)
The Simple Profile is designed for basic stream interoperability and is based on the Real-time Transport Protocol (RTP). It incorporates Automatic Repeat reQuest (ARQ) techniques to manage lost packets. By using RTP sequence numbers, it can identify which packets need to be retransmitted, allowing users to decide how much they want to prioritize reliability versus latency.
NACK Mechanisms: It utilizes Negative Acknowledgement (NACK) packets to request retransmissions, with two types available: a bitmask NACK for random losses and a range NACK for burst losses.
Seamless Redundancy: Multiple copies of a stream are sent across different links, allowing seamless playback even if one link fails.
Bonding: It combines multiple links to enhance overall capacity, effectively utilizing available bandwidth.
RIST Main Profile (published as VSF TR-06-2 in 2020)
The Main Profile expands upon the Simple Profile by adding more features for security and ease
of deployment. Here are some of its key enhancements:
Tunneling: This feature allows multiple streams to be transmitted over a single UDP port, simplifying firewall configurations and stream management. It uses Generic Routing Encapsulation (GRE) over UDP for this purpose.
Security Options: The Main Profile supports encryption through AES-128 and AES-256, ensuring that the content remains protected. It also uses Datagram Transport Layer Security (DTLS) for secure connections.
Authentication: RIST provides certificate-based and password-based authentication methods to ensure that only authorized endpoints can connect.
RIST Advanced Profile (published as VSF TR-06-3 in 2021)
The RIST Advanced Profile builds on the basic capabilities of the standard RIST protocol, providing enhanced functionalities tailored for professional broadcasting and streaming applications. Here are some key features:
Enhanced Error Correction: Offers advanced Forward Error Correction (FEC) techniques, improving resilience against packet loss, especially in unreliable networks.
Dynamic Bitrate Adjustment: Supports adaptive streaming by automatically adjusting the bitrate based on current network conditions, ensuring optimal quality without interruption.
Network Bonding: Allows multiple network connections to be combined, increasing bandwidth and reliability by utilizing different paths for data transmission.
Stream Synchronization: Ensures that multiple streams remain in sync, which is crucial for applications like live sports broadcasting where audio and video must match precisely.
Advanced Encryption: Provides robust security measures, including encryption options for protecting content during transmission, which is essential for sensitive or proprietary media.
Support for Multiple Codecs: Accommodates various video and audio codecs, making it
versatile for different content types and delivery methods.
Flexible Stream Management: Includes features for managing multiple streams, allowing
broadcasters to efficiently handle various content sources and destinations.
These advanced features make the RIST Advanced Profile a powerful option for broadcasters and content providers looking for reliability, flexibility, and high-quality streaming.
Experimenting with RIST: Practical Commands
Getting hands-on with RIST is the best way to understand its capabilities. Below, you’ll find a series of examples demonstrating how to set up RIST for various scenarios, from simple streaming to more complex configurations.
Setting Up Your Environment
Before you begin, make sure you have the necessary tools installed. You will need:
FFmpeg: For generating test streams.
Librist: The implementation of RIST, which you can compile following these steps:
- Clone the git Repository: librist
- Install Meson (0.47 or higher) and Ninja.
- Create a build directory: mkdir build && cd build.
- Run meson .. to configure.
- Compile with ninja.
Example 1: Simple Profile Streaming
In this example, we'll create a basic UDP stream and use RIST to send it.
Create a Test Stream:
ffmpeg -f lavfi -re -fflags +genpts -i testsrc=duration=65536:size=1280x720:rate=24 -f mpegts
"udp://127.0.0.1:8193?pkt_size=1316"
Set Up RIST Sender:
./ristsender -i 'udp://@127.0.0.1:8192' -o 'rist://127.0.0.1:8200?
cname=SENDER01&bandwidth=2560000' -p 0 -v 4
Set Up RIST Receiver:
./ristreceiver -i 'rist://@127.0.0.1:8200?cname=RECEIVER01&bandwidth=2560000' -o
'udp://127.0.0.1:8100' -p 0 -v 4
Play the Stream:
ffplay udp://127.0.0.1:8100
Example 2: Main Profile Streaming with Buffer Control
Here’s how to set up a main profile stream with buffer management.
Create a Test Stream:
ffmpeg -stream_loop -1 -i <inputfile> -c copy -f mpegts udp://127.0.0.1:8192?pkt_size=1316
Set Up RIST Sender:
./ristsender -i 'udp://127.0.0.1:8192?stream-id=1000' -o 'rist://127.0.0.1:8200?
cname=SENDER01&bandwidth=2560000&buffer-min=245&buffer-max=1000&rtt-min=40&rttmax=
500&congestion-control=1' -p 1 -v 4
Set Up RIST Receiver:
./ristreceiver -i 'rist://@127.0.0.1:8200?cname=RECEIVER01&bandwidth=2560000&buffermin=
245&buffer-max=1000&rtt-min=40&rtt-max=500&congestion-control=1' -o
'udp://127.0.0.1:8100?stream-id=1000' -p 1 -v 4
Play the Stream:
ffplay udp://127.0.0.1:8100
Example 3: Multi-Stream Setup
In this example, we will send two different streams using the main profile.
Create Two Test Streams:
ffmpeg -stream_loop -1 -i <inputfile> -c copy -f mpegts udp://127.0.0.1:8192?pkt_size=1316
ffmpeg -f lavfi -re -fflags +genpts -i testsrc=duration=65536:size=1280x720:rate=24 -f mpegts
"udp://127.0.0.1:8193?pkt_size=1316"
Set Up RIST Sender:
./ristsender -i 'udp://127.0.0.1:8192?stream-id=1000,udp://127.0.0.1:8193?stream-id=2000' -o
'rist://127.0.0.1:8200?cname=SENDER01&bandwidth=5120000&congestion-control=1' -p 1 -v 4
Set Up RIST Receiver:
./ristreceiver -i 'rist://@127.0.0.1:8200?cname=RECEIVER01&bandwidth=5120000&congestioncontrol=
1' -o 'udp://127.0.0.1:8300?stream-id=1000,udp://127.0.0.1:8100?stream-id=2000' -p 1
-v 4
Play Both Streams:
ffplay udp://127.0.0.1:8100 &
ffplay udp://127.0.0.1:8300
Why RIST is Preferred?
RIST stands out among other protocols due to its balance of reliability and efficiency. Its ability to maintain quality under fluctuating network conditions makes it particularly appealing for broadcasters and content providers. Moreover, the ease of integration and support for various media formats means users can adopt it without major disruptions to their existing workflows. This combination of features makes RIST a top choice for anyone looking to ensure high-quality streaming experiences.