
【3/5ページ】SkyWay SDK for Linuxハンズオン資料 SkyWay事前準備編
このコンテンツはSDK for Linux®︎のハンズオンイベントで利用するコンテンツです。
ハンズオンに参加できなかった方でも、個人で本記事に沿って作成いただけるように構成しています。
ハンズオンの概要・使用する機材の情報については概要ページをご覧ください。
SkyWayの基本的な概念

SkyWayでは、以下のような概念を元にしてビデオ・音声・データ通信機能を実装しています。
Roomという要素を作成し、Roomに対してMemberを追加します。これにより同じRoom内のMember同士が通信を行うことができます。
Member同士が通信を行う際は、まず片方のMember Aが音声・映像・データを元にしたPublicationを作成します(これをPublishと言います)。
このPublicationを、もう片方のMember Bがそれを受け取るSubscriptionを作成することで音声・映像・データが流れ、受信することができます(これをSubscribeと言います)。
詳細は以下を参照してください。
はじめに | ユーザーガイド | SkyWay(スカイウェイ)
SkyWayのアカウント登録およびトークンの払い出し
SkyWayにアカウント登録する
本ハンズオンでは、SkyWayコンソールにてアカウントの登録(無料)が必要です。
画面の案内に従い登録をお願いします。
SkyWayで使用するアプリケーションIDとシークレットキーを発行する
以下の手順でアプリで利用するアプリケーションIDとシークレットキーを取得します。
コンソールにログインします。
「プロジェクトを作成」を選択します。

3.「新しいプロジェクトを作成する」にて任意の名前でプロジェクトを作成します。
4.「アプリケーションを作成」を選択します。

5.「アプリケーション作成」にて任意の名前でアプリケーションを作成します。
6. アプリケーション内のアプリケーションIDとシークレットキーを確認します。(このアプリケーションIDとシークレットキーは後で利用します)

次はここで発行したアプリケーションIDとシークレットキーを使ってブラウザ間で通話してみます。
SkyWayでブラウザ間の通話をしてみる
それでは、ブラウザ側でRaspberry Piを操作する環境を作っていきます。
本ハンズオンでは、ブラウザ側はSkyWay Explorerを使用します。
SkyWay Explorerは、ブラウザ側のコーディングを行うことなくSkyWayをお試しいただけるページです。
トークンの作成
SkyWayを利用するためのトークンの作成を行います。先ほど取得したアプリケーションIDとシークレットキーを利用します。
SkyWay JavaScript SDK Explorer のページへアクセスし、以下の操作を行います。
「SkyWay Auth Tokenタブ」を開きます。
"analytics"の値をfalseに書き換えます。
$appIdの入力欄に先ほどメモしたアプリケーションIDを入力します。
secretの入力欄に先ほどメモしたシークレットキーを入力します。
auto update $exp to $iat(デフォルトでは60)の数値を変更します。この数字がトークンの生存期間を示します。今回生成したトークンはそのままRaspberry Pi側でも利用するため、長期的な期限を持つトークンを生成します。ハンズオンでは30000程度(30000秒≒8時間)あれば十分かと思います。
createAuthTokenStringボタンを押します。
これにより、エンコードされたAuthToken(赤線部)が出力されます。
ここで生成したAuthTokenは後にRaspberry Pi側でも利用しますので、こちらをメモしておいてください。
なお、アプリケーションIDとシークレットキーについてはこれ以降使いませんので、メモは削除しても構いません。

Roomの取得から入室
SkyWayを扱うためのインスタンスを作成します。
これをContextと言います。
「SkyWay Contextタブ」を開きます。先ほど生成したトークンが自動で入力されています。
「SkyWayContext.Create()ボタン」を押します。

次に、映像・音声・データのやり取りをする部屋を作成します。
これをRoomと言います。
Roomには任意の名前をつけることができます。
Roomタブを開きます。
「CREATE - SkyWayRoom.FindOrCreate()」のエリアにおいて、以下のオプションを設定します。
「type」は「p2p」を選択します。
「name」は「set」を選択し、テキストボックスに利用したいRoomの名称を入力します。
「SkyWayRoom.FindOrCreate()ボタン」を押します。

Roomが作成できたら、入室を行います。
「LocalRoomMemberタブ」を開きます。
「room.join()ボタン」を押します。
成功するとMemberが生成されます。

データの送信
ここまでできたら、データを送信する準備を初めていきます。
SkyWayで扱うことができるメディアの種類は、映像・音声・データの3つがあります。
これらの流れは、Streamという概念で表されています。
自分が作ったもの(ここではExplorerが作ったもの)がLocal、それ以外はRemoteと分類されます。
以下では、テキストメッセージを扱うLocalのStreamを作成し、対向に送信する準備をします。
「LocalStreamタブ」を開きます。
「SkyWayStreamFactory.createDataStream()ボタン」を押します。

createVideoStreamなら映像、createAudioStreamなら音声のStreamを作成できます。
LocalStreamができたら、これをRoomに向けて送信します。
これをPublishと言います。
「RoomPublicationタブ」を開きます。
「localStreamのセレクトボックス」からPublishしたいLocalStreamを選択します。
「localRoomMember.publish()」を押します。
成功するとRoomPublicationインスタンスが作成されます。

Explorerからデータを送信するStreamをLocalDataStreamと言います。
このLocalDataStreamは、テキストメッセージを送信することができます。
「LocalStreamタブ」を開き、該当のLocalStreamを表示します。
data欄に任意のメッセージを入力します。
「localDataStream.write(data)ボタン」を押します。

ですが、まだ誰もこのPublicationを受信する人がいません。
なのでここで送信したメッセージが届いたか確認することができません。
映像・データの受信
Publicationを受信することを、Subscribeと言います。
Subscribeは、同じRoomに作成されたPublicationのみ行えます。
ただし自身が作成したPublicationはSubscribeできません。
そのためここまでで作ったPublicationを受信したい場合、別のブラウザタブでExplorerを立ち上げ、Roomにjoinする必要があります。
「RoomSubscriptionタブ」を開きます。
「publicationIdのセレクトボックスから」受信したいPublicationを選択します。
「localRoomMember.subscribe()ボタン」を押します。

ここまでできたらSkyWayの概念について理解できたと思います。
次のページでいよいよRaspberry Piに接続したLEDを制御していきます。