Skip to content

Repository files navigation

LiveKit Java SDK

English | 简体中文

Java client SDK for LiveKit real-time communication platform.

Features

  • Room Management - Join/leave rooms, handle participants and tracks
  • WebRTC Integration - Audio/video publishing and subscribing via webrtc-java
  • Data Channels - Reliable and lossy data messaging
  • E2EE - End-to-end encryption for data channels (AES-GCM with key ratcheting)
  • Auto Reconnection - Automatic reconnection with exponential backoff
  • Network Monitoring - Resume tokens and network change detection

Requirements

  • Java 21+
  • Gradle 9.x (included via wrapper)

Installation

Gradle (Kotlin DSL)

repositories {
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
dependencies {
// Full SDK with WebRTC support
implementation("com.github.Trirrin.livekit-java-sdk:rtc:v0.1.0")
// Or signaling only (no audio/video)// implementation("com.github.Trirrin.livekit-java-sdk:signaling:v0.1.0")
}

Gradle (Groovy)

repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.Trirrin.livekit-java-sdk:rtc:v0.1.0'
}

Maven

<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github.Trirrin.livekit-java-sdk</groupId>
<artifactId>rtc</artifactId>
<version>v0.1.0</version>
</dependency>
</dependencies>

Quick Start

importio.livekit.sdk.Room;
importio.livekit.sdk.RoomOptions;
importio.livekit.sdk.RoomListener;
importio.livekit.sdk.signaling.LiveKitClient;
publicclassExample {
publicstaticvoidmain(String[] args) {
RoomOptionsoptions = newRoomOptions();
LiveKitClientclient = newLiveKitClient(options);
Roomroom = client.getRoom();
room.addListener(newRoomListener() {
@OverridepublicvoidonConnected(Roomr) {
System.out.println("Connected to room: " + r.getName());
}
@OverridepublicvoidonParticipantConnected(Roomr, RemoteParticipantparticipant) {
System.out.println("Participant joined: " + participant.getIdentity());
}
// ... other callbacks
});
client.connect("wss://your-server.livekit.cloud", "your-access-token");
}
}

Examples

The examples module includes working examples:

ExampleDescription
BasicRoomExampleJoin room and handle events
PublishExamplePublish audio/video tracks
SubscribeExampleSubscribe to remote tracks
DataChannelExampleInteractive data messaging

Run examples:

export LIVEKIT_URL=wss://your-server.livekit.cloud
export LIVEKIT_TOKEN=your-access-token
./gradlew :examples:run

Documentation

Project Structure

livekit-java-sdk/
├── protocol/ # Protobuf definitions and generated classes
├── core/ # Room, Participant, Track, E2EE APIs
├── signaling/ # WebSocket signaling client
├── rtc/ # WebRTC integration
├── examples/ # Usage examples
└── docs/ # Documentation

Building

# Build all modules
./gradlew build
# Run tests
./gradlew test# Format code
./gradlew spotlessApply
# Publish to local repository
./gradlew publishToMavenLocal

E2EE (End-to-End Encryption)

Data channel encryption is supported via E2EEManager:

importio.livekit.sdk.e2ee.E2EEManager;
importio.livekit.sdk.e2ee.BaseKeyProvider;
BaseKeyProviderkeyProvider = newBaseKeyProvider();
keyProvider.setSharedKey(secretKeyBytes);
E2EEManagere2ee = newE2EEManager(keyProvider);
byte[] encrypted = e2ee.encryptData(plaintext, participantId);
byte[] decrypted = e2ee.decryptData(encrypted, participantId);

Note: Media track E2EE requires FrameCryptor API which is not yet exposed by webrtc-java.

Known Limitations

  • Screen sharing not yet exposed (webrtc-java supports it)
  • Simulcast/SVC layer selection not implemented
  • Media track E2EE blocked by webrtc-java library limitation

License

Apache License 2.0

Links

About

A LiveKit Client SDK for JAVA

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages