Table of Contents

Unity で EIF ファイルを録画する

この記事では、シミュレーション実行に使用するために Unity で EIF ファイルを録画する方法について説明します。

開始する前に

録画の開始

FrameRecorder.enabled = true を使用して録画を開始します。例:

if (Session.State >= ARSession.SessionState.Ready && Session.Assembly.FrameRecorder.OnSome)
{
    var frameRecorder = Session.Assembly.FrameRecorder.Value;
    frameRecorder.enabled = true;
}

ここで、ARAssembly.FrameRecorder が存在するかどうかを最初に確認する必要があることに注意してください。

注記

ARAssembly.FrameRecorder は、FramePlayer を使用する場合など、まれな状況では使用できません。

FrameRecorder.enabled のデフォルト値は false で、録画がオフになっていることを示します。エディターで手動で設定しても無効です。

録画は、セッションの実行中に FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready の場合にのみ開始されます。

FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready の場合、OnReady イベントを使用して録画の準備が整うのを待つことができます。

Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
    // 録画を開始できます
});

OnRecording イベントを使用して起動の成功を確認できます:

frameRecorder.OnRecording.AddListener((file) =>
{
    Debug.Log($"録画が開始されました: {file}");
});

起動失敗のイベントはトリガーされませんが、FrameRecorder.StatusError かどうかを確認することで確認できます。

重要

シーン内で EIF を再生したときの実行効果は、録画時に使用したデバイスおよびそのデバイスで当時選択された frame source に依存します。したがって、EIF ファイルを録画する際には、ターゲットデバイスと同じか類似のデバイスを使用して録画し、再生時の効果がターゲットデバイス上の効果と一致するようにすることをお勧めします。同時に、録画シーンでモーション追跡機能が有効になっているかどうかに特に注意を払う必要があります。録画時にモーション追跡機能が有効になっていない場合、再生時にもモーション追跡機能は有効にならず、モーション追跡に依存する AR 機能(高密度空間マップ、Mega など)もデバイス上と同様に動作しません。

録画の停止

FrameRecorder.enabled = false を使用して録画を停止します。例:

frameRecorder.enabled = false;

この操作により録画は即時停止し、ファイル書き込みが完了するまでブロックされます。

重要

録画停止を必ず呼び出してください。そうしないと録画ファイルが不完全に書き込まれ、一部の機能またはファイル全体が使用できなくなる可能性があります:

  • 録画形式が H264 の場合、EIF ファイルは指定された時間点にジャンプして再生(seek)できず、最初から再生するしかありません
  • 録画形式が Obsolete の場合、EIF ファイルは使用できません

ファイルの保存とエクスポート

OnRecording イベントを使用して、録画ファイルの完全な実パスを取得できます:

frameRecorder.OnRecording.AddListener((file) =>
{
    Debug.Log($"録画が開始されました: {file}");
});

デフォルト設定では、録画ファイルはアプリケーションの永続化データパスに保存されます。Application.persistentDataPath を介してこのパスにアクセスできます。

FrameRecorder.Configuration.FilePath を変更することで、録画ファイルの保存パスを変更できます。このパスは録画開始前に設定する必要があり、AutoFilePath をオフにした後にのみ有効になります。ディレクトリは事前に作成しておく必要があります。

重要

録画ファイルの保存ディレクトリが存在し、アプリケーションが書き込み可能であることを保証する必要があります。そうしないと、録画開始時に失敗します。

たとえば、次のコードは、カスタムディレクトリに録画ファイルを保存し、セッションで使用される FrameSource のタイプと現在時刻に基づいてファイル名を生成する方法を示しています:

if (!Directory.Exists(SavePath))
{
    Directory.CreateDirectory(SavePath);
}
var frameRecorder = Session.Assembly.FrameRecorder.Value;
frameRecorder.Configuration.AutoFilePath = false;
frameRecorder.Configuration.FilePath.Type = WritablePathType.Absolute;
frameRecorder.Configuration.FilePath.FolderPath = SavePath;
frameRecorder.Configuration.FilePath.FileName = ARSessionFactory.DefaultName(Session.Assembly.FrameSource.GetType()).Replace(" ", "") + DateTime.Now.ToString("_yyyy-MM-dd_HH-mm-ss.fff");

frameRecorder.enabled = true;

エディターでは、AR Session (EasyAR) を選択し、Inspector ウィンドウで Frame Recorder の Auto File Path のチェックを外した後に設定することもできます:

alt text

ヒント

FrameRecorder.RecordingConfiguration.FilePath を使用して、ファイルの保存ディレクトリとファイル名(拡張子なし)を変更できます。ファイル拡張子は録画形式に基づいて自動的に追加されます。

  • 録画形式が H264 の場合、ファイル拡張子は .mkveif
  • 録画形式が Obsolete の場合、ファイル拡張子は .eif

ファイルがアプリケーションの永続化データパスや他のアプリケーションのプライベートパスに保存されている場合、次の方法でファイルをコンピューターにエクスポートできます:

  • Android プラットフォームでは、USB でコンピューターに接続後、adb pull またはその他の方法を使用してファイルをコンピューターにエクスポートできます。ファイルは通常 /sdcarad/Android/data/<アプリパッケージ名>/files の下にあります。
  • iOS プラットフォームでは、Xcode の Devices ウィンドウを使用してファイルをコンピューターにエクスポートするか、iTunes または Finder のファイル共有を介してアプリケーションのプライベートディレクトリにアクセスできます。
  • コードを使用して、Android のダウンロードディレクトリや iOS のフォトライブラリなどのパブリックディレクトリにファイルを保存します。
注記

iOS アプリの場合、iTunes または Finder のファイル共有を介してアプリケーションのプライベートディレクトリにアクセスしたい場合は、ビルド前に XCode プロジェクトの Info.plistUIFileSharingEnabled キーを追加し、値を YES に設定する必要があります:

alt text

追加後に表示されるテキストが追加した文字列と異なる場合がありますが、これは正常です。

録画形式の変更

FrameRecorder.Configuration.Format で録画形式を変更します。録画開始前に設定する必要があります。

たとえば、次のコードは録画形式を強制的に H264 に設定する方法を示しています:

frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;

エディターでは、AR Session (EasyAR) を選択し、Inspector ウィンドウで Format を変更することもできます:

alt text

注記

H264 は一部のデバイス(Windows など)では使用できません。一般的には Auto を使用することをお勧めします。これにより、デバイスに基づいて適切な形式が自動的に選択されます。

注記

XREAL では、Obsolete 形式で録画されたデータはシミュレーション実行には使用できず、問題のフィードバックにのみ使用されます。

  • シミュレーション実行時には、H264 形式で録画されたデータを使用する必要があります。
  • 問題のフィードバック時には、Obsolete 形式で録画されたデータを使用する必要があります。

RecordingFormat を使用して、現在の録画形式を確認できます。

セッション起動時の自動録画

セッション起動前に AutoStarttrue に設定すると、セッション起動時に録画を開始できます。例:

frameRecorder.AutoStart = true;

エディターでは、AR Session (EasyAR) を選択し、Inspector ウィンドウで Frame Recorder の Auto Start をチェックすることもできます:

alt text

注記

エディター上で FrameRecorder.enabled を変更することは無効です。

Mega で使用可能なデータ

Mega を使用する場合、EIF および関連ファイルの内容に特別な要件があり、古いバージョンの Unity プラグインにはこれらの機能が統合されていなかったため、それらのバージョンで録画されたデータは Mega では使用できません。

以下の状況で録画されたデータは Mega で使用できます:

  • Unity プラグイン 4000 以降で録画されたデータ
  • Mega Toolbox で録画されたデータ
  • データが Obsolete 形式で録画されている場合(例: ファイル x.eif)、同じディレクトリに x.eif.json ファイルが同時に存在する必要があります

以下の状況で録画されたデータは Mega では使用できません:

  • Unity プラグイン 4.6 以前で録画されたデータ
  • ネイティブ EasyAR Sense を使用し、Unity プラグインと同じ内容のデータが追加されていない場合

また、Mega はモーション追跡を使用せずに動作できますが、実行効果は異なります。ほとんどの使用シナリオで再生時の効果が期待に沿うように、EIF ファイルを録画する際にはモーション追跡機能を有効にすることをお勧めします。

次のステップ