ใช้ SDK นี้เพื่อเพิ่มฟีเจอร์วิดีโอ เสียง และข้อมูลแบบเรียลไทม์ให้กับแอป Rust ของคุณ ด้วยการเชื่อมต่อกับ LiveKit Cloud หรือเซิร์ฟเวอร์ที่โฮสต์เอง คุณสามารถสร้างแอปพลิเคชันต่างๆ เช่น AI หลายรูปแบบ การสตรีมสด หรือแฮงเอาท์วิดีโอได้อย่างรวดเร็วด้วยโค้ดเพียงไม่กี่บรรทัด
กำลังรับแทร็ก
กำลังเผยแพร่แทร็ก
ช่องทางข้อมูล
ซิมัลคาสต์
โคเดก SVC (AV1/VP9)
สตรีมมิ่งแบบปรับได้
ไดนาคาสท์
การเข้ารหัสวิดีโอฮาร์ดแวร์/ธันวาคม
กล่องเครื่องมือวิดีโอสำหรับ MacOS/iOS
แพลตฟอร์มที่รองรับ
หน้าต่าง
แมคโอเอส
ลินุกซ์
ไอโอเอส
หุ่นยนต์
livekit-api
: API ของเซิร์ฟเวอร์และการสร้างโทเค็นการตรวจสอบสิทธิ์
livekit
: SDK เรียลไทม์ LiveKit
livekit-ffi
: ลังภายใน ใช้เพื่อสร้างการเชื่อมโยงสำหรับภาษาอื่น
livekit-protocol
: รหัสที่สร้างโปรโตคอล LiveKit
เมื่อเพิ่ม SDK เป็นการพึ่งพาให้กับโปรเจ็กต์ของคุณ ตรวจสอบให้แน่ใจว่าได้เพิ่ม rustflags
ที่จำเป็นให้กับการกำหนดค่าสินค้าของคุณ ไม่เช่นนั้นการลิงก์อาจล้มเหลว
นอกจากนี้ โปรดดูรายการชุดเครื่องมือแพลตฟอร์มที่รองรับ
ปัจจุบัน Tokio จำเป็นต้องใช้ SDK นี้ แต่เราวางแผนที่จะทำให้รันไทม์ของตัวดำเนินการ async ไม่เชื่อเรื่องพระเจ้า
ใช้ livekit_api::access_token;use std::env;fn create_token() -> Result{let api_key = env::var("LIVEKIT_API_KEY").expect("LIVEKIT_API_KEY is not set") ; ให้ 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: จริง ห้อง: "ห้องของฉัน".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!("สร้างแล้ว ห้อง: {:?}", ห้อง);}
ใช้ livekit::prelude::*;#[tokio::main]async fn main() -> Result<()> {let (room, mut room_events) = Room::connect(&url, &token).await?; ในขณะที่ปล่อยให้ Some(event) = room_events.recv().await {match event {RoomEvent::TrackSubscribed { track, allowances, participant } => {// ...__ => {}}}ตกลง(())}
...ใช้ฟิวเจอร์ส::StreamExt; // ลักษณะนี้จำเป็นสำหรับการวนซ้ำเฟรมเสียงและวิดีโอใช้ 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::วางไข่(async ย้าย {// รับเฟรมเสียงในงานใหม่ในขณะที่ให้ 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();ให้ mut video_stream = NativeVideoStream::new(rtc_track);tokio::spawn(async move {// รับเฟรมวิดีโอในงานใหม่ในขณะที่ปล่อยให้ Some(video_frame) = video_stream.next().await {log::info!("received video frame - {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 แบบเรียลไทม์ | ส่วนประกอบการโต้ตอบ · เบราว์เซอร์ · ส่วนประกอบ 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 |
ทรัพยากร | เอกสาร · แอปตัวอย่าง · คลาวด์ · โฮสติ้งด้วยตนเอง · CLI |