リファレンス

SDKの機能と互換性

プレビュー版:機能とAPIは変更される場合があります。

PDFはブラウザーの印刷ダイアログで作成します。ホスト型のエクスポートサービスではありません。

JavaScript SDKとESP32 SDKを並べて比較します。各SDKの対応状況はそれぞれ個別に記載しており、一方の対応がもう一方の対応を意味することはありません。すべてのオペレーションはサーバーが判断するため、クライアントのケイパビリティは権限ではありません。

対応マトリックス#

ケイパビリティJavaScriptESP32
タスク音声(WSS、ACK、リプレイ、再開)Supported (browser, Node)Supported
RTCオーディオPublish, subscribe, mute, playback (browser)RTC audio owner
パケットSend and receiveSend only
ストリームSend and receiveReceive only
RPCCall and handleCallee only (answers 1–4 app.* methods, replies to the original caller only); no caller
DataTrackSupported (livekit-client 2.22.3)ESP32では未対応
AgentExplicit Agent executions and read-only Agent stateExplicit Agent Control (create, get, stop)
状態、デバイス、エラー、解放Session state, quality, microphone selection, OneSay errors, closeBinding and media status, OneSay error codes, close
選択モードのメディア暗号化Conditional: where the browser can run the packaged workerUnsupported: any selected value is refused before any request

対応状況:「対応」は利用可能、「一部対応」は一方向または一つのロールのみ、「条件付き」はクライアントの環境次第です。「未対応」は明示的なエラーで拒否し、別のトランスポートで代替することはありません。SDKごとの詳細:JavaScript SDK、ESP32 SDK。

未対応と非公開#

  • JavaScriptで完全には対応していないもの:選択モードのメディア暗号化(条件付き)。
  • JavaScriptで公開しないもの:native room, track and participant objects、native token or connection material、native SDK types、an escape hatch to the native SDK。
  • ESP32で完全には対応していないもの:パケット(一部対応)、ストリーム(一部対応)、RPC(一部対応)、DataTrack(未対応)、選択モードのメディア暗号化(未対応)。
  • ESP32で公開しないもの:native room or track handles、native token or connection material、the upstream ESP32 runtime API。

RTCのライフサイクル#

  • 接続情報はControl APIが発行し、有効期間は最長60秒です。SDKは接続情報を保存せず、基盤のルームやトークンではなくOneSayのセッションを返します。
  • 失効はrevokingとして要求され、有効になった時点でrevokedになります。閉じた接続が再び開くことはありません。
  • JavaScriptのセッションの状態:connected, reconnecting, closed。再接続すると受信ハンドラーはクリアされ、SDKはサブスクリプションを元のバージョンとキーでのみ復元します。
  • メディア暗号化のモード:none, e2ee(既定はnone)。選択したモードを使えないクライアントは明示的なエラーで拒否し、ダウングレードはしません。

タスクのリカバリ#

  • JavaScript:再接続は最大5回で、上限付きの指数バックオフとジッターを使います。認証または権限のエラーの後は再試行せず、再開が拒否されるとfailで終了します。
  • ESP32:試行は最大5回で、ジッターを使い、試行ごとに使い捨てのチケットを使います。認証エラー、失効した認証情報、拒否された再開の後は再試行しません。
  • 共通:連続したACKで音声を解放し、未確認の音声だけをリプレイします。オーバーフローは明示的なclient_buffer_overflowで、黙って破棄することはありません。

制限とプライバシー#

  • 音声:16000 Hz、モノラル、pcm_s16le。JavaScriptの1メッセージは最大4096サンプルで、ESP32は既定で最大3000 ms(96000バイト)をリプレイします。
  • タスク音声で送る音声はアプリケーションが渡します。どちらのSDKも、そのためにマイクを開くことはありません。
  • ESP32の診断情報にwifi_ssid, raw_mac_address, raw_ip, raw_audio, transcript, credential, realtime_ticketが含まれることはありません。
  • RTCの接続情報は機密情報で、no-storeで返されます。SDKはこれを保存しません。
元のMarkdownを表示
# SDKのケイパビリティと互換性

JavaScript SDKとESP32 SDKを並べて比較します。各SDKの対応状況はそれぞれ個別に記載しており、一方の対応がもう一方の対応を意味することはありません。すべてのオペレーションはサーバーが判断するため、クライアントのケイパビリティは権限ではありません。

## 対応マトリックス

| ケイパビリティ | JavaScript | ESP32 |
|---|---|---|
| タスク音声(WSS、ACK、リプレイ、再開) | Supported (browser, Node) | Supported |
| RTCオーディオ | Publish, subscribe, mute, playback (browser) | RTC audio owner |
| パケット | Send and receive | Send only |
| ストリーム | Send and receive | Receive only |
| RPC | Call and handle | Callee only (answers 1–4 `app.*` methods, replies to the original caller only); no caller |
| DataTrack | Supported (`livekit-client` 2.22.3) | ESP32では未対応 |
| Agent | Explicit Agent executions and read-only Agent state | Explicit Agent Control (create, get, stop) |
| 状態、デバイス、エラー、解放 | Session state, quality, microphone selection, OneSay errors, close | Binding and media status, OneSay error codes, close |
| 選択モードのメディア暗号化 | Conditional: where the browser can run the packaged worker | Unsupported: any selected value is refused before any request |

対応状況:「対応」は利用可能、「一部対応」は一方向または一つのロールのみ、「条件付き」はクライアントの環境次第です。「未対応」は明示的なエラーで拒否し、別のトランスポートで代替することはありません。SDKごとの詳細:[JavaScript SDK](javascript-sdk-draft.md)、[ESP32 SDK](esp32-sdk.md)。

## 未対応と非公開

- JavaScriptで完全には対応していないもの:選択モードのメディア暗号化(条件付き)。
- JavaScriptで公開しないもの:native room, track and participant objects、native token or connection material、native SDK types、an escape hatch to the native SDK。
- ESP32で完全には対応していないもの:パケット(一部対応)、ストリーム(一部対応)、RPC(一部対応)、DataTrack(未対応)、選択モードのメディア暗号化(未対応)。
- ESP32で公開しないもの:native room or track handles、native token or connection material、the upstream ESP32 runtime API。

## RTCのライフサイクル

- 接続情報はControl APIが発行し、有効期間は最長60秒です。SDKは接続情報を保存せず、基盤のルームやトークンではなくOneSayのセッションを返します。
- 失効は`revoking`として要求され、有効になった時点で`revoked`になります。閉じた接続が再び開くことはありません。
- JavaScriptのセッションの状態:`connected`, `reconnecting`, `closed`。再接続すると受信ハンドラーはクリアされ、SDKはサブスクリプションを元のバージョンとキーでのみ復元します。
- メディア暗号化のモード:`none`, `e2ee`(既定は`none`)。選択したモードを使えないクライアントは明示的なエラーで拒否し、ダウングレードはしません。

## タスクのリカバリ

- JavaScript:再接続は最大5回で、上限付きの指数バックオフとジッターを使います。認証または権限のエラーの後は再試行せず、再開が拒否されると`fail`で終了します。
- ESP32:試行は最大5回で、ジッターを使い、試行ごとに使い捨てのチケットを使います。認証エラー、失効した認証情報、拒否された再開の後は再試行しません。
- 共通:連続したACKで音声を解放し、未確認の音声だけをリプレイします。オーバーフローは明示的な`client_buffer_overflow`で、黙って破棄することはありません。

## 制限とプライバシー

- 音声:16000 Hz、モノラル、`pcm_s16le`。JavaScriptの1メッセージは最大4096サンプルで、ESP32は既定で最大3000 ms(96000バイト)をリプレイします。
- タスク音声で送る音声はアプリケーションが渡します。どちらのSDKも、そのためにマイクを開くことはありません。
- ESP32の診断情報に`wifi_ssid`, `raw_mac_address`, `raw_ip`, `raw_audio`, `transcript`, `credential`, `realtime_ticket`が含まれることはありません。
- RTCの接続情報は機密情報で、`no-store`で返されます。SDKはこれを保存しません。