DataChannel 経由のシグナリング

概要

Sora Flutter SDK における Sora の DataChannel をどのようにシグナリングや通知に利用するかを説明します。

DataChannel 経由のシグナリングとは

Sora Flutter SDK は、 dataChannelSignaling: true を指定した場合、接続の開始時点では WebSocket を利用し、その後の状態によって DataChannel ベースのシグナリングへ切り替えます。 また Sora は、 DataChannel をシグナリングだけでなく、通知やプッシュ、統計、RPC 機能にも利用します。

Sora 接続におけるシグナリングの切り替わりは以下のような流れになります。

  1. 接続開始時は WebSocket 経由でシグナリングする
  2. dataChannelSignaling: true を指定している場合、Sora 側の条件が揃うと switched メッセージが届く
  3. 以後のシグナリングや通知の一部は DataChannel ベースで扱われる
  4. ignore_disconnect_websocket が有効な構成では、切り替え後に WebSocket を閉じる

DataChannel 経由のシグナリングに関する設定

dataChannelSignaling

WebSocket の後段で DataChannel 経由のシグナリングを利用する場合に true を指定します。 デフォルトは null (未指定) で、この場合は Sora 側の設定が使われます。

dataChannelSignaling は接続時の要求値です。 true を指定した場合でも切り替わりは保証されません。 実際に切り替わったかどうかは SoraSwitchedEvent で確認します。

final config = SoraConnectionConfig(
  signalingUrls: <String>['wss://example.com/signaling'],
  channelId: 'example-channel',
  role: SoraRole.sendrecv,
  video: true,
  audio: true,
  dataChannelSignaling: true,
);

シグナリング切り替え時に発火するイベント

DataChannel 経由のシグナリングに切り替わると SoraSwitchedEvent イベントが発火します。

conn.events.listen((event) {
  if (event case SoraSwitchedEvent(:final message)) {
    print(message);
  }
});

message には、 ignore_disconnect_websocket のような switched メッセージの内容が含まれています。

イベントの詳細については イベント をご確認ください。

ignoreDisconnectWebSocket

DataChannel 経由のシグナリングへ切り替わった後、WebSocket 切断を無視する構成にしたい場合に true を指定します。 デフォルトは null (未指定) で、この場合は Sora 側の設定が使われます。

この値は connect メッセージの ignore_disconnect_websocket として Sora に渡されます。 SDK 側では、 switched メッセージに ignore_disconnect_websocket: true が含まれていた場合に、WebSocket を閉じます。

final config = SoraConnectionConfig(
  signalingUrls: <String>['wss://example.com/signaling'],
  channelId: 'example-channel',
  role: SoraRole.sendrecv,
  dataChannelSignaling: true,
  ignoreDisconnectWebSocket: true,
);

関連ページ