# はじめに
すべてのSDKに共通する仕様、用語について説明します。
# Peer
Peer(ピア)は、シグナリングサーバや他のクライアントとの接続を管理するエージェントです。
例えば、1:1のビデオチャットでは、発信側と着信側でそれぞれのPeerが音声・映像を送受信します。
# Peer ID
Peer IDはPeerを一意に識別するためのIDです。
Peerインスタンスを作成したときに、16桁のランダム文字列として取得できます。
なお、Peer IDは原則シグナリングサーバが生成しますが、ユーザーが独自な値を指定することもできます。
# 通信モデル
SkyWayの通信モデルは2つあります。 それぞれのモデルにおける接続確立の流れを説明します。
# 1. 電話モデル
電話のように1:1で通信をするモデルです。接続するには、相手のPeer IDを何らかの手段で知る必要があります。
# メディア通信(音声・映像)
- 発信側は、電話番号の代わりにPeer IDを指定して、相手に発信します。
peer.call('相手のPeer ID')
- 着信側では、着信すると
call
イベントが発火します。 - そのcallイベントに対して
call.answer()
を呼びます。 - 通信が確立します。
なお、発信者・着信者ともに、音声・映像はMediaStreamとしてstream
イベントの発火と共に取得できます。
# データ通信
- 発信側は、電話番号の代わりにPeer IDを指定して、相手に発信します。
peer.connect('相手のPeer ID')
- 着信側では、着信すると
connection
イベントが発火します。 - 通信が確立します。
メディア通信のようにanswer()
を呼ぶ必要はなく、自動的に接続が確立されます。
# 2. ルームモデル
ビデオ会議のように、複数のPeer同士で通信するモデルです。
- Peerはルーム名を指定してルームに参加(
peer.joinRoom('ルーム名')
)します。 - 他の参加者から音声・映像を受信した場合は、
Room.stream
イベントが発火し、メディア通信が確立されます。 - ルームから退出する場合は、
Room.close()
を利用します。
全ての参加者がルームから退出すると、ルームが削除されます。
ルームの名前空間はAPIキー毎に独立しています。つまり、AというAPIキーとBというAPIキーがあった場合に、どちらも同じhogeというルーム名を作成したとしても、Aのルームの参加者と、Bのルームの参加者同士での通信は確立しません。
なお、ルームの実現方式は、MeshとSFUという方式の2種類があります。詳細はこちら
# MediaStream
メディア通信(映像・音声)には、MediaStreamを利用します。
MediaStreamの作成は、SkyWayのSDKでは提供していないため、ブラウザやOSにて行います。
作成したMediaStreamをSkyWay SDKに渡す / SkyWay SDKから取得することで、メディア通信を実現します。