リアルタイムメッセージング機能の詳細

リアルタイムメッセージング機能

Sora では音声や映像に加えて、メッセージもリアルタイムに送受信することができます。そのため、メッセージ専用サーバーを別途用意する必要はありません。 もともと、WebRTC にはデータチャネル (DataChannel) と呼ばれる P2P でデータを送受信するための規格があります。

WebRTC のデータチャネルについて

WebRTC のデータチャネルは、P2P 接続を通じてデータをリアルタイムに送受信するための規格です。このデータチャネルを利用すれば、テキストやファイル、バイナリデータなどを効率的に送受信することが可能です。
データチャネルには以下のような特徴があります。
  • データチャネルは、音声もしくは映像と同一の WebRTC コネクション内に作成できます
  • データチャネルは、一つの WebRTC コネクションに複数作成できます
  • データのやりとりは P2P を前提とした 「送受信」 のみであり、「送信のみ」 「受信のみ」 はできません
  • データチャネルには、それぞれに固有の 「ラベル (label)」 をつけることができます
  • データチャネルのラベルごとに、データを送信する際の順序保証や到達保証を指定できます
  • ※ 順序保証はデータパケットを送信した順番通りに届けるか、到達保証は相手が受信するまでに何度再送するかなどを決定します

Sora のリアルタイムメッセージング機能は、このデータチャネルを WebRTC SFU に応用して実現しています。加えて、下記で説明する独自の仕様を追加し、サービスに合わせてメッセージングのやりとりを柔軟にコントロールできるようにしています。

label (ラベル)
Sora では、メッセージを送信する際に 「#」 で始まる任意の label を指定できます。 これにより、メッセージを送信するクライアントは、その label のメッセージを受信するようあらかじめ認証サーバーに登録されているクライアント全員に対して、メッセージを一度に送信できます。 また、メッセージを受信するクライアントも、特定の label が指定されたメッセージだけを受信し、その他の不要なメッセージは受信しないようにすることが可能です。
direction (方向)
Sora では、音声や映像と同様に、やりとりするメッセージの方向を 「送受信 (sendrecv)」 「送信のみ (sendonly)」 「受信のみ (recvonly)」 の 3 種類から選択できます。この direction は認証サーバーの登録情報に基づき、各クライアントと Sora の間の通信に対して個別に設定されます。 これにより、セキュリティの観点からメッセージを送信できるクライアントを限定したり、必要のないメッセージは受信しないようにしたりすることが可能です。
メッセージングヘッダー
Sora では、どのクライアントが送信したメッセージかが分かるように、送信者を特定するためのヘッダーをメッセージに追加することができます。このヘッダーの追加は、メッセージを送信するクライアントではなく Sora が行うため、なりすましなどによる不正な送信者情報が追加されることはありません。
リアルタイムメッセージング機能を利用したシステム例
以下は、Sora のリアルタイムメッセージングを利用して無人のブルドーザーを遠隔操作するシステムのイメージ例です。
  • 映像 : ブルドーザーのカメラ映像を遠隔操作者とサポートオペレーターに送信します
  • メッセージ (label #notify) : ブルドーザーの異常検知情報を遠隔操作者とサポートオペレーターに送信します
  • メッセージ (label #command) : 遠隔操作のリモコン情報をブルドーザーとサポートオペレーターに送信します
  • 音声 : 遠隔操作者とサポートオペレーターが双方向で音声を送受信します (音声通話)
リアルタイムメッセージング機能の詳細は ドキュメント をご参照ください。