日本語
1:1 着信への応答
client.call.answerIncoming(event, options) は、通常の 1:1 音声通話またはビデオ通話の着信に明示的に応答します。 リスニングするだけでは応答しません。 ログイン済みクライアントの call:incoming イベントを使用し、event.incoming を確認して、呼び出す前に独自の受け入れポリシーを適用してください。 グループのオペレーションと未分類のオペレーションには応答できません。 既存の生イベントは、他のアプリケーション向けに引き続き利用できます。
ts
client.on("call:incoming", (event) => {
if (!event.incoming) return;
// Ask the user before invoking answerIncoming; see the complete helper below.
});example/call/incoming.ts は、認証済みクライアントに受け入れ判定用コールバックとメディア用コールバックを登録します。 返される PlanetTransport は、send() と receive() を使ってエンコード済みの Opus パケットを送受信します。 PCM への変換には、既存の音声/Opus ヘルパーを使用してください。 ended はローカルでのクローズまたはリモートからの解放時に解決されます。 後処理では必ず close() を呼び出してください。 Node と Deno の UDP ランタイムに対応していますが、ブラウザーの UDP には対応していません。
識別情報とライフタイム
deviceId には、アプリケーションが所有する固定のインストール識別子を渡してください。 32 バイトの乱数を一度だけ生成し、base64 にエンコードして、アプリケーションのプライベートストレージに永続化します。 アカウントトークンを使用したり、別のクライアントの端末 ID をコピーしたりしないでください。 ライブラリはファイルシステムの選択や Android 識別情報のプロビジョニングを行いません。 ユーザーエージェントは、ログイン済みクライアントの端末詳細から取得します。 通話種別により、応答フローに使う freecall.audio または freecall.video が選択されます。
応答ヘルパーは認証済みオペレーションを再解析し、発信者、通話 ID、経路の認証情報、ローカルプロファイルを結び付けます。 未認証の HTTP エンドポイントから届いた JSON を渡さないでください。 観測されている2種類の Operation レイアウトに対応しています。 一方は param1 が発信者 MID、param2 がトークンで、もう一方は param1 が通話通知 ID、param2 が発信者 MID です。 param3.n は経路トークン、param3.vs は PLANET 通話 ID を提供し、k=CA は音声、k=CV は映像を示します。 経路と認証情報は機密情報のため、ログに記録しないでください。
通話クライアントごとに、待機中またはアクティブな着信応答は1つだけに制限されます。 直後に繰り返された同じ通話 ID は拒否されます。 アプリケーションは、発信セッションとの調整と、より長期間にわたるリプレイ対策/受け入れポリシーを管理する必要があります。 signal は検証、応答、またはアクティブな通話を中断します。 timeoutMs はシグナリングの各段階の制限時間を指定します(既定値は10秒)。 ソケットのバインド中に中断した場合は、バインドの後処理を待ちます。 バインド自体にも有限のタイムアウトがあります。 不正な形式のオファー、拒否された応答、解決できないエンドポイント、シグナリングのタイムアウトが発生した場合は、応答を中途半端に開いたままにせず、トランスポートを閉じます。
プロトコルの範囲と検証根拠
着信側は VERIFY を送信し、一致する認証済みトランザクションだけを受け入れた後、新しい E2EE 専用の音声または映像の応答を含む CONN を送信します。 暫定の CONN 応答では、メディアは有効になりません。 応答は、通話、セッション、チャンネル、nonce、現在のトランザクションに一致する必要があります。 最終 CONN に mAddr がない場合、メディアには、認証済みで対応関係が確認された VERIFY の UDP ピアを使用します。 明示された mAddr が無効な場合は失敗します。 ローカル NAT アドレスも未認証の RTP トラフィックも、このエンドポイントの送信先を変更できません。 送信 SSRC は、発信者のオファーのフィールド 61 ではなく、ローカルの応答のフィールド 11 から取得します。
元の JavaScript 実装では、着信音声が実際に聞こえることを実通話でテスト済みです。 TypeScript の音声経路には、合成された暗号化 UDP と SRTP のテストがあります。 ビデオ着信への応答は新しく追加された機能で、実通話での確認がまだ必要です。
CANCEL_CALL オペレーションとの対応付けは確立されていないため、このヘルパーは発信者だけを根拠にキャンセルを推定しません。 アプリケーションによる明示的な中断、または対応関係が確認された PLANET の解放を使用してください。 代替 BEPI/P2P への移行と、ネイティブのメディア KDF との完全なバイト一致は、引き続きこの実装の検証済み範囲外です。