Skip to content
Werner Robitza edited this page Sep 15, 2020 · 2 revisions

StreamSim

Author Alexander M. Dethof
Co-Authors Werner Robitza, Dr. Marie-Neige Garcia
Version v0.1
Description StreamSim is a useful tool which is able to encode raw video material with different settings and stream the encoded results via pre-defined network configurations in order to insert packet loss resp. delay/jitter. The transmitted videos are decoded back and can be used to compare with the original video. It is also possible to insert the loss behaviour offline, without streaming the content over a physical network.

See example results

About the tool chain

How does it work? The toolchain is separated into five dedicated steps, which can be executed separately: video encoding, streaming, loss insertion, payload extraction and decoding. Each step stores its results in a separate folder. It is thus possible to guard all time the complete chain's process. Futher more each step is individually configureable and delivers additional features.
Which system requirements does it have? Dependent to the steps which should be processed with the tool chain, the system requirements may change. Note that the toolchain is able to support different codecs and coders. Thus the user is responsible to have the specific coders and codec installed!
How to setup? There exists no accurate install routine for the tool chain. Once you have ensured the system requirements, the chain is ready to work. To ease the setup of the required folder structure, which is used in each dedicated step, the tool chain delivers a small setup function to create the required folder structure. For practical approaches such a setup is documented in a small example.

Basic configuration concept

Required configurations This section explains the toolchain's tree-like configuration concepts and additional tricks. It is required to set the individual configuration parts, before the toolchain can be executed in order to obtain useful results. A more detailed example how to apply the configuration is given too.
Supported coders At the moment only one coder is useable in the toolchain: It's ffmpeg. But you are invited to add some more!
Supported codecs At the moment two codecs are useable in the toolchain: libx264 and libx265. But its possible to implement more!

Usage guide

Basic usage guide In basic the tool chain can be run in discrete steps or with a complete execution of all steps. Further more a dry and log mode is provided. Additionally filters can be set. Practical usage is furthermore explained in a separate example
Processing steps As explained before the toolchain works in five discrete steps, which can be separately called in individual commands.
Additional commands Besides the general usage of calling all or the individual chain's steps, further useful commands are provided, like e.g. a cleanup.

Advanced Usage

Settings options for specific steps/tools It is possible to set for each specific step individual options (so-called tool options). In the moment the API only offers an additional option, which can be called in a usual chain run or in a separate one, in order to execute these options. If more options are required, just implement them - the API is open for it.
How to use these subtools? Also the subtools, which can be called by the tool options are configureable and thus runnable in different modes. Hence an introduction is given for the specific subtool's usage.
Filtering the chain's run Sometimes it is not useful to run the chain for the complete configuration, but only for some sepcific datasets. Therefore the toolchain provides some additional filter options.

Developers guideline

Basic folder structure When working with the toolchain's folder structure it has to be separated between the folders required in the source code and the folders of a single toolchain run, which are initialized during the setup and all results are stored in.
How to implement a valid coder? At current the tool chain only supports the ffmpeg coder, but simultaneously a clear API exists to append further coders into the library in order to run the chain with other software.
How to implement a valid codec? At current the tool chain only supports two codecs, but simultaneously a clear API exists to append further ones into the library in order to run the chain with them.
Clone this wiki locally