Skyway × Digital Human 連携
Digital Human と CELL4 の壁面コンテンツを Web でつなぐ仕組みは以下の通り、Skyway を用いて連携する。
ユーザの音声は、Voice Channel を利用して、通常の Web 会議システムのように音声通新を確保する。
シーンの切り替え時など、Digital Human 側からアクションを実行して欲しい場合などの、トリガーワード送信には、Data Channel 経由でテ キストデータを送信する。

Interface
CONN システムには、Skyway 経由で全てのデータのやりとりを実施している。
CONN システム側では、音声 / テキストを受け付けるプロセスを立ち上げて、Web アプリ側でそれぞれを捌いている。

Voice Interface
音声の疎通は、Skyway Room への join 時にマイク音声を Publish する。
Skyway Audio Streamの接続方法
skywayLocalContext = await SkyWayContext.Create(token);
skywayRoom = await SkyWayRoom.FindOrCreate(skywayLocalContext, {
type: 'p2p',
name: skywayRoomName,
});
skywayMe = await skywayRoom.join({ name: 'base-conn' });
skywayData = await SkyWayStreamFactory.createDataStream();
skywayAudio = await SkyWayStreamFactory.createMicrophoneAudioStream();
if (skywayMeAudioPublication === undefined) {
await skywayMe.publish(skywayData);
skywayMeAudioPublication = await skywayMe.publish(skywayAudio);
}
Text Interface
テキストは、Skyway Data Stream を経由して、テキスト通信を確保し、タイミングに応じてデータを Push する。
Skyway Data Streamの接続方法
skywayLocalContext = await SkyWayContext.Create(token);
skywayRoom = await SkyWayRoom.FindOrCreate(skywayLocalContext, {
type: 'p2p',
name: skywayRoomName,
});
skywayMe = await skywayRoom.join({ name: 'base-conn' });
skywayData = await SkyWayStreamFactory.createDataStream();
skywayAudio = await SkyWayStreamFactory.createMicrophoneAudioStream();
if (skywayMeAudioPublication === undefined) {
await skywayMe.publish(skywayData);
skywayMeAudioPublication = await skywayMe.publish(skywayAudio);
}
Data Streamへのデータ送信方法
// 送信時にデータを送信する関数を準備しておく
async function dataFetch(message: any) {
if (message) {
skywayData.write(message);
}
}
送信するデータフォーマット
Skyway Data Channel は、各端末のシーン同期など他の情報共有にも利用しているため、Array形式で、1 つ目に connInputと識別子を入れるようにする。
識別子を見て、データを取捨選択するのは、Skyway のクライアントアプリ側で実施する。
CONNへの指示に関するデータ型の例
["connInput", "CONN 質問モード"]
["connInput", "CONN 家具モード"]