Используйте этот SDK, чтобы добавить функции видео, аудио и данных в реальном времени в ваше приложение Rust. Подключившись к LiveKit Cloud или локальному серверу, вы можете быстро создавать такие приложения, как мультимодальный искусственный интеллект, прямая трансляция или видеозвонки, с помощью всего лишь нескольких строк кода.
Получение треков
Публикация треков
Каналы передачи данных
Одновременная передача
Кодеки SVC (AV1/VP9)
Адаптивная потоковая передача
Динакаст
Аппаратное кодирование/декодирование видео
VideoToolbox для MacOS/iOS
Поддерживаемые платформы
Окна
MacOS
Линукс
iOS
Андроид
livekit-api
: API-интерфейсы сервера и генерация токенов аутентификации.
livekit
: LiveKit SDK реального времени.
livekit-ffi
: внутренний ящик, используемый для создания привязок для других языков.
livekit-protocol
: код, сгенерированный протоколом LiveKit.
Добавляя SDK в качестве зависимости к вашему проекту, обязательно добавьте необходимые rustflags
в вашу конфигурацию груза, иначе связывание может завершиться неудачно.
Также ознакомьтесь со списком поддерживаемых наборов инструментов платформы.
В настоящее время компания Tokio обязана использовать этот SDK, однако мы планируем сделать асинхронный исполнитель независимым от среды выполнения.
используйте livekit_api::access_token;use std::env;fn create_token() -> Result{let api_key = env::var("LIVEKIT_API_KEY").expect("LIVEKIT_API_KEY не установлен") ;let api_secret = env::var("LIVEKIT_API_SECRET").expect("LIVEKIT_API_SECRET не установлен");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}
используйте 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!("Созданная комната: {:?}", room);}
используйте 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 {трек, публикация, участник } => {// ...}_ => {}}}Ok(()) }
...используйте фьючерсы::StreamExt; // эта черта необходима для перебора аудио- и видеокадров. Используйте livekit::prelude::*;match event {RoomEvent::TrackSubscribed { track, публикация, участник } => {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 {// Получите аудиокадры в новой задаче, в то время как let Some(audio_frame) = audio_stream.next( ).await {log::info!("полученный аудиокадр - {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 {// Получите видеокадры в новой задаче, пока let Some(video_frame) = video_stream.next().await {log::info!(" полученный видеокадр - {video_frame:#?}");}});},}},_ => {}}
базовая комната: простой пример соединения с комнатой.
wgpu_room: полный пример приложения с рендерингом видео с использованием wgpu и egui.
мобильные устройства: мобильное приложение для iOS и Android.
play_from_disk: опубликовать аудио из WAV-файла.
save_to_disk: сохранить полученный звук в WAV-файл.
LiveKit стремится предоставить сквозной стек WebRTC с открытым исходным кодом, который работает везде. Создавая этот SDK, мы преследуем две цели:
Создайте автономный кроссплатформенный клиентский SDK LiveKit для Rustaceans.
Создайте общее ядро для других SDK, специфичных для платформы (например, Unity, Unreal, iOS, Android).
Что касается (2), мы уже разработали ряд клиентских SDK для нескольких платформ и столкнулись с несколькими проблемами в процессе:
В нашем протоколе сигнализации и WebRTC содержится значительное количество бизнес-логики и логики управления. В настоящее время эту логику необходимо реализовать в каждой новой платформе, которую мы поддерживаем.
Взаимодействие с мультимедийными устройствами и кодирование/декодирование специфичны для каждой платформы и платформы.
Для мультиплатформенных фреймворков (например, Unity, Flutter, React Native) вышеупомянутые задачи оказались крайне болезненными.
Таким образом, мы предположили, что Rust SDK, который мы все равно хотели создать, инкапсулирующий всю нашу бизнес-логику и API-интерфейсы для конкретной платформы в чистый набор абстракций, также может послужить основой для других наших SDK!
Сначала мы будем использовать его в качестве основы для нашего Unity SDK (в стадии разработки), но со временем он станет основой и для других наших SDK.
Экосистема LiveKit | |
---|---|
SDK реального времени | Компоненты React · Браузер · Компоненты Swift · iOS/macOS/visionOS · Android · Flutter · React Native · Rust · Node.js · Python · Unity (веб) · Unity (бета) |
Серверные API | Node.js · Golang · Ruby · Java/Kotlin · Python · Rust · PHP (сообщество) |
Фреймворки агентов | Питон · Детская площадка |
Услуги | Сервер LiveKit · Выходной · Входной · SIP |
Ресурсы | Документы · Примеры приложений · Облако · Самостоятельный хостинг · Интерфейс командной строки |