This repository contains the source code of BBR-Copilot, an implementation based on the open-source LiteSpeed QUIC (LSQUIC) Library.
BBR-Copilot is an auxiliary mechanism designed to enhance the performance of BBR in live-streaming scenarios. Unlike previous approaches that directly modify the congestion control algorithm itself, BBR-Copilot cooperates with BBR by helping it obtain accurate bandwidth measurement samples under on-off traffic patterns. Specifically, when BBR is probing bandwidth and the transport layer is about to enter an application-limited phase, BBR-Copilot generates padding packets to prevent inaccurate bandwidth estimation. By doing so, it enables BBR to exit the Startup phase more reliably and adapt its sending rate more accurately during the ProbeBW phase.
Please cite this paper as follows:
- Xu Yan, Tong Li*, Bo Wu, Cheng Luo, Jiuxiang Zhu, Laizhong Cui: When BBR Meets Live Streaming. Frontiers of Networking Technologies (CCF ChinaNet), pp. 11-27, 2026.5.1.
The way to build BBR-Copilot is similar to LSQUIC. Please follow the instructions below (referred from the LiteSpeed Team https://github.com/litespeedtech/lsquic).
LiteSpeed QUIC (LSQUIC) Library is an open-source implementation of QUIC and HTTP/3 functionality for servers and clients. Most of the code in this distribution is used in our own products: LiteSpeed Web Server, LiteSpeed ADC, and OpenLiteSpeed.
QUIC versions v1, v2, and Internet-Draft version 29 are enabled by default. Deprecated versions ID-27 and the older "Google" QUIC versions Q043, Q046, and Q050 are still supported, but are not enabled by default.
LiteSpeed QUIC is mostly compliant to the follow RFCs:
- RFC 9000 QUIC: A UDP-Based Multiplexed and Secure Transport
- RFC 9001 Using TLS to Secure QUIC
- RFC 9002 QUIC Loss Detection and Congestion Control
- RFC 9114 HTTP/3
- RFC 9204 QPACK: Field Compression for HTTP/3
The following QUIC protocol extensions are implemented:
- RFC 9368 Compatible Version Negotiation for QUIC
- RFC 9369 QUIC Version 2
- RFC 9218 Extensible Prioritization Scheme for HTTP
- RFC 9221 An Unreliable Datagram Extension to QUIC
- RFC 9287 Greasing the QUIC Bit
- ACK Frequency
- WebTransport
Documentation is available at https://lsquic.readthedocs.io/en/latest/.
In addition, see example programs for API usage and EXAMPLES.txt for some compilation and run-time options.
To build LSQUIC, you need CMake, zlib, and BoringSSL. The example program uses libevent to provide the event loop.
BoringSSL is not packaged; you have to build it yourself. The process is
straightforward. You will need go installed.
- Clone BoringSSL by issuing the following command:
git clone https://boringssl.googlesource.com/boringssl
cd boringssl
You may need to install pre-requisites like zlib and libevent.
- Use specific BoringSSL version
git checkout 0.20250807.0
Or, just try the latest master branch.
- Compile the library
cmake . && make
Remember where BoringSSL sources are:
BORINGSSL=$PWD
If you want to turn on optimizations, do
cmake -DCMAKE_BUILD_TYPE=Release . && make
If you want to build as a library, (necessary to build lsquic itself as as shared library) do:
cmake -DBUILD_SHARED_LIBS=1 . && make
LSQUIC's http_client, http_server, and the tests link BoringSSL
libraries statically. Following previous section, you can build LSQUIC
as follows:
- Get the source code
git clone https://github.com/litespeedtech/lsquic.git
cd lsquic
git submodule update --init
- Compile the library
Statically:
# $BORINGSSL is the top-level BoringSSL directory from the previous step
cmake -DLIBSSL_DIR=$BORINGSSL .
make
As a dynamic library:
cmake -DLSQUIC_SHARED_LIB=1 -DLIBSSL_DIR=$BORINGSSL .
make
- Run tests
make test
The library and the example client and server can be built with Docker.
Initialize Git submodules:
cd lsquic
git submodule update --init
Build the Docker image:
docker build -t lsquic .
Then you can use the examples from the command line. For example:
sudo docker run -it --rm lsquic http_client -s www.google.com -p / -o version=h3
sudo docker run -p 12345:12345/udp -v /path/to/certs:/mnt/certs -it --rm lsquic http_server -c www.example.com,/mnt/certs/chain,/mnt/certs/key
The library has been tested on the following platforms:
- Linux
- i386
- x86_64
- ARM (Raspberry Pi 3)
- FreeBSD
- i386
- MacOS
- x86_64
- iOS
- ARM
- Android
- ARM
- Windows
- x86_64
Do not hesitate to report bugs back to us. Even better, send us fixes and improvements!
Have fun,
LiteSpeed QUIC Team.
Copyright (c) 2017 - 2026 LiteSpeed Technologies Inc