A Python library containing supporting code for running SRT tests based on the experiment config. SRT stands for Secure Reliable Transport and is an open source transport technology that optimizes streaming performance across unpredictable networks, such as the Internet. This is the next generation and improved version of srt-test-runner script written in a form of library.
An example of a single experiment, consisting of a defined set of steps, is the following:
-
Start
tsharkon the SRT sender side, -
Start
tsharkon the SRT receiver side, -
Start the SRT receiver,
-
Start the SRT sender,
-
Wait for the specified time to have SRT sender and receiver connected and SRT streaming finished,
-
Collect the experiment artefacts (SRT
.csvstatistics,tshark.pcapngdumps) to the machine where the script is running.
Running the tasks is implemented both locally and remotely so that the following combinations are possible: local-local, local-remote and remote-remote setup. All the implemented configs as well as the detailed documentation can be found in configs folder. Here is an example of the remote-remote config where tshark and srt-xtransmit applications are started consequtively on 2 remote machines (virtual machines in the cloud or regular machines), the SRT transmission is happening and once finished the experiment artefacts are collected to the machine where the script is running.
The SingleExperimentRunner class, see srt_utils/runners.py, implements the logic of running a single experiment based on the experiment config. An example of the SingleExperimentRunner class usage can be found in scripts/experiment_runner.py script designed to run a single experiment.
An implementation of the TestRunner class responsible for running a single test (a set of experiments executed in a consecutive order with the different input parameters) is planned for future. The same experiment example as above, however, the same steps are performed several times, e.g., to test SRT live streaming mode with different values of bitrate. In this case, bitrate value is that particular input parameter that is changed from experiment to experiment during the test.
Important to note, that currently only tshark and srt-xtransmit test application are supported. srt-live-transmit and other applications can be added by request.
- python 3.6+
- tshark, setting up tshark is described in SRT Cookbook and srt-test-runner documentation
- ssh-agent, setting up SSH keys and ssh-agent is described in SRT Cookbook
- srt-xtransmit test application
For development, it is recommended
- To use
venvfor virtual environments andpipfor installing the library and any dependencies. This ensures the code and dependencies are isolated from the system Python installation, - To install the library in “editable” mode by running from the same directory
pip install -e .. This lets changing the source code (both tests and library) and rerunning tests against library code at will. For regular installation, usepip install ..
As soon as the library is installed, you can run modules directly
venv/bin/python -m srt_utils.module --help
or use preinstalled executable scripts
venv/bin/script --help
Install with pip (a venv is recommended), using pip's VCS requirement specifier
pip install 'git+https://github.com/mbakholdina/lib-srt-utils.git@v0.1#egg=srt_utils'
or simply put the following row in requirements.txt
git+https://github.com/mbakholdina/lib-srt-utils.git@v0.1#egg=srt_utils
Remember to quote the full URL to avoid shell expansion in case of direct installation.
This installs the version corresponding to the git tag 'v0.1'. You can replace that with a branch name, a commit hash, or a git ref as necessary. See the pip documentation for details.
As soon as the library is installed, you can import the whole library
import srt_utils
or a particular module
import srt_utils.module as module
Running unit tests:
venv/bin/pytest --pyargs srt_utils
venv/bin/python -m pytest --pyargs srt_utils
Running modules, e.g. module.py:
venv/bin/python -m srt_utils.module
Starting SSH-agent:
eval "$(ssh-agent -s)"
ssh-add -K ~/.ssh/id_rsa
As mentioned above, running the tasks is implemented both locally and remotely so that the following combinations are possible:
- local-local: the script is running on the local machine,
thark(single instance), SRT receiver and SRT sender are running on the same local machine, - local-remote: the script is running on the local machine,
tharkand SRT receiver are running on the remote machine, anothertsharkand SRT sender are running on the local machine where the script is running, - and remote-remote setup: the script is running on a separate local machine,
tharkand SRT receiver are running on the first remote machine, anothertsharkand SRT sender are running on the second remote machine.
-
MacOS / Ubuntu / CentOS (local-local)
-
MacOS → MacOS / Ubuntu / CentOS (local-remote)
-
MacOS → Ubuntu + Ubuntu / CentOS + CentOS (remote-remote)
-
CentOS / Ubuntu → MacOS / Ubuntu / CentOS (local-remote) - to be tested
-
MacOS → MacOS + MacOS (remote-remote) - to be tested
-
CentOS / Ubuntu → MacOS + MacOS / Ubuntu + Ubuntu / CentOS + CentOS (remote-remote) - to be tested
-
Any combinations with Windows - to be tested, there is no support for Windows implemented.
-
Generate SSH key on the machine where the script will be launched and copy it to the remote machines for the script to connect to them and run the tasks via SSH. See the instructions in SRT Cookbook.
-
Install and set up
tsharkon both machines. The guidelines can be found here. -
Build srt-xtransmit or any other test application required for running a particular experiment config on both machines.
-
On the local machine where the script is going to be executed, create the directory for the
lib-srt-utilsproject and clone the source code in it:mkdir -p projects/srt/lib-srt-utils cd projects/srt git clone https://github.com/mbakholdina/lib-srt-utils.git lib-srt-utils -
On the local machine, install
lib-srt-utilslibrary as per "Install the library with pip" section:cd lib-srt-utils python3 -m venv venv venv/bin/pip install -e . -
Update the experiment config as required. A set of predifend configs and appropriate documentaion can be found in
configsfolder. -
On the local machine, start
ssh-agentin the background and add your SSH private key generated at Step 1 to thessh-agent. Without doing this, the script will raise an exceptionparamiko.ssh_exception.SSHException. -
Now you are ready to run the script.
All the implemented scripts can be found in scripts folder.
Script designed to run a single experiment based on the experiment config. Configs can be found in ./configs folder.
Example of execution:
venv/bin/python -m scripts.experiment_runner --resultsdir _experiment_results configs/lore_xtransmit_live.json
Script-helper designed to move experiment results from subfolders to a root folder corresponding to a particular experiment. Run
venv/bin/python -m scripts.rename_folders --help
to get full decsription, example of execution, and the list of options.