Unity SDK β版
概要
クイックスタート(Windows)
- 開発環境
- アプリケーション ID とシークレットキーを取得する
- SkyWay Auth Token を作成する
- UnityProjectを作成する
- 依存ライブラリをインストールする
- unitypackageをダウンロードする
- プロジェクトにSkyWay Unity SDKをインポートする
- オブジェクトを配置する
- 音声出力用のオブジェクトの配置
- Scriptをアタッチする
- 必要なメンバー変数の宣言とオブジェクトのアタッチを行う
- SkyWayの利用を開始する
- Roomを作成する
- Roomへ参加する
- 音声を送受信する
- マイク音源のAudioStreamの作成とRoomへのPublish
- AudioStreamのSubscribe
- QuickStartの完成コード
クイックスタート(Android)
解放・破棄処理
Tips
🚀 クイックスタート
SkyWay のメディア通信を体験できるシンプルなサンプルアプリケーションを作成します。
ここでは、デバイスのマイク音源とテクスチャを SFU サーバーに送信し、それぞれを自分が受信して音声の再生と映像の描画するというアプリケーションを作ります。
開発環境
- Unity: 2022.3.2f1
- Windows 10以降(x64)
アプリケーション ID とシークレットキーを取得する
※SkyWay への登録がまだの方はこちらから
SkyWay コンソールへログインし、以下の 3 つを行います。
- 「アプリケーションを作成」ボタンを押す
- アプリケーション名を入力して作成ボタンを押す
- アプリケーション一覧からアプリケーション ID とシークレットキーをコピーする(後の手順で利用するため、控えておいてください)。
SkyWay Auth Token を作成する
SkyWay Auth Token とは、SkyWay を利用するための JWT 形式のトークンです。
トークンごとに権限を細かく設定することでき、例えば Channel ごとの入室を特定ユーザーに制限する、といったことができます。
SkyWay Auth Token はサーバーサイドでの生成になるので、Unity SDK にはトークンの生成機能はございません。ここでは JavaScript SDK で配布している Token ライブラリを利用し、サーバーから認可された後トークンを取得してきたとしましょう。
npm がインストールされた環境でライブラリをインストールします。
$ mkdir skyway_token && cd skyway_token $ npm i @skyway-sdk/token
次に token.js
を作成します。
$ touch token.js
ファイルを開き以下のコードをペーストします。
先ほど作成したアプリケーション ID とシークレットキーをスコープの app.id
と encode
メソッドの引数にペーストしてください。
const { SkyWayAuthToken, uuidV4 } = require('@skyway-sdk/token'); const token = new SkyWayAuthToken({ jti: uuidV4(), iat: Math.floor(Date.now() / 1000), exp: Math.floor(Date.now() / 1000) + 60 * 60 * 24, scope: { app: { id: 'ここにアプリケーションIDをペーストしてください', turn: true, actions: ['read'], channels: [ { id: '*', name: '*', actions: ['write'], members: [ { id: '*', name: '*', actions: ['write'], publication: { actions: ['write'], }, subscription: { actions: ['write'], }, }, ], sfuBots: [ { actions: ['write'], forwardings: [ { actions: ['write'], }, ], }, ], }, ], }, }, }).encode('ここにシークレットキーをペーストしてください'); console.log(token);
node で token.js
を実行すると SkyWay Auth Token が生成されます。このトークンは後程使うのでコピーしてください。
// こちらの出力結果はサンプルのため、コピーして用いないようにしてください。 $ node token.js eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxOTA1MzU5Yi0xOGY3LTRhOWMtYmU4Zi1kMTgxMTQ0OTY1MjMiLCJpYXQiOjE2NzQxOTg3MDQsImV4cCI6MTY3NDI4NTEwNCwic2NvcGUiOnsiYXBwIjp7ImlkIjoi44GT44GT44Gr44Ki44OX44Oq44Kx44O844K344On44OzSUTjgpLjg5rjg7zjgrnjg4jjgZfjgabjgY_jgaDjgZXjgYQiLCJ0dXJuIjp0cnVlLCJhY3Rpb25zIjpbInJlYWQiXSwiY2hhbm5lbHMiOlt7ImlkIjoiKiIsIm5hbWUiOiIqIiwiYWN0aW9ucyI6WyJ3cml0ZSJdLCJtZW1iZXJzIjpbeyJpZCI6IioiLCJuYW1lIjoiKiIsImFjdGlvbnMiOlsid3JpdGUiXSwicHVibGljYXRpb24iOnsiYWN0aW9ucyI6WyJ3cml0ZSJdfSwic3Vic2NyaXB0aW9uIjp7ImFjdGlvbnMiOlsid3JpdGUiXX19XSwic2Z1Qm90cyI6W3siYWN0aW9ucyI6WyJ3cml0ZSJdLCJmb3J3YXJkaW5ncyI6W3siYWN0aW9ucyI6WyJ3cml0ZSJdfV19XX1dfX19.qmLpoOjou0S5JwxAiaBvH0KaGzZqN4-0t1xq708_b3M
なお、上記の例ではトークンの有効期限は生成から1日間です。
UnityProjectを作成する
新規で UnityProject を作成してください。
依存ライブラリをインストールする
- 上部ツールバーの
Window
からPackage Manager
を開きます。 +
ボタンをクリックし、Add package from git URL
をクリックします。- 以下のUniTaskの URL を入力します。
https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.4.1
Add
をクリックします。
以上で、依存ライブラリの設定は完了です。
unitypackageをダウンロードする
- SkyWay Unity SDKにアクセスします。
SkyWayRoom.unitypackage
をダウンロードします。
以上でダウンロードが完了します。
プロジェクトにSkyWay Unity SDKをインポートする
- プロジェクトの
Assets
をクリックします。 - ポップアップメニューから
import package
をクリックし、Custom Package
をクリックします。 - ダウンロードした
SkyWayRoom.unitypackage
を選択し、Import
をクリックします。
以上でセットアップは完了です。
オブジェクトを配置する
音声出力用のオブジェクトの配置
受信した音声を再生する Audio Source を配置します。
- Unity Scene ペインで右クリックをしてポップアップメニューを開き、
Audio
->Audio Source
を選択します。
Scriptをアタッチする
- Scene ペインから Main Camera を選択した状態で、Inspector の最下層の
Add Component
をクリックします。 New scripts
をクリックし、任意の名前を入力します。Create and Add
をクリックすると、Script が生成されます。Assets
フォルダで、ポップアップメニューを開き、Create
->Assembly Definition Reference
を選択します。- Inspector の
Assembly Definition
にSkyWayRoom
を選択します。
必要なメンバー変数の宣言とオブジェクトのアタッチを行う
using Com.Ntt.SkyWay.Core
と using Com.Ntt.SkyWay.Room
で SkyWay をインポートし、前節で作成した Script に必要なメンバー変数を宣言します。
using UnityEngine; using UnityEngine.UI; using Com.Ntt.SkyWay.Core; using Com.Ntt.SkyWay.Room; class SampleScript : MonoBehaviour { // 受信した音声を再生するAudio Source public AudioSource remoteOutputAudioSource; // 以下略
次に Unity の Scene に戻り、Main Camera を選択します。
Inspector 最下層の Script コンポーネントに移動し、作成した AudioSource を remoteOutputAudioSource
にアタッチします。
SkyWayの利用を開始する
ここでは、簡易的に Start
に SkyWay のロジックを記述していきます。
SWContext.Setup(SWContextOptions options, Action<string>? onErrorHandler)
で SkyWay のセットアップを行います。先ほど生成した JWT を引数に入れてください。
このメソッドを await
するため、 Start()
メソッドを async
にしてください。
async void Start() { var authToken = "トークンを入力"; // SkyWayのセットアップ await SWContext.Setup(this, authToken); }
Roomを作成する
SkyWay のセットアップが完了したら Room を作成します。
SWSFURoom.Create(string? name = null, string? metadata = null)
で Room を作成できます。
var sfuRoom = await SWSFURoom.Create();
Roomへ参加する
SWSFURoom.Join(SWRoomMemberOptions? memberInit)
でルームに参加し、メンバーを作成します。
var memberInit = new SWRoomMemberOptions { name = "Alice" // Memberに名前をつけることができます。 }; var localMember = await sfuRoom.Join(memberInit);
音声を送受信する
マイク音源のAudioStreamの作成とRoomへのPublish
マイクを音声入力として Stream を作成します。
Publish をするための LocalStream を作成するためには、Source が必要です。
SWAudioSource
のインスタンスを作成し、CreateStream()
で LocalStream を作成します。
LocalSFUMember.Publish(SWLocalStream localStream, SWRoomPublicationOptions? options)
で Room に Publish します。
// AudioStreamの作成 var audioSource = new SWAudioSource(); var localAudiostream = audioSource.CreateStream(); // audioをPublishします var audioPublication = await localMember.Publish(localAudiostream, null);
AudioStreamのSubscribe
LocalSFUMember.Subscribe(SWRoomPublication publication, SWRoomSubscriptionOptions? options = null)
を実行し、Subscription を受け取ります。
その後、Subscription から SWRemoteAudioStream
を入手し、出力用の Audio Source と紐づけます。
// audioをSubscribeします var audioSubscription = await localMember.Subscribe(audioPublication); // 受信した音声をAudio Sourceから出力します var remoteAudioStream = audioSubscription.Stream as SWRemoteAudioStream; remoteAudioStream.SetAudioSource(remoteOutputAudioSource);
実行し、受信した音声がデバイスのスピーカーから出力されれば完成です。
QuickStartの完成コード
using UnityEngine; using UnityEngine.UI; using Com.Ntt.SkyWay.Core; using Com.Ntt.SkyWay.Room; public class SampleScript : MonoBehaviour { // 受信した音声を再生するAudio Source public AudioSource remoteOutputAudioSource; async void Start() { var authToken = "トークンを入力してください。"; // SkyWayのセットアップ await SWContext.Setup(authToken); var sfuRoom = await SWSFURoom.Create(); var memberInit = new SWRoomMemberOptions { name = "Alice" // Memberに名前をつけることができます。 }; var localMember = await sfuRoom.Join(memberInit); // AudioStreamの作成 var audioSource = new SWAudioSource(); var localAudiostream = audioSource.CreateStream(); // audioをPublishします var audioPublication = await localMember.Publish(localAudiostream, null); // audioをSubscribeします var audioSubscription = await localMember.Subscribe(audioPublication); // 受信した音声をAudio Sourceから出力します var remoteAudioStream = audioSubscription.Stream as SWRemoteAudioStream; remoteAudioStream.SetAudioSource(remoteOutputAudioSource); } }