Nrealで録画をする方法

Nreal Lightを買った!試しに動くものを作ってみた!

動画を撮って公開したいけど、公式のサンプルが動かなくて困った...

ということ、ありませんか?

いろいろと調べてみたのですが、どうやらNrealの公式サンプルはそのままでは動かず、少し変更を加えないと録画機能が使えないようです。この記事では今日から使えるNreal録画機能の実装方法をご紹介します。

Nreal公式サンプルRGBCamera-Recordを動かす

Unityのバージョン:2019.4.18f1
Nreal SDKのバージョン:1.6.0

まずは録画機能の確認のため公式サンプルを動かしていきます。

サンプルのパス:

Assets > NRSDK >Demos > RGBCamera-Record

シーンを開くと、VideoCaptureExampleというゲームオブジェクトがあるので、そのScriptを開きます。

VideoCapture2LocalExample.cs

public string VideoSavePath
{
   get
   {
       string timeStamp = Time.time.ToString().Replace(".", "").Replace(":", "");
       string filename = string.Format("Nreal_Record_{0}.mp4", timeStamp);
       return Path.Combine(Application.persistentDataPath, filename);
   }
}

変更が必要なのはこの一行:

return Path.Combine(Application.persistentDataPath, filename);

Application.persistentDataPathを使ってアプリケーション毎の永続データディレクトリへのパスを取得してファイルを保存しようとしているようなのですが、どういうわけか、このままでは保存できません。(理由がわかる方がいらっしゃいましたら、ご教授いただけると幸いです。)

明示的にパスを指定します。デフォルトでMoviesというフォルダがsdcard内にあるので、私は基本的にその場所を指定しています。

return Path.Combine("/sdcard/Movies/", filename);

実装はこれで完了です。シーンをビルドして録画をします。

動画の確認方法

この方法で録画した動画を確認するときは、まず「ファイル」というアプリを立ち上げます。あまり目立たないアプリアイコンなので「アプリを検索」で探すのが簡単です。

ファイルアプリを立ち上げたら、左上のハンバーガーメニューをタップし、「動画」を選択します。ここに「Movies」というフォルダが表示されるので、「Movies」を選択。

きちんと録画ができていれば、動画が一覧に表示されます。

(録画できていても、ここに表示されないことが稀にあります。そういうときはadb shellで接続してMoviesディレクトリを確認して、adb pull sdcard/Movies/. すると良いかもしれません。)

サンプルシーンから自分のシーンへの移植

録画機能が問題なく動かせることを確認したあとは、自分のシーンに実装したい。いろいろな方法があると思うのですが、備忘も兼ねて、簡単に自分のやり方をご紹介します。

まず、VideoCapture2LocalExample.csをコピーして自分自身のバージョンを作成します。(SDKの中のスクリプトを変更しても、SDKを更新するたびに上書きされてしまうので、このほうが安心です。)以降、このスクリプトをVideoCapture2Local.csと呼びます。

次に、自分のシーンに空のGameObjectを作成し、先程作成したVideoCapture2Local.csをアタッチします。

最新のSDK 1.6.0ではCullingMaskを指定できるようになりました。デフォルトでは「Nothing」になっていて何も映らないので、この設定を「Everything」に変更します。

任意のイベントからVideoCapture2Local.csのStartCapture, StopCaptureを呼び出します。

完成です!!!

あとがき

こちらが実際に撮影したものになります!
XR開発ブートキャンプに参加できて楽しかったです。

最後に、この機能の実装には @memento321 さんに助言をいただきました、ありがとうございました!


この記事が気に入ったらサポートをしてみませんか?