Verwenden Sie dieses SDK, um Ihrer Rust-App Echtzeit-Video-, Audio- und Datenfunktionen hinzuzufügen. Durch die Verbindung mit LiveKit Cloud oder einem selbst gehosteten Server können Sie mit nur wenigen Codezeilen schnell Anwendungen wie multimodale KI, Live-Streaming oder Videoanrufe erstellen.
Empfang von Titeln
Veröffentlichung von Titeln
Datenkanäle
Simulcast
SVC-Codecs (AV1/VP9)
Adaptives Streaming
Dynacast
Hardware-Video-Enc/Dec
VideoToolbox für MacOS/iOS
Unterstützte Plattformen
Windows
MacOS
Linux
iOS
Android
livekit-api
: Server-APIs und Authentifizierungstoken-Generierung
livekit
: LiveKit-Echtzeit-SDK
livekit-ffi
: Interne Kiste, die zum Generieren von Bindungen für andere Sprachen verwendet wird
livekit-protocol
: Vom LiveKit-Protokoll generierter Code
Wenn Sie das SDK als Abhängigkeit zu Ihrem Projekt hinzufügen, stellen Sie sicher, dass Sie die erforderlichen rustflags
zu Ihrer Cargo-Konfiguration hinzufügen, da sonst die Verknüpfung fehlschlagen kann.
Bitte beachten Sie auch die Liste der unterstützten Plattform-Toolkits.
Derzeit muss Tokio dieses SDK verwenden. Wir planen jedoch, den asynchronen Executor laufzeitunabhängig zu machen.
use livekit_api::access_token;use std::env;fn create_token() -> Result<String, access_token::AccessTokenError> {let api_key = env::var("LIVEKIT_API_KEY").expect("LIVEKIT_API_KEY is not set") ;let api_secret = env::var("LIVEKIT_API_SECRET").expect("LIVEKIT_API_SECRET ist nicht festgelegt");let token = access_token::AccessToken::with_api_key(&api_key, &api_secret).with_identity("rust-bot").with_name("Rust Bot ").with_grants(access_token::VideoGrants { room_join: true, room: "my-room".to_string(), ..Default::default()}).to_jwt();return token}
use livekit_api::services::room::{CreateRoomOptions, RoomClient};#[tokio::main]async fn main() {let room_service = RoomClient::new("http://localhost:7880").unwrap( );let room = room_service.create_room("my_room", CreateRoomOptions::default()).await.unwrap();println!("Erstellter Raum: {:?}", Raum);}
use livekit::prelude::*;#[tokio::main]async fn main() -> Result<()> {let (room, mut room_events) = Room::connect(&url, &token).await?; while let Some(event) = room_events.recv().await {match event {RoomEvent::TrackSubscribed { track, Publication, Participant } => {// ...}_ => {}}}OK(())}
...verwenden Sie Futures::StreamExt; // Diese Eigenschaft ist für die Iteration auf Audio- und Video-Frames erforderlich. Verwenden Sie livekit::prelude::*;match event {RoomEvent::TrackSubscribed { track,publication,member } => {match track {RemoteTrack::Audio(audio_track) => {let rtc_track = audio_track.rtc_track();let mut audio_stream = NativeAudioStream::new(rtc_track);tokio::spawn(async move {// Empfangen Sie die Audioframes in einer neuen Aufgabewhile let Some(audio_frame) = audio_stream.next().await {log::info!("received audio frame - {audio_frame:#?}");}});} ,RemoteTrack::Video(video_track) => {let rtc_track = video_track.rtc_track();let mut video_stream = NativeVideoStream::new(rtc_track);tokio::spawn(async move {// Empfangen Sie die Videobilder in einer neuen Aufgabewhile let Some(video_frame) = video_stream.next().await {log::info!("received video frame - {video_frame:#?}");}});},}},_ => {}}
Basisraum: einfaches Beispiel für die Verbindung zu einem Raum.
wgpu_room: vollständige Beispiel-App mit Video-Rendering mit wgpu und egui.
Mobil: mobile App für iOS und Android
play_from_disk: Audio aus einer WAV-Datei veröffentlichen
save_to_disk: Empfangenes Audio in einer WAV-Datei speichern
LiveKit zielt darauf ab, einen Open-Source-End-to-End-WebRTC-Stack bereitzustellen, der überall funktioniert. Mit diesem SDK verfolgen wir zwei Ziele:
Erstellen Sie ein eigenständiges, plattformübergreifendes LiveKit-Client-SDK für Rustaceans.
Erstellen Sie einen gemeinsamen Kern für andere plattformspezifische SDKs (z. B. Unity, Unreal, iOS, Android).
Zu (2) haben wir bereits eine Reihe von Client-SDKs für mehrere Plattformen entwickelt und sind dabei auf einige Herausforderungen gestoßen:
Unser Signalisierungsprotokoll und WebRTC enthalten eine erhebliche Menge an Geschäfts-/Kontrolllogik. Derzeit muss diese Logik in jeder neuen Plattform implementiert werden, die wir unterstützen.
Interaktionen mit Mediengeräten und Kodierung/Dekodierung sind für jede Plattform und jedes Framework spezifisch.
Für Multiplattform-Frameworks (z. B. Unity, Flutter, React Native) erwiesen sich die oben genannten Aufgaben als äußerst mühsam.
Deshalb postulierten wir ein Rust SDK, etwas, das wir sowieso erstellen wollten und das alle unsere Geschäftslogik und plattformspezifischen APIs in einem sauberen Satz von Abstraktionen kapselt, das auch als Grundlage für unsere anderen SDKs dienen könnte!
Wir werden es zunächst als Grundlage für unser Unity SDK (in Entwicklung) verwenden, aber im Laufe der Zeit wird es auch unsere anderen SDKs unterstützen.
LiveKit-Ökosystem | |
---|---|
Echtzeit-SDKs | React Components · Browser · Swift Components · iOS/macOS/visionOS · Android · Flutter · React Native · Rust · Node.js · Python · Unity (Web) · Unity (Beta) |
Server-APIs | Node.js · Golang · Ruby · Java/Kotlin · Python · Rust · PHP (Community) |
Agenten-Frameworks | Python · Spielplatz |
Dienstleistungen | LiveKit-Server · Egress · Ingress · SIP |
Ressourcen | Dokumente · Beispiel-Apps · Cloud · Selbsthosting · CLI |