Sora クライアント要求仕様

概要

Sora SDK や Sora クライアントの開発者に向けた資料です。

クライアント側の終了処理条件

RTCPeerConnectionState が failed になる

全ての接続において RTCPeerConnectionStatefailed になったタイミングで "type": "disconnect" は送らず、 クライアント側で終了処理をしてください。

WebSocket のみ

  • RTCPeerConnectionStatefailed になった
    • 終了処理に入る
  • WebSocket onclose が上がった
    • 終了処理に入る
  • WebSocket onerror が上がった
    • 終了処理に入る

WebSocket と DataChannel

  • RTCPeerConnectionStatefailed になった
    • 終了処理に入る
  • WebSocket onclose が上がった
    • "type": "switched" が送られてきていない
      • 終了処理に入る
    • "type": "switched", "ignore_disconnect_websocket": true が送られてきていた
      • 何もしない
    • "type": "switched", "ignore_disconnect_websocket": false が送られてきていて、 RTCPeerConnectionStatefailed になっている
      • 終了処理に入る
    • "type": "switched", "ignore_disconnect_websocket": false が送られてきていて、 RTCPeerConnectionStatefailed になっていない
      • DataChanel で "type": "disconnect", reason: "WEBSOCKET-ONCLOSE" を送ることを試みる
      • 終了処理に入る
  • WebSocket onerror が上がった
    • "type": "switched" が送られてきていない
      • 終了処理に入る
    • "type": "switched", "ignore_disconnect_websocket": true が送られてきていた
      • 何もしない
    • "type": "switched", "ignore_disconnect_websocket": false が送られてきていて、 RTCPeerConnectionStatefailed になっている
      • 終了処理に入る
    • "type": "switched", "ignore_disconnect_websocket": false が送られてきていて、 RTCPeerConnectionStatefailed になっていない
      • DataChanel で "type": "disconnect", reason: "WEBSOCKET-ONERROR" を送ることを試みる
      • 終了処理に入る

DataChannel のみ

  • RTCPeerConnectionStatefailed になった
    • 終了処理に入る

DataChannel の終了

Sora SDK の切断タイムアウトのデフォルト値は 3000 ミリ秒です。

  • RTCDataChannel onclose が上がった
    • RTCDataChannel onerror にコールバックをセットしている場合
      • 終了処理に入る、または切断タイマーを開始し、全ての RTCDataChannelreadyState がすべて closed にならずタイムアウトした場合は終了処理にはいる
    • RTCDataChannel onerror にコールバックをセットしていない場合
      • 終了処理に入る
  • RTCDataChannel onerror が上がった
    • 終了処理に入る

アプリケーション経由の "type": "disconnect" 送信後の終了処理

Sora SDK の切断タイムアウトのデフォルト値は 3000 ミリ秒です。

WebSocket のみ

data_channel_signaling: false の場合。

  • WebSocket 経由で "type": "disconnect", reason: "NO-ERROR" を送る
    • 終了処理に入る、または切断タイマーを開始し、WebSocket onclose が上がらずタイムアウトした場合は終了処理に入る

WebSocket と DataChannel

data_channel_signaling: trueignore_disconnect_websocket: false の場合。

  • "type": "switched" が送られて来ていない
    • WebSocket 経由で "type": "disconnect", reason: "NO-ERROR" を送る
    • 終了処理にはいる、または切断タイマーを開始し、WebSocket onclose が上がらずタイムアウトした場合は終了処理にはいる
  • "type": "switched", "ignore_disconnect_websocket": false が送られてきていて、 WebSocket は切断していない
    • DataChannel 経由で "type": "disconnect", reason: "NO-ERROR" を送る
    • RTCDataChannel onerror にコールバックをセットしている場合
      • 終了処理に入る、または切断タイマーを開始し、WebSocket の onclose かつ、全ての RTCDataChannelreadyState がすべて closed にならずタイムアウトした場合は終了処理にはいる
    • RTCDataChannel onerror にコールバックをセットしていない場合
      • 終了処理に入る

DataChannel のみ

data_channel_signaling: trueignore_disconnect_websocket: true の場合。

  • "type": "switched" が送られて来ていない
    • WebSocket 経由で "type": "disconnect", reason: "NO-ERROR" を送る
    • 切断タイマーを開始する
    • WebSocket onclose が上がらずタイムアウトした場合は終了処理に入る
  • "type": "switched", "ignore_disconnect_websocket": true が送られてきていて、 WebSocket も切断している
    • DataChannel 経由で "type": "disconnect", reason: "NO-ERROR" を送る
    • RTCDataChannel onerror にコールバックをセットしている場合
      • 終了処理に入る、または切断タイマーを開始し、全ての RTCDataChannelreadyState がすべて closed にならずタイムアウトした場合は終了処理にはいる
    • RTCDataChannel onerror にコールバックをセットしていない場合
      • 終了処理に入る

異常発生による終了

シグナリングの異常

終了処理に入ってください。

シグナリング以外の異常

"type": "disconnect", reason: "INTERNAL-ERROR" を送り、終了処理に入って下さい。

RTCPeerConnectionState が定義されていない場合

RTCDtlsTransprot が実装されていない場合 RTCPeerConnectionState が正常に動作しないため、 RTCIceConnectionState を利用してください。

RTCIceConnectionStatedisconnect になった場合、切断タイマーを開始し、 タイムアウトした場合 disconnect から変化がなければ切断してください。

Sora SDK の RTCIceConnectionState 用の切断タイマーはデフォルトで 10 秒です。