開発ガイド

P2P での通話内容を文字起こしする方法

文字起こしの対象となる音声は、SFU を利用して Publish する必要があります。 エンドユーザー間の通信を行う P2P 通信とは別に、文字起こし機能を利用するための SFU 通信を同時に利用することで、エンドユーザー間の通信は P2P 通信を利用しながら文字起こし機能を利用できます。

エンドユーザー間の通信に P2P 通信を利用しながら文字起こし機能を利用する際の概要図

SFU 通信料と SFU リソース確保料について

P2P 通信での通話を文字起こしする場合、SkyWay Auth Token に次のような設定を行った上で maxSubscribers の設定を 0 として Publish を行うことで、文字起こしに伴うSFU 通信料と SFU リソース確保料が発生しなくなります。 本設定は SkyWay Auth Token のバージョン 3 から対応しております。

SkyWay Auth Token / SFU リソースについて

{ // ...省略 version: 3, scope: { // ...省略 rooms: [ { // ...省略 sfu: { enabled: true, maxSubscribersLimit: 0, }, // ...省略 } ] } }

Publish 時の maxSubscribers オプションを 0 に設定すると、その Publication は Subscribe ができなくなり、文字起こし専用の Publication として扱われます。

注意事項

SkyWay の各種 SDK では一度 Publish した Stream を再度 Publish することができません。

P2P 通信と SFU 通信を併用する際に同一のマイクを「エンドユーザー間通信」と「文字起こし」で用いる場合は、Stream を 2 回取得する必要があります。

JavaScript SDK での実装例

// トークンはサーバーサイドで生成してください const token = new SkyWayAuthToken({ jti: uuidV4(), iat: nowInSec(), exp: nowInSec() + 60 * 60 * 24, version: 3, scope: { appId: 'ここにアプリケーションIDをペーストしてください', rooms: [ { id: '*', name: 'sttRoom', methods: ['create', 'close', 'updateMetadata'], sfu: { enabled: true, maxSubscribersLimit: 0, }, member: { id: '*', name: '*', methods: ['publish', 'subscribe', 'updateMetadata'], }, }, ], }, }).encode('ここにシークレットキーをペーストしてください'); const context = await SkyWayContext.Create(token); const room = await SkyWayRoom.FindOrCreate(context, { name: 'sttRoom', }); const me = await room.join(); const { audio: communicationAudio } = await SkyWayStreamFactory.createMicrophoneAudioStream(); // エンドユーザー間の通信にはP2P通信を利用します await me.publish(communicationAudio, { type: 'p2p' }); // 一度PublishしたStreamは再度Publishすることができないので、改めて文字起こし用のStreamを取得します const sttAudio = await SkyWayStreamFactory.createMicrophoneAudioStream(); // 文字起こし機能を利用するために、SFU通信を利用します await me.publish(sttAudio, { type: 'sfu', maxSubscribers: 0, });

文字起こしの開始方法はクイックスタートを参照してください。