This repository contains simulation and visualization scripts for running RTP over QUIC with different congestion control settings.
The test environment is loosely based on RFC 8867, but currently only the first test case is implemented.
The test uses Mininet to setup the simulation environment and Linux tc
to simulate delay and different bandwidths.
The RTP over QUIC implementation is included as a Git submodule. It uses SCReAM as real-time media congestion control and Gstreamer for video coding.
- Make sure to install Mininet, Gstreamer, Golang and a C/C++ Compiler.
- Pull Git submodules.
- Build RTP over QUIC:
cd
into thertp-over-quic
directory and rungo build
- Run
./main.py
(use-h
for a list of options) (this will run the tests and create various logfiles indata/
) - Run
./plot.py
(use-h
for al ist of options) or./plot.sh
to visualize the results.
If you want to configure different tests, check out the implementations.json
file.
Here are some sample results for the four default configurations. All tests use QUIC Datagrams to send RTP packets. The test uses a sequence from Sintel.
Sends RTP over UDP using SCReAM for reference/comparison with QUIC.
Use SCReAM congestion control for RTP. SCReAM runs at the application layer, QUIC's congestion control is disabled.
Use SCReAM congestion control for RTP. SCReAM runs at the application layer and QUIC's NewReno congestion control is enabled.
Use SCReAM congestion control for RTP. SCReAM runs at the application layer and QUIC's NewReno congestion control is enabled. Next to sending the RTP Datagrams, the application also opens a QUIC stream to send. The data sent on the stream is only congestion controlled by the same NewReno controller.
Use SCReAM congestion control for RTP. SCReAM runs at the application layer, QUIC's congestion control is disabled. Instead of using RTCP, congestion control feedback is collected from QUIC connection statistics.
Use SCReAM congestion control for RTP. SCReAM runs at the application layer and QUIC's NewReno congestion control is enabled. Instead of using RTCP, congestion control feedback is collected from QUIC connection statistics.
Use SCReAM congestion control for RTP. SCReAM runs at the application layer and QUIC's NewReno congestion control is enabled. Next to sending the RTP Datagrams, the application also opens a QUIC stream to send. The data sent on the stream is only congestion controlled by the same NewReno controller. Instead of using RTCP, congestion control feedback is collected from QUIC connection statistics.