Nrealでの録画機能について

# 動作環境
- macOS version 12.3.1 Monterey Intel Core i9
- Unity 2020.3.8f1
- NRSDKForUnityAndroid_1.8.0.unitypackage
- NrealLight モデル：NR-9101GGL
- Xperia 5 Ⅱ SOG02SLA
# 元からある録画機能
NRSDKForUnityAndroid_1.8.0.unitypackageをUnityにインポートすると、Assets/NRSDK/Demosの中にRGBCamera-Recordが作られており、これをbuildするとNrealのカメラから動画が取れる。
アプリを実行すると、録画の設定に関するパネルが表示されるので好きな設定を選んで、赤い丸をコントローラーでクリックする。
<iframe width="560" height="315" src="https://www.youtube.com/embed/NBEUZPxOr1I" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
録画している間は、赤い丸が緑の丸になる。録画をやめたいタイミングで緑の丸をコントローラーでクリックする。

QualityがMiddleの場合、（自分の環境だと）１分程度録画ができるが１分以上になると録画した動画が見れなくなるので注意。
# 他のシーンを録画したい場合
RGBCamera-Recordのシーンにある、VideoCaptureExampleオブジェクトを丸ごと録画したいシーンに配置すればOK。
今回はHelloMRにVideoCaptureExampleオブジェクトを置いた。
![Screen Shot 2022-06-22 at 15.53.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2700137/c51969b3-0d2a-3c05-9753-45425b19f440.png)
このシーンをbuildして録画するとこんな感じ。
<iframe width="560" height="315" src="https://www.youtube.com/embed/7Yb83rnF28w" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

# 自分がつまずいた所
RGBCamera-Recordを使って録画すると、動画の保存先がXperiaのどこなのかわからないという問題にぶつかった。
これはおそらく、VideoCapture2LocalExample.csのVideoSavePathが原因で、
```c#:VideoCapture2LocalExample.cs
        /// <summary> Save the video to Application.persistentDataPath. </summary>
        /// <value> The full pathname of the video save file. </value>
        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);`を`return Path.Combine("/sdcard/Download/", filename);`に変えるとXperia（SOG02）のDownloadに保存された。
![XRecorder_22062022_184635.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2700137/eb7bbc9f-8ad2-0d09-f45f-e60d1d4bf618.jpeg)
![XRecorder_22062022_184842.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2700137/c35731fb-5846-d7ab-9bca-f13a854ecb38.jpeg)

Andoridの設定で内蔵ストレージのトップ（ルートディレクトリ）として見えているのが/sdcard/なので、保存先を変えたければ、`/sdcard/好きな保存先`としてやれば良さそう。

# 追記：Application.persistentDataPathの理解
`return Path.Combine(Application.persistentDataPath, filename);`のせいで動画の保存先がXperiaのどこなのかわからない問題が起こっていたが解決したので追記。
Application.persistentDataPathを使うと、`android/data/<アプリの名前>/files`の下に動画が保存される。
例えば、UnityでアプリをBuildするときにパッケージ名を`com.DefaultKentoCompany.HelloMRRec`としていた場合
![Screen Shot 2022-07-04 at 10.23.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2700137/1cba50f4-7bec-b0c4-c15e-640c281d767c.png)
動画の保存先は`android/data/com.DefaultKentoCompany.HelloMRRec/files`の下に動画が保存される。
# 参考文献
- [NrealのRGBCamera-Recordについて](https://nreal.gitbook.io/nrsdk/advanced/recording)
- [Application.persistentDataPathについて](https://docs.unity3d.com/ja/2019.4/ScriptReference/Application-persistentDataPath.html)