メタデータの扱い

WebRTC SFU Sora の一部のシグナリングでは、ユーザーが任意の JSON 値を含めることができます (Sora では メタデータ と呼びます) 。 Sora iOS SDK では、メタデータを Swift の Codable プロトコルで扱います。

メタデータを送信する

メタデータを送信できるシグナリングのパラメーターは以下の通りです:

  • connect.metadata
  • connect.signaling_notify_metadata

以上のパラメーターは Configuration オブジェクトの次のプロパティでセットできます:

  • connect.metadata -> signalingConnectMetadata
  • connect.signaling_notify_metadata -> signalingConnectNotifyMetadata

フォーマット

メタデータは Encodable プロトコルに準拠する必要があります。 Swift の標準ライブラリでは主なデータが Encodable プロトコルに対応しているので、 単純なデータであれば Encodable プロパティの実装は必要ありません。

例:

// JSON 文字列
config.signalingConnectMetadata = "contents"

// JSON オブジェクト
config.signalingConnectMetadata = ["key": "value"]

実際に送信されるメタデータの内容を確認するには、デバッグログを有効にしてシグナリングの内容をコンソールに出力してください。 詳細は SDK のログをコンソールに出力する を参照してください。

受信したメタデータをデコードする

メタデータを受信できるシグナリングのパラメーターは以下の通りです:

  • offer.metadata
  • push.data
  • notify.metadata (event_type: "connection.created")
  • notify.metadata_list (event_type: "connection.created")

メタデータを含むシグナリングの取得は、シグナリングチャネル、ピアチャネル、メディアチャネルのいずれかのイベントハンドラ onReceiveSignalingHandler を使います (どのイベントハンドラも動作は同じです) 。 イベントハンドラは Configuration にセットできます。

受信したメタデータの型は SignalingMetadata です。 メタデータの JSON デコーダーを decoder プロパティで取得できるので、デコーダーを使って任意のデータ型にデコードしてください。

メタデータの解析例を次に示します:

// シグナリングを取得するイベントハンドラ
config.mediaChannelHandlers.onReceiveSignalingHandler = { sig in
    switch sig {

    // 通知 (シグナリング "notify", イベント種別 "connection.*")
    case .notifyConnection(let conn):
        if let metadata = conn.metadata {
            do {
                // 任意のデータ型にデコードする
                // 以下はメタデータが文字列の場合の例
                let cont = try decoder.singleValueContainer()
                let str = try cont.decode(String.self)
                ...
            } catch {
                // デコード失敗時の処理
                ...
            }
        }

    default:
        break
    }
}