Unity
WebRTC
Video
gstreamer
SkyWay

SkyWay WebRTC GWを利用してUnityでWebRTC Videoをレンダリングする

やったこと

最近公開されたSkyWayWebRTC Gatewayを利用して、WebRTCの映像をUnityでレンダリングしてみました。
具体的な実装方法についてざっくり記載します
=> 2018/7/13追記: ソースコード公開して解説記事を書きました。 https://qiita.com/nakakura/items/a99c468c56db2a92b32f

実装

Unityへのテクスチャ取り出しについては、MHD Yamen Saraiji氏のmrayGStreamerUnityを利用しました。Thanks Yamen!
mrayGstreamerUnityはその名の通り、gStreamerというオープンソースアプリケーションで処理する動画データをUnityのテクスチャとして取り出すためのUnity Pluginです。
gStreamerを利用すると動画をRTPで送受信することができるため、別の端末から映像を配信してUnityで描画することができます。

mrayGstreamerUnityの構造

平たく言うと、RTPで動画を送ればUnityのテクスチャを生成してくれる便利なUnity Pluginとして利用することができます。
ここでSkyWay WebRTC GWを利用します。
SkyWay WebRTC GWはMediaStreamで受け取ったメディアをRTPで外部に転送してくれる機能があります。
これを利用して、mrayGstreamerUnityの受信ポート宛に転送してやれば描画してくれます。

SkyWay WebRTC GWの利用

SkyWay WebRTC GWはDataChannelも扱えるので、Unityアプリケーション間でのデータのやりとりも可能です。
UDPでデータの送受信をしてやれば、Unity間でインターネット経由でのチャットやデータ転送も可能です。

Untitled Diagram-Page-2 (3).png

できるようになったこと

  • UnityアプリケーションからのWebRTC利用(インターネット越しの映像・音声通信・データ転送)
    • Unityアプリケーションとブラウザ間でビデオ通話
    • Unityで作ったVRアプリケーション間で通話

例えば、VRゲームの途中で、メタルギアソリッドの無線みたいな感じで通話できるようになる。
ARアプリケーションでリアルタイムにナビを行える。etc.

公開について

まだソースコードがきちゃない状態なので、整理したあとUnity Pluginとして公開しようと思っています。