LiveKit C++ SDK
Real-time audio/video SDK for C++
Loading...
Searching...
No Matches
LiveKit C++ Client SDK

Build real-time audio/video applications in C++ with LiveKit.

Note: This SDK is currently in Developer Preview. APIs may change before the stable release.

Quick Start

#include "livekit/livekit.h"
bool initializeLivekit(const std::string& url, const std::string& token) {
// Init LiveKit
livekit::initialize(livekit::LogSink::kConsole);
room_ = std::make_unique<livekit::Room>();
options.auto_subscribe = true;
options.dynacast = false;
if (!room_->Connect(url, token, options)) {
std::cerr << "Failed to connect\n";
livekit::shutdown();
return false;
}
std::cout << "Connected.\n";
// ---- Create & publish AUDIO ----
// Note: Hook up your own audio capture flow to |audioSource_|
audioSource_ = std::make_shared<livekit::AudioSource>(48000, 1, 10);
auto audioTrack = livekit::LocalAudioTrack::createLocalAudioTrack("noise", audioSource_);
audioOpts.source = livekit::TrackSource::SOURCE_MICROPHONE;
try {
audioPub_ = room_->localParticipant()->publishTrack(audioTrack, audioOpts);
std::cout << "Published audio: sid=" << audioPub_->sid() << "\n";
} catch (const std::exception& e) {
std::cerr << "Failed to publish audio: " << e.what() << "\n";
return false;
}
// ---- Create & publish VIDEO ----
// Note: Hook up your own video capture flow to |videoSource_|
videoSource_ = std::make_shared<livekit::VideoSource>(1280, 720);
auto videoTrack = livekit::LocalVideoTrack::createLocalVideoTrack("rgb", videoSource_);
videoOpts.source = livekit::TrackSource::SOURCE_CAMERA;
try {
videoPub_ = room_->localParticipant()->publishTrack(videoTrack, videoOpts);
std::cout << "Published video: sid=" << videoPub_->sid() << "\n";
} catch (const std::exception& e) {
std::cerr << "Failed to publish video: " << e.what() << "\n";
return false;
}
return true;
}
void shutdownLivekit() {
// Best-effort unpublish
try {
if (room_ && audioPub_)
room_->localParticipant()->unpublishTrack(audioPub_->sid());
if (room_ && videoPub_)
room_->localParticipant()->unpublishTrack(videoPub_->sid());
} catch (...) {
}
audioPub_.reset();
videoPub_.reset();
audioSource_.reset();
videoSource_.reset();
room_.reset();
livekit::shutdown();
}
static std::shared_ptr< LocalAudioTrack > createLocalAudioTrack(const std::string &name, const std::shared_ptr< AudioSource > &source)
static std::shared_ptr< LocalVideoTrack > createLocalVideoTrack(const std::string &name, const std::shared_ptr< VideoSource > &source)
Definition room.h:66
Definition room_event_types.h:305
std::optional< TrackSource > source
Definition room_event_types.h:325

Key Classes

Class Description
livekit::Room Main entry point - connect to a LiveKit room
livekit::RoomOptions Configuration for room connection (auto_subscribe, dynacast, etc.)
livekit::LocalParticipant The local user - publish tracks and send data
livekit::RemoteParticipant Other participants in the room
livekit::AudioSource Audio input source for publishing (sample rate, channels)
livekit::VideoSource Video input source for publishing (width, height)
livekit::LocalAudioTrack Local audio track created from AudioSource
livekit::LocalVideoTrack Local video track created from VideoSource
livekit::LocalTrackPublication Handle to a published local track
livekit::TrackPublishOptions Options for publishing (source type, codec, etc.)
livekit::AudioStream Receive audio from remote participants
livekit::VideoStream Receive video from remote participants
livekit::RoomDelegate Callbacks for room events

Installation

See the GitHub README for build instructions.

Requirements:

  • CMake ≥ 3.20
  • Rust/Cargo (latest stable)
  • Platform: Windows, macOS, or Linux

Examples

Resources