Utilice este SDK para agregar funciones de datos, audio y video en tiempo real a su aplicación Rust. Al conectarse a LiveKit Cloud o a un servidor autohospedado, puede crear rápidamente aplicaciones como IA multimodal, transmisión en vivo o videollamadas con solo unas pocas líneas de código.
Recibir pistas
Pistas de publicación
Canales de datos
Transmisión simultánea
Códecs SVC (AV1/VP9)
Transmisión adaptativa
transmisión dinámica
Enc/dec de vídeo por hardware
VideoToolbox para MacOS/iOS
Plataformas compatibles
ventanas
Mac OS
linux
iOS
Androide
livekit-api
: API de servidor y generación de tokens de autenticación
livekit
: SDK en tiempo real de LiveKit
livekit-ffi
: caja interna, utilizada para generar enlaces para otros idiomas
livekit-protocol
: código generado por el protocolo LiveKit
Al agregar el SDK como una dependencia a su proyecto, asegúrese de agregar las rustflags
necesarias a su configuración de carga; de lo contrario, la vinculación puede fallar.
Además, consulte la lista de kits de herramientas de plataformas compatibles.
Actualmente, se requiere que Tokio use este SDK, sin embargo, planeamos hacer que el tiempo de ejecución del ejecutor asíncrono sea independiente.
use livekit_api::access_token;use std::env;fn create_token() -> Resultado{let api_key = env::var("LIVEKIT_API_KEY").expect("LIVEKIT_API_KEY no está configurado") ;dejar api_secret = env::var("LIVEKIT_API_SECRET").expect("LIVEKIT_API_SECRET no está configurado");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: verdadero, habitación: "mi-habitación".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("mi_habitación", CreateRoomOptions::default()).await.unwrap();println!("Creado habitación: {:?}", habitación);}
use livekit::prelude::*;#[tokio::main]async fn main() -> Resultado<()> {let (room, mut room_events) = Room::connect(&url, &token).await?; while let Some(event) = room_events.recv().await {evento de coincidencia {RoomEvent::TrackSubscribed { pista, publicación, participante } => {//...}_ => {}}}De acuerdo(())}
...utilizar futuros::StreamExt; // este rasgo es necesario para iterar en marcos de audio y videouse livekit::prelude::*;match event {RoomEvent::TrackSubscribed { pista, publicación, participante } => {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 {// Recibe los cuadros de audio en una nueva tarea mientras let Some(audio_frame) = audio_stream.next().await {log::info!("recibió el cuadro de audio - {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 {// Recibe los fotogramas de vídeo en una nueva tarea mientras let Some(video_frame) = video_stream.next().await { log::info!("fotograma de vídeo recibido - {video_frame:#?}");}});},}},_ => {}}
habitación básica: ejemplo sencillo que conecta con una habitación.
wgpu_room: aplicación de ejemplo completa con renderizado de video usando wgpu y egui.
Móvil: aplicación móvil dirigida a iOS y Android.
play_from_disk: publica audio desde un archivo wav
save_to_disk: guarda el audio recibido en un archivo wav
LiveKit tiene como objetivo proporcionar una pila WebRTC de extremo a extremo de código abierto que funcione en todas partes. Tenemos dos objetivos en mente con este SDK:
Cree un SDK de cliente LiveKit independiente y multiplataforma para Rustaceans.
Cree un núcleo común para otros SDK específicos de plataformas (por ejemplo, Unity, Unreal, iOS, Android)
Con respecto a (2), ya hemos desarrollado varios SDK de clientes para varias plataformas y encontramos algunos desafíos en el proceso:
Hay una cantidad significativa de lógica comercial/de control en nuestro protocolo de señalización y WebRTC. Actualmente, esta lógica debe implementarse en cada nueva plataforma que admitimos.
Las interacciones con dispositivos multimedia y la codificación/decodificación son específicas de cada plataforma y marco.
Para los marcos multiplataforma (por ejemplo, Unity, Flutter, React Native), las tareas antes mencionadas resultaron extremadamente dolorosas.
Por lo tanto, postulamos un SDK de Rust, algo que queríamos construir de todos modos, encapsulando toda nuestra lógica de negocios y API específicas de la plataforma en un conjunto limpio de abstracciones, ¡que también podría servir como base para nuestros otros SDK!
Primero lo usaremos como base para nuestro SDK de Unity (en desarrollo), pero con el tiempo, también impulsará nuestros otros SDK.
Ecosistema LiveKit | |
---|---|
SDK en tiempo real | Componentes de React · Navegador · Componentes Swift · iOS/macOS/visionOS · Android · Flutter · React Native · Rust · Node.js · Python · Unity (web) · Unity (beta) |
API de servidor | Node.js · Golang · Ruby · Java/Kotlin · Python · Rust · PHP (comunidad) |
Marcos de agentes | Pitón · Patio de juegos |
Servicios | Servidor LiveKit · Salida · Entrada · SIP |
Recursos | Documentos · Aplicaciones de ejemplo · Nube · Autohospedaje · CLI |