使用此 SDK 為您的 Rust 應用程式添加即時視訊、音訊和數據功能。透過連接LiveKit Cloud或自託管伺服器,您只需幾行程式碼即可快速建立多模態AI、直播或視訊通話等應用程式。
接收曲目
發布曲目
數據通道
聯播
SVC 編解碼器 (AV1/VP9)
自適應串流媒體
Dynacast
硬體視訊編碼/解碼
適用於 MacOS/iOS 的 VideoToolbox
支援的平台
視窗
蘋果系統
Linux
iOS系統
安卓
livekit-api
:伺服器 API 和驗證令牌生成
livekit
: LiveKit實時SDK
livekit-ffi
:內部板條箱,用於產生其他語言的綁定
livekit-protocol
: LiveKit 協定產生的程式碼
將 SDK 作為依賴項新增至專案時,請確保將必要的rustflags
新增至貨物配置中,否則連結可能會失敗。
另外,請參閱支援的平台工具包清單。
目前,Tokio 需要使用此 SDK,但我們計劃使非同步執行器在運行時不可知。
use livekit_api::access_token;use std::env;fn create_token() -> Result{let api_key = env::var("LIVEKIT_API_KEY").expect("LIVEKIT_API_KEY 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_ident::AccessToken::with_api_key(&api_key, &api_secret).with_identity("r-namebot"). Rust Bot").with_grants(access_token::VideoGrants { room_join: true, room: "my-room".to_string(), ..Default::default()}).to_jwt();回傳令牌}
使用 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 { track,publication,participant } => {// ...}_ => {}}}Ok(()) }
……使用 futures::StreamExt; // 在音訊和視訊畫面上迭代需要此特徵use livekit::prelude::*;match event {RoomEvent::TrackSubscribed { track,publication,participant } => {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 {// 在新任務中接收音訊幀while let Some(audio_frame) = ext ( ).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 {// 在新任務中接收視訊框架while let Some(video_frame) = video_stream.next().await {log::info! ("收到視訊訊框 - {video_frame:#?}");}});},}},_ => {}}
基本房間:連接到房間的簡單範例。
wgpu_room:使用 wgpu 和 egui 進行視訊渲染的完整範例應用程式。
mobile:針對 iOS 和 Android 的行動應用程式
play_from_disk:從 wav 檔案發布音頻
save_to_disk:將接收到的音訊儲存到 wav 文件
LiveKit 旨在提供一個可在任何地方使用的開源、端對端的 WebRTC 堆疊。我們對此 SDK 有兩個目標:
為 Rustaceans 建立獨立的跨平台 LiveKit 用戶端 SDK。
為其他特定平台的 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 (web) · Unity (beta) |
伺服器API | Node.js · Golang · Ruby · Java/Kotlin · Python · Rust · PHP(社群) |
代理框架 | Python是場 |
服務 | LiveKit 伺服器·出口·入口·SIP |
資源 | 文件 · 範例應用程式 · 雲端 · 自託管 · CLI |