3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

sora-unity-sdkがAndroidに正式対応したらしいのでサンプルを動かしてみた

Last updated at Posted at 2020-07-25

a.gif

株式会社時雨堂様が提供してくださっているsora-unity-sdkがAndroidに正式に対応したらしいので、サンプルを動かしてみました。

試した環境

sora-unity-sdk 2020.5

PC
Windows10
Unity2019.1.14f1

スマホ
Android10
Motog8

1.サンプルの入手

GitHubから入手。
https://github.com/shiguredo/sora-unity-sdk-samples

READMEに依ると

sora-unity-sdk のインストール
Windows の場合は install.bat を、macOS の場合は install.sh を実行して下さい。 これで各種サンプルを実行するために必要になる sora-unity-sdk をインストールできます。

とのことなのでinstall.batを実行します。しかしこの実行ファイルの中身を見てみるとsora-unity-sdk v2020.4をインストールする設定になっているようです。今回、試したいのは2020.5だったのでinstall.ps1の$SORAUNITYSDK_VERSIONを修正します。

install.ps1

$SORAUNITYSDK_VERSION = "2020.5"

修正した上でコマンドプロンプトでinstall.batを実行して、sora-unity-sdk v2020.5をプロジェクトにインストールします。

mojikyo45_640-2.gif

2.Sora Laboを使うように設定

とりあえず動かしてみたいので、時雨堂様が提供してくださっているSora Laboを利用します。検証目的なら無償で利用できますが、商用利用はできないようです。簡単な利用規約があるのでよく確認してから利用しましょう。今回は検証目的なので大丈夫です。
https://sora-labo.shiguredo.jp/
mojikyo45_640-2.gif

サインアップしてログインしたらUnityに戻って設定していきます。

適当なサンプルシーンを開きます。今回はmulti_sendrecvにします。
mojikyo45_640-2.gif

ScriptというオブジェクトにアタッチされているSora SampleコンポーネントにSora Laboに接続するための設定を記入していきます。

Sora Laboのダッシュボードに記述してあるシグナリングURL, シグナリングキーをコピペしてUnityのSora Sampleコンポーネントに貼り付けます。

mojikyo45_640-2.gif

次にChannel Idを設定します。sora-laboのドキュメントに依ると

チャネル ID を <自分の GitHub Username>@<好きな Room ID> のように指定してください

とのことなので適当に設定します。ここでは便宜上<GITHUB_USERNAME>@sora-laboとします。

また、今回はUnityのカメラを送受信したいので、Capture Unity Cameraのチェックを入れます。

mojikyo45_640-2.gif

ここまでの設定でUnity Editor上で挙動を確認できるようになったはずです。Sora Laboにマルチストリーム受信というページがあるので、そこから確認してみます。Unityカメラの映像がブラウザから確認できるはずです。

mojikyo45_640-2.gif

3.Androidで確認できるように設定

Android向けにビルドして実機で確認できるように設定していきます。まずビルドターゲットをAndroidに変更します。

sora-unity-sdkのドキュメントによると

  • arm64-v8a のライブラリしか入れていないので armeabi-v7a の端末では動きません。
    • libSoraUnitySdk.so のインスペクタ -> Platform settings -> Android の設定で CPU が ARM64 になっていることを確認して下さい。
    • Player Settings -> Other Settings -> Target Architectures で ARM64 にチェックが入っていることを確認して下さい。
  • Vulkan で動かす必要があります。
    • Player Settings -> Other Settings の Graphics APIs で Vulkan が先頭にあることを確認して下さい。
  • OpenGLES モードでの動作は未確認です。
  • 最低でも API LEVEL 24 (Android 7.0)が必要です。
  • Pixel 3 で解像度が 16 の倍数じゃない時に映像が乱れる問題があります。

とのことなので、書いてある通りに設定していきます。

まずAssets\Plugins\SoraUnitySdk\android\arm64-v8a\libSoraUnitySdk.soのTarget ArchitecturesをARM64に変更します。変更したら忘れずにApplyしましょう。

mojikyo45_640-2.gif

次にPlayer Settingsの設定を変更していきます。Other SettingsのTarget ArchitecturesをARM64に。Graphics APIsのAuto Graphics APIのチェックをはずしてVulkanに設定します。さらにMinimum API LevelをAPI LEVEL 24にしておきましょう。

mojikyo45_640-2.gif

4.オブジェクトが映らない問題

一応、以上で設定はできたはずなんですが、私の環境だと問題が発生しました。Unityのカメラにオブジェクトが映らないという問題です。

mojikyo45_640-2.gif

本来なら球体が映らはずだけど、映らない。この問題はAndroidの実機だけじゃなくてUnity Editor上でも発生しました。

結論から言うと、Project Settings->Graphics->Tier SettingsのUser DafaultsのチェックをはずしてUSE HDRのチェックを入れると解決します。

mojikyo45_640-2.gif

この問題が起こった理由は特定できていませんが、検証してみた結果、ShaderのRenderTargetがOpaqueのオブジェクトが映らないという症状のようです。RenderTargetをTransparentにすると映るようになりました。まだBuild Settingsで対象プラットフォームをPCにしても治るようです。たぶんVulkan関連の何かが原因な気がします。

何か必要な設定を忘れていたのか、自分の実行環境の問題なのか、よく分かりません。

なんか描画順とか、Unityのカメラをキャプチャしてテクスチャにする処理とかに何かヒントがある気がします。WaitForEndOfFrameのタイミングでUnityのカメラの映像をVulkanを直接叩いてキャプチャするっていう実装になっているようなんですが、これでなんで映らないのか謎です。WaitForEndOfFrameは描画系の処理の最後に実行されるようなので、キャプチャするタイミングとしては適切な気がします。

原因を探るならたぶんこの辺のキャプチャする仕組みがどうなってるのか見る必要がある気がするんですが、Vulkanとか低レイヤーのことは門外漢なので、私にはよく分からなかったです。今回はとりあえずUSE HDRのチェックを入れたら写ったので良しとしました。
https://github.com/shiguredo/sora-unity-sdk/blob/develop/src/unity_camera_capturer_vulkan.cpp

5.結果

ということでsora-unity-sdkをAndroidで使うことができました。

a.gif

使っているスマホはMotog8というローエンド端末なんですが、想像以上にヌルヌル動きます。遅延もほとんどないと言っていいんじゃないでしょうか。すごいですね。

6.最後に

先日、NDI SDKをAndroidで使うっていう記事を書きました。NDIはローカルネットワーク上で映像や音声の送信を行うのに対してsora-unity-sdkはSoraを介してどこからでもアクセスできます。

またNDI SDKのAndroid実装は送信にしか対応してませんでしたが、こちらは送信も受信もできます。ただSoraを商用利用するにはお金がかかります。(NDI SDKは無料だったはず)

NDIもWebRTCも使うなら、表面的な理解だけでは駄目で、チューニングして軽量化したりする必要がありますね。

追記

特定のオブジェクトが映らない問題は修正されたようです。
https://github.com/shiguredo/sora-unity-sdk/commit/417477dca1532474703c16d1f271f08979d4ffb5

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?