# はじめに

すべてのSDKに共通する仕様、用語について説明します。

# Peer

Peer(ピア)は、シグナリングサーバや他のクライアントとの接続を管理するエージェントです。

例えば、1:1のビデオチャットでは、発信側と着信側でそれぞれのPeerが音声・映像を送受信します。

# Peer ID

Peer IDはPeerを一意に識別するためのIDです。

Peerインスタンスを作成したときに、16桁のランダム文字列として取得できます。

なお、Peer IDは原則シグナリングサーバが生成しますが、ユーザーが独自な値を指定することもできます。

# 通信モデル

SkyWayの通信モデルは2つあります。 それぞれのモデルにおける接続確立の流れを説明します。

# 1. 電話モデル

電話のように1:1で通信をするモデルです。接続するには、相手のPeer IDを何らかの手段で知る必要があります。

# メディア通信(音声・映像)

  1. 発信側は、電話番号の代わりにPeer IDを指定して、相手に発信します。peer.call('相手のPeer ID')
  2. 着信側では、着信するとcallイベントが発火します。
  3. そのcallイベントに対してcall.answer()を呼びます。
  4. 通信が確立します。

なお、発信者・着信者ともに、音声・映像はMediaStreamとしてstreamイベントの発火と共に取得できます。

# データ通信

  1. 発信側は、電話番号の代わりにPeer IDを指定して、相手に発信します。peer.connect('相手のPeer ID')
  2. 着信側では、着信するとconnectionイベントが発火します。
  3. 通信が確立します。

メディア通信のようにanswer()を呼ぶ必要はなく、自動的に接続が確立されます。

# 2. ルームモデル

ビデオ会議のように、複数のPeer同士で通信するモデルです。

  1. Peerはルーム名を指定してルームに参加(peer.joinRoom('ルーム名'))します。
  2. 他の参加者から音声・映像を受信した場合は、Room.streamイベントが発火し、メディア通信が確立されます。
  3. ルームから退出する場合は、Room.close()を利用します。

全ての参加者がルームから退出すると、ルームが削除されます。

ルームの名前空間はAPIキー毎に独立しています。つまり、AというAPIキーとBというAPIキーがあった場合に、どちらも同じhogeというルーム名を作成したとしても、Aのルームの参加者と、Bのルームの参加者同士での通信は確立しません。

なお、ルームの実現方式は、MeshとSFUという方式の2種類があります。詳細はこちら

# MediaStream

メディア通信(映像・音声)には、MediaStreamを利用します。

MediaStreamの作成は、SkyWayのSDKでは提供していないため、ブラウザやOSにて行います。

作成したMediaStreamをSkyWay SDKに渡す / SkyWay SDKから取得することで、メディア通信を実現します。