MicrosoftのMixedRealityシリーズとしてWebRTCの機能がGitHubに公開されています. 実行環境の構築からサンプルでの動作確認までを行ってみます.
WebRTCとは
- WebRTC自体の説明については以前の記事で紹介しています.
MixedReality-WebRTC概要
- コードはhttps://github.com/microsoft/MixedReality-WebRTC
- ドキュメントはhttps://microsoft.github.io/MixedReality-WebRTC/
- 現在(2019/9/16)はPublic Preview状態
- WebRTCの実装はwebrtc-uwpのライブラリを使用
- WebRTCのバージョンはm71をサポート(今後はm75もサポート予定)
- 2DUWPアプリ,UnityEditor実行,HoloLens 1とHololens 2で実行をサポート(x86,ARM,x64でのUWP実行が可能)
MixedReality-WebRTC導入
実行環境
- 複数台Windows10PC
- HoloLens
- Visual Studio2017
- ビルド用コンポーネントをインストール
- WindowsSDKは16299以降のバージョンで利用可能
- Unity2018.4
- UWPコンポーネントをインストール
- git実行環境
WebRTC-Plugin作成
ファイルまでのpath名がWindowsの文字数制限255文字以上になってしまう可能性があるので,できるだけルートディレクトリ(C:)にプロジェクトを作成しておいた方がいいです.
Cドライブ直下にmr-webrtcフォルダを作成し,以下のコマンドをコマンドプロンプトより実行
git clone --recursive https://github.com/microsoft/MixedReality-WebRTC.git -b master C:\mr-webrtc
リポジトリのクローンに成功後,Microsoft.MixedReality.WebRTC.slnをビルドすることでUnity用のPluginが作成できます.
ソリューション構成をReleaseにしてソリューションプラットフォームをARM,x86,x64に切り替えてそれぞれビルドを行います.
- ARM -> x64 -> x86の順番でビルドしないとビルドエラーが出る場合があります
ビルドに成功すればbinフォルダ内に2DのUWPアプリとUnityでのWebRTCを利用できるプラグインが作成されます.
シグナリングサーバー作成
- WebRTCにはクライアント同士の接続先情報をやり取りするためのシグナリングサーバーが必要になります.
- MixedReality-WebRTCではシグナリングサーバーとしてnode-dssを利用しています.
- node.jsを利用しているためnode.jsをインストール
- node-dssを以下のコマンドでクローン
- コマンドプロンプトは外部と通信を行うため「管理者として実行」で実行してください
- 場所はわかりやすいところ(例えばC:\node-dssなど)で実行
git clone https://github.com/bengreenier/node-dss.git
クローンに成功したら続けて以下のコマンドでnode-dssを実行します
1234
cd node-dss set DEBUG=dss* npm install npm start
実行に成功したら以下の画像のような表示になります.
WebRTC実行時にnode-dssを実行しているパソコンのIPアドレスを入力する必要があります.
Testアプリ実行
- PluginをビルドしたMicrosoft.MixedReality.WebRTC.slnからMicrosoft.MixedReality.WebRTC.TestAppUwpプロジェクトをビルド,実行します.
- 実行後SignalingのServer addressの項目にnode-dssを実行しているPCのIPアドレスを入力します.
- 入力後
Start polling
ボタンを押してサーバーに接続します. 接続が成功するとnode-dssのコマンドプロンプトに以下のようにUIDが表示されます.(赤線の部分)
- node-dssではWebRTCでクライアント同士を接続するためにUIDを利用しています.
- そのため接続したい相手のUIDを知っている必要があります.
- 表示されているUIDをもう一台のPCでメモをしておきます.
接続相手のUIDをそれぞれメモを取っておき,再度テストアプリを実行します.
SignalingのRemote peer UIDに接続先のUIDを入力して
Start polling
します.ポーリング開始後Connectionから
Create offer
ボタンを押して接続を開始します.接続後Channelsの
Start local video
でWebRTCによるビデオチャットとメッセージが行えます.
Editorサンプルシーン動作
- \Microsoft.MixedReality.WebRTC.Unity にUnityのEditorとUWPでの実行が行えるサンプルプロジェクトがあります.
- Plugin作成が正常に行えていれば \Assets\Plugins ないにPluginがあらかじめ配置されているのでそのままUnityで開きます.
- Microsoft.MixedReality.WebRTC.Unity.Examples/VideoChatDemo/VideoChatDemo.unityがサンプルシーンになります.
- 開いたシーンのVideoChatDemo/PeerConnectionのGameObjectにシグナリングサーバーのIPアドレスと接続先UIDの入力欄があります.
- 入力後PlayボタンでEditor上での実行が行えます.
- 2DのUWPアプリとの接続も行えます.(メッセージはできない)
- 設定しているBuild PlatformによってEditor上での挙動が若干異なります
- PlatformがStandaloneの場合
- 接続のため
Create offer
ボタンがある - PlatformがUWPの場合
- HoloLens用のため自動で接続するようになっている
HoloLensサンプルアプリ動作
- Unity EditorでBuildSettingsのPlatformをUWPに変更することでHoloLensアプリとしてビルドが行えます.
- この時シグナリングサーバーのIPアドレスと接続相手のUIDの入力はあらかじめ行ってからビルドを行ってください.
https://t.co/QAXy0gT8v1
— アキヒロ (@akihiro01051) August 4, 2019
HoloLensでも動いたよ#HoloLens pic.twitter.com/vZwQ3GT9Nh
コマンドプロンプトを特定の場所で開きたい場合
- エクスプローラーのPath表示部分に
cmd
を入力することで開いているフォルダからコマンドプロンプトを実行できます.(移動の手間が省ける)- 管理者で実行は行えないため,管理者で実行を行うためにはWindowsキーから
cmd
を入力して右クリックから行えます
まとめ
- サポートしているWindowsSDKのバージョンが古いためMixedReality-WebRTCはSurface Hub 2用にビルドできなかった.
- こっちは動作しました.UWP環境でのWebRTC導入方法
. @akihiro01051 「私はSurface HubでWebRTCを動かしました」 pic.twitter.com/9o7Dftk3IC
— 広務(Hiromu) (@hirom) September 10, 2019
- たぶんHololens 2でも動くかも
- Public Previewのため今後も変更,修正が行われるはず