| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
This page covers how to build and install the LiveKit C++ Client SDK for real-time audio/video communication.
Platform-Specific Requirements:
Note: If the SDK was built with Protobuf 6.0+, you also need libabsl-dev (Linux) or abseil (macOS).
Make sure to initialize the Rust submodule (client-sdk-rust):
# Option 1: Clone with submodules in one step
git clone --recurse-submodules https://github.com/livekit/client-sdk-cpp.git
# Option 2: Clone first, then initialize submodules
git clone https://github.com/livekit/client-sdk-cpp.git
cd client-sdk-cpp
git submodule update --init --recursiveLinux/macOS:
./build.sh clean # Clean CMake build artifacts
./build.sh clean-all # Deep clean (C++ + Rust + generated files)
./build.sh debug # Build Debug version
./build.sh release # Build Release version
./build.sh debug-tests # Build Debug with tests
./build.sh release-tests # Build Release with testsWindows
cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE="$PWD/vcpkg/scripts/buildsystems/vcpkg.cmake" # Generate Makefiles in build folder
# Build (Release or Debug)
cmake --build build --config Release
# or:
cmake --build build --config Debug
# Clean CMake build artifacts
Remove-Item -Recurse -Force buildNote (Windows), This assumes vcpkg is checked out in the repo root at .\vcpkg. You must install protobuf via vcpkg (so CMake can find ProtobufConfig.cmake and protoc), for example:
.\vcpkg\vcpkg install protobuf:x64-windowsWindows:
.\build.cmd clean # Clean CMake build artifacts
.\build.cmd clean-all # Deep clean (C++ + Rust + generated files)
.\build.cmd debug # Build Debug version
.\build.cmd release # Build Release version
.\build.cmd debug-tests # Build Debug with tests
.\build.cmd release-tests # Build Release with testsFor more control and platform-specific builds, see the detailed instructions in README_BUILD.md.
Prerequisites (Windows only):
# Windows PowerShell
$env:VCPKG_ROOT = "C:\path\to\vcpkg"Prerequisites (Linux/macOS):
Quick start:
# Windows
cmake --preset windows-release
cmake --build --preset windows-release
# Linux
cmake --preset linux-release
cmake --build --preset linux-release
# macOS
cmake --preset macos-release
cmake --build --preset macos-release📖 For complete build instructions, troubleshooting, and platform-specific notes, see README_BUILD.md
Before running any participant, create JWT tokens with the proper identity and room name, example
lk token create -r test -i your_own_identity --join --valid-for 99999h --dev --room=your_own_room./build/examples/SimpleRoom --url $URL --token <jwt-token>You can also provide the URL and token via environment variables:
export LIVEKIT_URL=ws://localhost:7880
export LIVEKIT_TOKEN=<jwt-token>
./build/examples/SimpleRoomEnd-to-End Encryption (E2EE) You can enable E2E encryption for the streams via --enable_e2ee and --e2ee_key flags, by running the following cmds in two terminals or computers. Note, jwt_token needs to be different identity
./build/examples/SimpleRoom --url $URL --token <jwt-token> --enable_e2ee --e2ee_key="your_key"Note, all participants must use the exact same E2EE configuration and shared key. If the E2EE keys do not match between participants:
Press Ctrl-C to exit the example.
The SimpleRpc example demonstrates how to:
Before running any participant, create JWT tokens with caller, greeter and math-genius identities and room name.
lk token create -r test -i caller --join --valid-for 99999h --dev --room=your_own_room
lk token create -r test -i greeter --join --valid-for 99999h --dev --room=your_own_room
lk token create -r test -i math-genius --join --valid-for 99999h --dev --room=your_own_roomEvery participant is run as a separate terminal process, note --role needs to match the token identity.
./build/examples/SimpleRpc --url $URL --token <jwt-token> --role=math-geniusThe caller will automatically:
Before running any participant, create JWT tokens with caller and greeter identities and your room name.
lk token create -r test -i caller --join --valid-for 99999h --dev --room=your_own_room
lk token create -r test -i greeter --join --valid-for 99999h --dev --room=your_own_roomStart the receiver first (so it registers stream handlers before messages arrive):
./build/examples/SimpleDataStream --url $URL --token <jwt-token> On another terminal or computer, start the sender
./build/examples/SimpleDataStream --url $URL --token <jwt-token> Sender (e.g. greeter)
Receiver (e.g. caller)
The SDK includes integration and stress tests using Google Test (gtest).
Linux/macOS:
./build.sh debug-tests # Build Debug with tests
./build.sh release-tests # Build Release with testsWindows:
.\build.cmd debug-tests
.\build.cmd release-testsAfter building, run tests using ctest or directly:
# Run all tests via ctest
cd build-debug
ctest --output-on-failure
# Or run test executables directly
./build-debug/bin/livekit_integration_tests
./build-debug/bin/livekit_stress_tests
# Run specific test suites
./build-debug/bin/livekit_integration_tests --gtest_filter="*Rpc*"
./build-debug/bin/livekit_stress_tests --gtest_filter="*MaxPayloadStress*"| Executable | Description |
|---|---|
| livekit_integration_tests | Quick tests (~1-2 minutes) for SDK functionality |
| livekit_stress_tests | Long-running tests (configurable, default 1 hour) |
RPC integration and stress tests require a LiveKit server and two participant tokens:
# Required
export LIVEKIT_URL="wss://your-server.livekit.cloud"
export LIVEKIT_CALLER_TOKEN="<token with caller identity>"
export LIVEKIT_RECEIVER_TOKEN="<token with receiver identity>"
# Optional (for stress tests)
export RPC_STRESS_DURATION_SECONDS=3600 # Test duration (default: 1 hour)
export RPC_STRESS_CALLER_THREADS=4 # Concurrent caller threads (default: 4)Generate tokens for RPC tests:
lk token create -r test -i rpc-caller --join --valid-for 99999h --dev --room=rpc-test-room
lk token create -r test -i rpc-receiver --join --valid-for 99999h --dev --room=rpc-test-roombrew install cmake protobuf rustsudo apt update
sudo apt install -y cmake protobuf-compiler build-essential
curl https://sh.rustup.rs -sSf | shcd client-sdk-cpp
git fetch origin
git switch -c try-rust-main origin/main
# Sync submodule URLs and check out what origin/main pins (recursively):
git submodule sync --recursive
git submodule update --init --recursive --checkout
# Now, in case the nested submodule under yuv-sys didn’t materialize, force it explicitly:
cd ..
git -C client-sdk-rust/yuv-sys submodule sync --recursive
git -C client-sdk-rust/yuv-sys submodule update --init --recursive --checkout
# Sanity check:
git submodule status --recursivecargo clean -p yuv-sys
cargo build -p yuv-sys -vvIn some cases, you may need to perform a full clean that deletes all build artifacts from both the Rust and C++ folders:
./build.sh clean-allCPP SDK is using clang C++ format
brew install clang-format| Back | FazBrowse Home | New Git URL |