DataChannel 経由のシグナリング

概要

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

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

Sora Flutter SDK は、WebSocket シグナリングに加えて DataChannel 経由のシグナリングを扱えます。

接続の開始時点では WebSocket を使い、その後の状態によって DataChannel ベースのシグナリングへ切り替わる構成を扱います。

Sora は DataChannel をシグナリングだけでなく、通知やプッシュ、統計、RPC 機能にも使います。

流れとしては次のように理解すると分かりやすくなります。

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

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

SoraConnectionConfig では、主に次の項目を使います。

  • dataChannelSignaling
  • ignoreDisconnectWebSocket

dataChannelSignaling

WebSocket の後段で DataChannel 経由のシグナリングを使いたい場合に指定します。

これは「DataChannel への切り替えを使いたい」という接続時の要求です。 true を指定しても、常に切り替わると決まっているわけではありません。実際に切り替わったかどうかは SoraSwitchedEvent で確認します。

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

ignoreDisconnectWebSocket

DataChannel 経由のシグナリングへ切り替わった後、WebSocket 切断を無視する構成にしたい場合に指定します。

この値は 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,
);

シグナリング切り替え

DataChannel 経由のシグナリングに切り替わると client.eventsSoraSwitchedEvent が発火します。

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

message には、たとえば ignore_disconnect_websocket のような switched メッセージの内容がそのまま入ります。

あわせて読むとよいページ