この SDK を使用して、リアルタイムのビデオ、オーディオ、データ機能を Rust アプリに追加します。 LiveKit Cloud またはセルフホスト型サーバーに接続すると、わずか数行のコードでマルチモーダル AI、ライブ ストリーミング、ビデオ通話などのアプリケーションを迅速に構築できます。
トラックを受信する
トラックの公開
データチャネル
同時放送
SVC コーデック (AV1/VP9)
アダプティブ ストリーミング
ダイナキャスト
ハードウェアビデオエンコーダ/デコーダ
MacOS/iOS 用 VideoToolbox
サポートされているプラットフォーム
窓
MacOS
Linux
iOS
アンドロイド
livekit-api
: サーバー API と認証トークンの生成
livekit
: LiveKit リアルタイム SDK
livekit-ffi
: 他の言語のバインディングを生成するために使用される内部クレート
livekit-protocol
: LiveKit プロトコルで生成されたコード
SDK を依存関係としてプロジェクトに追加するときは、必要なrustflags
カーゴ構成に必ず追加してください。追加しないと、リンクが失敗する可能性があります。
また、サポートされているプラットフォーム ツールキットのリストも参照してください。
現在、Tokio はこの SDK を使用する必要がありますが、async executor ランタイムを非依存にする予定です。
livekit_api::access_token を使用; std::env を使用;fn create_token() -> Result<String, access_token::AccessTokenError> {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}
use 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);}
use 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 {マッチイベント {RoomEvent::TrackSubscribed {トラック、パブリケーション、参加者 } => {// ...}_ => {}}}わかりました(())}
...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 {// 新しいタスクでビデオ フレームを受信しながら 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 では次の 2 つの目標を念頭に置いています。
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 (コミュニティ) |
エージェントのフレームワーク | パイソン・プレイグラウンド |
サービス | LiveKit サーバー · イーグレス · イングレス · SIP |
リソース | ドキュメント · サンプルアプリ · クラウド · セルフホスティング · CLI |