使用此 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 未设置") ;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();返回令牌}
使用 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) = 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 {// 在新任务中接收视频帧 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 |