Thanks to visit codestin.com
Credit goes to github.com

Skip to content

nrg-uw/Video-Streaming

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

230 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ecn-pion

Lightweight project that enables evaluation of classical and L4S-compliant congestion control algorithms (CCAs) on an emulated 5G testbed with real-world channel traces. The project supports testing various congestion control schemes:

  • Classical CCAs: CUBIC, BBR, and other standard TCP algorithms
  • L4S-compliant CCAs: UDP Prague and SCReAM (with ECN support)

The project includes a WebRTC-based video streaming stack that encodes video and transmits it over the emulated cellular link. The video stack supports dual bandwidth controllers:

  • GCC (Google Congestion Control)
  • SCReAM with ECN support for L4S marking

All components are composed as Go submodules for seamless integration and explicit congestion notification (ECN) processing.

Getting started

Prerequisites

This project requires an end-to-end 5G testbed to function properly. You'll need to set up:

tmux is required by testbed/launch.sh to manage the gNB, UE, UPF, receiver, and orchestration panes. Install it with:

sudo apt-get update
sudo apt-get install -y tmux

If you want a nicer tmux setup, see Oh My Tmux!.

1. Clone the repository with submodules:

git clone --recurse-submodules https://github.com/nrg-uw/Video-Streaming.git

Fetch all submodules branches:

git submodule foreach 'git fetch --all'

2. Build dependencies

Install the required build dependencies for the srsRAN Project gNB and the srsRAN 4G UE by following the official srsRAN documentation:

This testbed uses the ZMQ-based gNB / UE flow, so make sure your srsRAN environment includes the ZeroMQ-related dependencies as documented there. The standalone scream and udp_prague builds only require standard C++ build tools (cmake / make / g++).

3. Set up the 5G core network

The shortest path for deploying the core network is to first clone and install the testbed automator, which sets up the required dependencies for the core deployment, including Kubernetes:

Reference repository: https://github.com/niloysh/testbed-automator/tree/628abb81c0778a882c72d7b4691730ee7477e4f7

git clone https://github.com/niloysh/testbed-automator.git
cd testbed-automator

# Run the installation script
./install.sh

Then deploy the core and add subscribers from open5gs-k8s/:

cd open5gs-k8s
./deploy-core.sh
./add-cots-subscribers.sh
./add-sim-subscribers.sh

That is enough to bring up the core network for this testbed. For the full Open5GS and Kubernetes setup details, see open5gs-k8s/README.md.

To remove the deployed core later, use open5gs-k8s/remove-core.sh.

4. Build the 5G RAN components

Build the srsRAN Project gNB

Create a build directory in srsRAN_Project with ZMQ enabled:

cd srsRAN_Project
cmake -S . -B build \
	-DENABLE_ZEROMQ=ON \
	-DBUILD_TESTS=OFF \
	-DCMAKE_CXX_COMPILER=/usr/bin/g++-11
cd build
make -j $(nproc)
Build the srsRAN 4G UEs

Build srsue with ZMQ enabled and unnecessary components disabled:

cd srsRAN_4G
cmake -S . -B build \
	-DENABLE_SRSUE=ON \
	-DENABLE_SRSENB=OFF \
	-DENABLE_SRSEPC=OFF \
	-DENABLE_ZEROMQ=ON \
	-DENABLE_GUI=OFF
cd build
make -j $(nproc)

5. Build standalone congestion-control binaries

These builds are optional and only needed if you want to test with standalone udp_prague or standalone scream outside the WebRTC video pipeline.

Build standalone SCReAM:

cd scream
mkdir bin
cd bin
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 ../
make -j $(nproc)

Build UDP Prague:

cd udp_prague
make -j $(nproc)

6. Configure network interfaces

Set up the n3 bridge for communication between the N3 interface and your host machine:

# Setup n3br interface
sudo ip address add 10.10.3.231/24 dev n3br
sudo ip link set n3br up

# Enable traffic routing to UEs from the host machine
sudo ip route add 10.0.41.0/16 via 10.10.3.1 dev n3br
sudo ip route add 10.0.42.0/16 via 10.10.3.2 dev n3br

7. Create configuration file

Create a config.json file based on the template. For detailed information about all available configuration options, refer to testbed/parameters/README.md:

cd testbed
cp parameters/template.json config.json
# Edit config.json with your specific settings

8. Run the testbed

Launch the testbed with your configuration:

cd testbed
# the result of the experiment will be populated here
mkdir experiments
./launch.sh -c config.json

Running batch experiments

For running multiple experiments with different configurations, refer to testbed/README.md for instructions on using batch experiments.

About

ECN capable video streaming stack

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors