Skip to main content

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 家具モード"]