This repository contains the artifacts for our ICNP'24 paper titled "Bidirectional Bandwidth Coordination under Half-Duplex Bottlenecks for Video Streaming".
Table of Contents:
The artifacts software is developed using C++ and Python3. This software requires Ubuntu 20.04.4 LTS, as it has been tested on this platform. Please ensure the following dependencies are installed on your system:
Open a terminal and execute the following commands to install cmake
, g++
and python3
:
sudo apt update
sudo apt install cmake g++ python3
cd emulation
bash ./setupenv.sh
This script would automatically download the NS 3.37 package, link our module and scratch files, and compile.
The artifacts are divided into three main sections: theoretical analysis, NS-3 Experiments and an Android program.
The Theoretical Analysis part provides a theoretical estimation for the improvement of uneven bidirectional bandwidth (Figure 4).
The NS-3 Experiments part provides the simulation code in our evaluation section (all figures in Section IV-A, IV-B, IV-C, IV-D).
The Android Program part provides our program for our real-time traffic tracker (Figure 6).
For running this code, please install seaborn
and pandas
beforehand to plot the result:
pip install seaborn pandas
pip install --upgrade seaborn
The theoretical analysis uses Tr-Game traces. Although this traceset could not be opensourced temporarily, you might use this script on any other traceset to estimate the performance improvement. The format of Tr-Game traceset is a .csv file with bandwidth (in Mbps) in its third row.
To run the script, please run the following the commands:
cd scripts
python theory-improve -n ${Number-of-clients} -b ${Bottleneck-bandwidth-in-Mbps} -a ${Application-maximum-bandwidth-in-Mbps} -k ${uplink-bandwidth/total-bandwidth} -f ${Directory-to-traceset}
The resulted figure would be saved under scripts/
directory.
Our NS-3 codes mainly include a new module videoconf
(which simulates the server and client for video streaming application under WebRTC SFU architecture) and scratch files (to run tests).
To reproduce our results, please go the evaluation/
folder and run our bash scripts:
cd evaluation
mkdir results # the session-level statistics would be saved here
mkdir results/trlogs # the real-time bitrate (collected every second) would be saved here
bash batch-run-test-trace-driven.sh # this include the experiments in Figure 11-13 (for Plum, Vanilla and TACK)
bash batch-run-test-channel-model.sh # this include the experiments in Figure 14
Before running the experiment for Figure 14, please keep our solver running in the first place. The solver uses SLSQP algorithm to solve the target bidirectional bandwidth allocations (see more details in Section III-C in our paper). The VcaServer in our videoconf module would later uses Linux IPC sockets to get these solutions.
cd scripts/solver
python solver.py -n ${Number-of-Clients}
To collect the bitrate distribution (Figure 12, Figure 14(a)), please uncomment the code line vcaClientApp->SetLogFile(...
in the scratch files (which are under emulation/scratch/
).
To reproduce the results for baseline policy LastN, please checkout to another branch lastn
. We separate the code of this baseline policy, as it involves different modifications to NS-3 original modules.
When switched to the lastn
branch, please first backup the four files (tcp-socket-base.h
, tcp-socket-base.cc
, tcp-tx-buffer.h
, tcp-tx-buffer.cc
) in emulation/ns-allinone-3.37/ns-3.37/src/internet/model/
, and replace them with our modified versions in `emulation/ns3-internet-module-replace/'.
Then, please run the setup script again to re-link the files in emulation/
. Now, to reproduce LastN results, please use our bash script above with Vanilla policy setting.
For the Android program that we use to get Figure 6, please refer to the AppTrafficRealtimeTracker/
directory. The program requires several user permissions to invoke the NetworkStatsManager
API (please see them in AppTrafficRealtimeTracker/app/src/main/AndroidManifest.xml
). You might also use our Python script scripts/traffic-tracker-processor.py
to process the collected data.
Note: We debugged the program with a Google Pixel 3 smartphone with root privilege, but running the program do not require root privilege.
For any questions or issues, please contact Jing Chen at (j-c23 (at) mails.tsinghua.edu.cn
).