# Sora Flutter SDK 概要

Sora Flutter SDK は [株式会社時雨堂](https://shiguredo.jp) の [WebRTC SFU Sora](https://sora.shiguredo.jp) の Flutter 専用クライアントフレームワークです。

`iOS` 、 `iPadOS` 、 `macOS` 、 `Android` 、 `Windows` 、 `Linux` のクロスプラットフォームに対応しており、 WebRTC の複雑な接続処理を肩代わりする Dart API を提供します。
各プラットフォームで共通のソースコードを用いて、 Sora を利用するアプリケーションを最小限の実装で開発できます。


## プラットフォーム

| プラットフォーム | 対応状況 |
| --- | --- |
| `iOS` | iOS 16 以降に対応 |
| `iPadOS` | iPadOS 16 以降に対応 |
| `macOS` | macOS 15 以降に対応 |
| `Android` | Android 10 (API 29) 以降に対応 |
| `Windows` | 実験的対応 (Windows 10 20H2 以降 (x86_64)) |
| `Linux` | 実験的対応 (Ubuntu 24.04 (x86_64)) |
| ブラウザ | 今後対応予定 |

ここでの対応状況は、各プラットフォームで `Sora Flutter SDK` を利用したアプリケーションをビルドして実行できることを示します。
機能ごとの対応範囲や利用条件は、使用するプラットフォームと機能の説明をご確認ください。

## 主な仕様・特徴

### ピア接続処理

`SoraConnection` を介して Sora との接続を確立し、メディアチャネルの通信を管理します。
タイムアウト設定や接続状態の監視、切断後の再接続にも対応しています。

### メディアデバイス管理

`MediaDevices` API により、各プラットフォームのカメラ・マイクを統一的なインターフェースで扱えます。
音声入力デバイス、音声出力デバイス、映像入力デバイスの列挙や、 `getUserMedia()` による送信用 `MediaStream` の生成が可能です。

### 映像レンダリング

ローカル映像およびリモート映像のレンダリングは Flutter の `Texture` ウィジェットで行います。
`LocalVideoTrack` や `SoraTrackEvent` から取得した `textureId` を `Texture` に渡すだけで、プラットフォームを問わず統一された描画が得られます。

### 音声再生

受信音声は SDK と各プラットフォームの標準経路で自動的に再生されます。
アプリケーション側で音声再生用の `Widget` やプレーヤーを別途用意する必要はありません。
受信音声トラックの追加または削除の検知は `SoraConnection.events` で行えます。

### DataChannel 経由のシグナリング

WebSocket によるシグナリングに加えて、 DataChannel 経由のシグナリングに対応しています。
接続開始時は WebSocket を使い、 Sora 側の条件が揃うと DataChannel ベースのシグナリングへ切り替わります。

### リアルタイムメッセージング

DataChannel を利用したリアルタイムメッセージング機能により、同一チャネルに参加しているクライアント同士でメッセージの送受信ができます。
メッセージにはラベルを指定でき、同一チャネル内で複数種類のメッセージを扱えます。

### RPC 機能

DataChannel 経由で Sora の一部 HTTP API をクライアント側から呼び出せます。
接続確立後に `SoraConnection.rpc()` で利用可能なメソッドを呼び出し、サイマルキャストの視聴画質変更などが行えます。

### 外部映像入力

SDK 管理のカメラ入力の代わりに、アプリケーション側で用意した任意の映像フレームを送信できます。
画面キャプチャ、動画ファイル再生、合成映像、テストパターンなど、カメラ以外の映像ソースを扱う場合に利用します。

### イベント通知

`SoraConnection.events` で接続状態の変化、リモートトラックの追加/削除、シグナリング通知、DataChannel メッセージ、タイムアウトなどを統合的に購読できます。
`SoraConnection.debugEvents` では構造化されたログとタイムラインを購読でき、デバッグに役立ちます。

## 非対応の機能

次の機能は現時点では非対応です。

- 音声のステレオ送受信 ( Sora の実験的機能である Opus の詳細パラメータで `stereo` を指定する場合を除く)
- 端末のカメラ・マイクのプライバシーインジケーターを消灯させるミュート
- リモート音声ごとの再生音量変更
- 再生先スピーカーの明示的な切り替え
- `TURN` 機能を無効にした接続 ( `turn = false` )
- 自己署名証明書

## ソースコード


## 開発者ツール


## 問い合わせについて

Sora Flutter SDK の質問などについては Discord の `#sora-sdk-faq` チャンネルにお願いします。
ただし、 Sora のライセンス契約の有無に関わらず、応答時間と問題の解決を保証しませんのでご了承ください。



Sora Flutter SDK に対する有償のサポートについては提供しておりません。

またビルドやパッケージングに関する質問に対しては、コミュニティ管理者は回答は行いません。
