RPC 機能¶
Added in version 2025.2.0.
警告
この機能は 実験的機能 のため、正式版では仕様が変更される可能性があります
概要¶
Sora では、 DataChannel 経由のシグナリング 利用時に、 JSON-RPC 2.0 over DataChannel で一部の HTTP API をクライアントから直接呼び出すことができます。
この RPC 機能を利用することで、アプリケーションサーバー経由で Sora の HTTP API を呼び出す場合と比べて、より低遅延に同等の操作を行えます。
RPC 機能を利用する条件¶
sora.confで data_channel_rpc がtrueに設定されていることコネクションが DataChannel 経由のシグナリング を利用していること
認証成功時に rpc_methods の払い出し で利用できる RPC メソッド名一覧が払い出されていること
JSON-RPC 2.0 仕様¶
JSON-RPC 2.0 の仕様に準拠しています
methodには HTTP API で指定するヘッダー名とは異なる形式で指定する必要があります2025.2.0/RequestSimulcastRidのように{RPC 経由での HTTP API の呼出が導入された Sora のバージョン}/{HTTP API 名}の形式で指定します
paramsには HTTP API 利用時の JSON を指定しますparamsに不要なな項目が含まれている場合はエラーになりますchannel_idとconnection_idは Sora 側で現在接続しているコネクションの値を利用するため指定不要ですreceiver_connection_idも同様に Sora 側で現在接続しているコネクションの値を利用するため指定不要です
idを付けないことでレスポンスを返さないNotificationとして利用できますこれは Sora 側がレスポンスを返さないことを意味します
RPC の型定義¶
/*
data_channel_rpc = true の場合に送信される RPC の型定義
JSON-RPC 2.0 準拠
https://www.jsonrpc.org/specification
DataChannel シグナリング
label: "rpc"
*/
// 2025.2.0 以降で利用可能な RPC メソッド
type rpcMethod =
| "2025.2.0/RequestSimulcastRid"
| "2025.2.0/RequestSpotlightRid"
| "2025.2.0/ResetSpotlightRid"
| "2025.2.0/PutSignalingNotifyMetadata"
| "2025.2.0/PutSignalingNotifyMetadataItem";
type JSONRPCRequest = {
jsonrpc: "2.0";
// null 非推奨
id?: number | string;
method: rpcMethod;
params?: Record<string, unknown> | unknown[];
};
type JSONRPCSuccess = {
jsonrpc: "2.0";
id: number | string;
result: unknown;
};
// 予約済みエラーコード
type JSONRPCErrorCode =
// JSON パースエラー
| -32700
// 不正なリクエスト
| -32600
// メソッドが見つからない
| -32601
// 不正なパラメータ
| -32602
// 内部エラー
| -32603
// -32000 ~ -32099: サーバーエラー、その他: アプリケーション定義
| number;
type JSONRPCError = {
jsonrpc: "2.0";
id: number | string | null;
error: {
code: number;
message: string;
data?: unknown;
};
};
メソッド一覧¶
注釈
method は {RPC 経由での HTTP API の呼出が導入された Sora のバージョン}/{HTTP API 名} という形式になります。
2025.2.0/RequestSimulcastRid¶
{
"jsonrpc": "2.0",
"method": "2025.2.0/RequestSimulcastRid",
"params": {
"sender_connection_id": "example_sender_connection_id",
"rid": "r1"
},
"id": 1
}
channel_id と receiver_connection_id は Sora 側で設定するため指定不要です。また sender_connection_id はオプションです。
このメソッドを利用するには認証時の払い出しで simulcast と simulcast_rpc_rids を指定する必要があります。 RPC 経由で切り替えられる rid を simulcast_rpc_rids で指定してください。
{
"type": "offer",
"simulcast": true,
"simulcast_rpc_rids": ["none", "r0", "r1"],
"rpc_methods": [
"2025.2.0/RequestSimulcastRid"
]
}
2025.2.0/RequestSpotlightRid¶
{
"jsonrpc": "2.0",
"method": "2025.2.0/RequestSpotlightRid",
"params": {
"send_connection_id": "example_send_connection_id",
"spotlight_focus_rid": "r1",
"spotlight_unfocus_rid": "none"
},
"id": 1
}
channel_id と recv_connection_id は Sora 側で設定するため指定不要です。また send_connection_id はオプションです。
2025.2.0/ResetSpotlightRid¶
{
"jsonrpc": "2.0",
"method": "2025.2.0/ResetSpotlightRid",
"params": {
"send_connection_id": "example_send_connection_id"
},
"id": 1
}
channel_id と recv_connection_id は Sora 側で設定するため指定不要です。また send_connection_id はオプションです。
2025.2.0/PutSignalingNotifyMetadata¶
PutSignalingNotifyMetadata API
{
"jsonrpc": "2.0",
"method": "2025.2.0/PutSignalingNotifyMetadata",
"params": {
"push": true,
"metadata": {
"example_key_1": "example_value_1",
"example_key_2": "example_value_2"
}
},
"id": 1
}
channel_id と connection_id は Sora 側で設定するため指定不要です。また、 push はオプションです。
2025.2.0/PutSignalingNotifyMetadataItem¶
PutSignalingNotifyMetadataItem API
{
"jsonrpc": "2.0",
"method": "2025.2.0/PutSignalingNotifyMetadataItem",
"params": {
"push": true,
"key": "example_key",
"value": "example_value"
},
"id": 1
}
channel_id と connection_id は Sora 側で設定するため指定不要です。また、 push はオプションです。
利用できる RPC の指定¶
この機能を利用するには認証時の払い出しで RPC 機能で利用できるメソッド一覧を指定する必要があります。
{
"allowed": true,
"rpc_methods": [
"2025.2.0/RequestSpotlightRid",
"2025.2.0/ResetSpotlightRid"
]
}
"type": "offer" シグナリングメッセージでの確認¶
クライアントから利用できる RPC メソッド一覧は "type": "offer" のシグナリングメッセージの rpc_methods で確認することができます。
{
"type": "offer",
"rpc_methods": [
"2025.2.0/RequestSpotlightRid",
"2025.2.0/ResetSpotlightRid"
]
}
シーケンス図¶
sequenceDiagram
participant C1 as Client1
participant C2 as Client2
participant S as Sora
note over C1,S: C1, C2 共にWebRTC 確立済み
C1 ->> S: JSON-RPC 2.0 Request<br>PutSignalingNotifyMetadataItem<br>push: true<br>over DataChannel
note over S: シグナリング通知メタデータ拡張に項目を追加
S ->> C1: JSON-RPC 2.0 Success Response<br>over DataChannel
note over S: シグナリング通知メタデータ拡張によるプッシュ通知が発生
S ->> C1: type: push<br>over DataChannel
S ->> C2: type: push<br>over DataChannel