이 SDK를 사용하여 Rust 앱에 실시간 비디오, 오디오 및 데이터 기능을 추가하세요. LiveKit Cloud 또는 자체 호스팅 서버에 연결하면 단 몇 줄의 코드만으로 멀티 모달 AI, 라이브 스트리밍 또는 화상 통화와 같은 애플리케이션을 빠르게 구축할 수 있습니다.
트랙 수신 중
트랙 게시
데이터 채널
동시방송
SVC 코덱(AV1/VP9)
적응형 스트리밍
다이나캐스트
하드웨어 비디오 enc/dec
MacOS/iOS용 VideoToolbox
지원되는 플랫폼
윈도우
맥OS
리눅스
iOS
기계적 인조 인간
livekit-api
: 서버 API 및 인증 토큰 생성
livekit
: LiveKit 실시간 SDK
livekit-ffi
: 다른 언어에 대한 바인딩을 생성하는 데 사용되는 내부 상자
livekit-protocol
: LiveKit 프로토콜 생성 코드
SDK를 프로젝트에 종속성으로 추가할 때 필요한 rustflags
화물 구성에 추가해야 합니다. 그렇지 않으면 연결이 실패할 수 있습니다.
또한 지원되는 플랫폼 툴킷 목록을 참조하세요.
현재 Tokio는 이 SDK를 사용해야 하지만 비동기 실행기 런타임을 독립적으로 만들 계획입니다.
livekit_api::access_token 사용; 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 이벤트 {RoomEvent::TrackSubscribed { track, 출판, 참가자 } => {// ...}_ => {}}}Ok(()) }
...futures::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 {// 새 작업에서 오디오 프레임 수신 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 {// 새 작업에서 비디오 프레임을 수신하는 동안 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에서는 두 가지 목표를 염두에 두고 있습니다.
Rustaceans를 위한 독립형 크로스 플랫폼 LiveKit 클라이언트 SDK를 구축하세요.
다른 플랫폼별 SDK(예: Unity, Unreal, iOS, Android)에 대한 공통 코어 구축
(2)와 관련하여 우리는 이미 여러 플랫폼을 위한 여러 클라이언트 SDK를 개발했으며 그 과정에서 몇 가지 문제에 직면했습니다.
우리의 신호 프로토콜과 WebRTC에는 상당한 양의 비즈니스/제어 로직이 있습니다. 현재 이 로직은 우리가 지원하는 모든 새로운 플랫폼에서 구현되어야 합니다.
미디어 장치와의 상호 작용 및 인코딩/디코딩은 각 플랫폼 및 프레임워크에 따라 다릅니다.
다중 플랫폼 프레임워크(예: Unity, Flutter, React Native)의 경우 앞서 언급한 작업은 매우 고통스러운 것으로 나타났습니다.
따라서 우리는 모든 비즈니스 로직과 플랫폼별 API를 깔끔한 추상화 세트로 캡슐화하여 어쨌든 구축하고 싶었던 Rust SDK가 다른 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(커뮤니티) |
에이전트 프레임워크 | Python · 놀이터 |
서비스 | LiveKit 서버 · 송신 · 수신 · SIP |
자원 | 문서 · 예제 앱 · 클라우드 · 자체 호스팅 · CLI |