Wataプロジェクト
Wataプロジェクトを始めました。現在開発中です。
進捗をちょこちょこ報告していこうと思います。
Wataプロジェクトの情報は以下にまとめています。
Wataとは何か
Wataは、1:N でのオーディオとデータの同期配信を行うためのライブラリです。
WataサーバとWataクライアントがあり、1つのWataクライアントが配信したオーディオとデータを、Wataサーバを経由して、複数のWataクライアントが受信できるようになっています。
この製品は有料で提供します。ある程度動いたタイミングで体験版みたいなのを出せたらと考えています。
Wataの特徴
Wataの現在の特徴として、以下のものがあります。
- 低遅延である
- オーディオとデータ(例えば音声とモーション)の同期が取れる
- Wataクライアントが macOS, iOS の Unity 上で動作する
どの程度の低遅延かというのは、以下の動画を見れば分かります。
これは AWS EC2 の t2.micro インスタンス上に Wata サーバを立てて、同じ iOS の端末上で Wata クライアントの配信と受信を行っています。実際には配信と受信は別の端末になるでしょう。
爪で画面を叩いた音が、すぐに聞こえてくるのが分かります。(聞こえなければ音量を大きくして下さい)
また、音が鳴ったのと同時に一瞬だけ白く光っているのが分かります。これはタップした際にデータを送信していて、そのデータを受信した時に1フレームだけ白く光らせています。
爪で音を鳴らすのとタップしたのがほぼ同時に行われていて、その音が配信されて聞こえるのと白く光るのが同時に起きているので、オーディオとデータが同期できているのが分かります。
中身について
Wataサーバは全てC++で書かれています。
WataクライアントはほぼC++で、これをUnityのネイティブプラグインとしてラップしてWataクライアントを作っています。
WataサーバとWataクライアントは gRPC で通信しています。
Wataクライアントは、低遅延のために可能な限りプリミティブに近い機能を使って録音し、そのオーディオをOpusで圧縮してgRPCに乗せて送信しています。
今後の開発
今後は以下の開発を行っていきます。
- 大規模(1万接続)でも動作するようにする
- Windows, Android でも動作するようにする
WataサーバはC++で書いているので、1万接続というのは割とすぐに出せるんじゃないかと思います。ただ実験するためのコードを書くのが大変です。
クロスプラットフォームで動くのは重要なので、WindowsとAndroidでも動くようにしていきます。こちらもUnityのネイティブプラグインになります。