なぜ Unity 向け SDK を開発しているのか

V
shiguredo
Published in
7 min readAug 16, 2020

先日、時雨堂が開発している WebRTC SFU Sora の Unity 向け SDK である、Sora Unity SDK が iOS に対応しました。これで Sora Unity SDK は Windows / macOS / Android / iOS の 4 プラットフォームに対応したことになります。

なぜ時雨堂が Unity 向けの SDK を開発しているのかというのを、開発宣言から約 1 年経った今書いていこうと思います。

要約

  • Momo のノウハウが使えると判断したから
  • Unity から公式ライブラリが出てきたから
  • ソースコードを公開することで Unity 公式に貢献したい
  • 少なからず需要はあると判断したから
  • Linux 版は優先実装依頼を待っている

WebRTC Native Client Momo の存在

Sora Unity SDK の前に実は Momo を紹介する必要があります。Momo は libwebrtc を利用したブラウザレスで動作する WebRTC ネイティブクライアントです。SDL を利用することで受信も可能にしているためこれ一つで送受信が可能です。

Momo は C++ でゴリゴリ書かれているのですが、このノウハウをそのまま Unity 側に持っていくことが可能ではないのかと めるぽんと話をしたのがきっかけです。

実際 Sora Unity SDK は Momo のコードを大量にコピペしています(めるぽん談)。

Momo のノウハウが使えるというのは実はかなり偉大で、ハードウェアアクセラレータがそのまま利用できるようになります。これはもともと負荷の高い処理が多いであろう Unity で作るアプリの負荷が減らせるという強みがあります。

Momo はおそらく現時点で世界で一番多くのハードウェアアクセラレータが使える WebRTC ネイティブクライアントです。そのノウハウが生きるのは美味しいと判断したことが理由の一つです。

Unity 公式ライブラリの登場

Unity が公式で libwebrtc をラップしたライブラリを提供してくれています。なぜ公式が提供しているにも関わらず、自社で開発しているのかという話をしていこうと思います。

実は Unity 公式の WebRTC ライブラリを開発しているのは知り合いの元同僚だったということもあり、繋いでもらいリリース直後に Unity 社にお伺いして、お話をすることができました。

UnityRenderStreaming を実現する仕組みの一つというわけではなく、多くのユーザに使ってもらえるようにという方針なのも、その時に教えていただきました。めちゃくちゃ丁寧に対応していただいて、本当に感謝しています。

時雨堂の SDK は基本的に Sora のシグナリングを WebRTC ライブラリにラップしていくものとして公開しています。さらに当たり前ですが、仕様が Sora にかなり引っ張られます。そのため、libwebrtc 以外は可能な限り依存性を減らしています。

ここに来て Unity 公式のライブラリに依存するというのは、 Unity 公式に「自社製品都合」になる改善提案を出すことが出てきた場合、結果的に Unity 公式のライブラリを fork し、それをメンテナンスしていく可能性が高いと判断しました。

Unity と WebRTC の需要

Unity 公式ライブラリが登場したことで、 Unity で WebRTC を利用する機会が多くなり、結果的に Sora で Unity ライブラリは使えないのか?と聞かれることが出てくるとも感じていました。

実際、現時点で Unity で WebRTC を利用するなら Sora と組み合わせて使うのが簡単そうだったからということで Sora の導入を決めてくださったお客様もいらっしゃいます。

現時点で WebRTC SFU と Unity を組み合わせて利用したい場合は Sora 一択になるかと思います。

WebRTC P2P と Unity の可能性

WebRTC SFU と Unity の組み合わせは Unity + WebRTC 市場の 20% くらいだと見ています。残りの 80% は WebRTC P2P と Unity の組み合わせになると思います。

時雨堂では Ayame という WebRTC P2P 向けのシグナリングサーバーを公開していますが、こちらでは Unity 向けの SDK は開発していません。シグナリングの仕様がとてもシンプルということもあり、 Unity 公式ライブラリを利用して実際に開発してもらいたいと考えています。

Unity 公式ライブラリへの貢献

Sora Unity SDK はすべてのコードを Apache License 2.0 として公開しているため、気軽に再利用可能です。

Unity 公式の方が面識があるという事もあり、積極的にコードを参考にしていただいて取り込んでいってほしいなと思います。一緒に WebRTC という技術を利用した市場を盛り上げていければと考えています。

需要はあるのか

現時点では開発投資分は十分回収できています。むしろプラスです。さらに Sora を Unity SDK 目的で購入していただいているお客さんのことを考えるのであれば、客層の幅が広がったこともあります。

ただ、他社が真似をしても苦しいと思います。WebRTC SFU を自社で開発しており、さらに ImageFlux Live Streaming のように「自前で運用しなくてもWebRTC SFU を使える環境がある」というのは大きいです。

また Momo が最先端の技術を積極的に取り入れていることもあり、それらを Sora Unity SDK にフィードバックできるのも強みです。

実際、Sora Unity SDK の次のリリースでは、WebRTC SFU と組み合わせることで画質の選択が可能になる、サイマルキャストへの対応を予定しています。

Linux 版への対応

Unity 公式が Linux 版に対応しているということもあり、もしかするとSora Unity SDK でも対応してほしいと考えている人はいるかもしれません。ただ Unity での Linux 対応ってどうしても WebRTC P2P ありきになってしまうと考えています。

そのため、優先実装依頼待ちです。もし興味があるかたはご連絡ください。

まとめ

Sora Unity SDK は Momo の恩恵を受けながらアップデートしていく予定です。ただ Unity 寄りの機能はすごく弱いままです。

Unity 公式のライブラリではおしゃれな WebRTC Stats 画面が追加されていたりしていましたが、弊社では Sora Unity SDK にこれらの便利な機能を追加する予定はありません。Sora 側でなんとかしていくつもりですのでお待ち下さい。

是非 WebRTC SFU Sora と Unity の組み合わせでなにか作ってもらえると嬉しいです。

個人であれば気軽に Sora Labo を使うことで Sora Unity SDK が試せますので是非。

--

--