使用 Unity 录制并通过 Unity 录制并播放 AR 会话

借助 Recording API 和 Playback API,您可以在给定环境中录制一次视频和 AR 数据,并使用相应内容替换实时的摄像头会话。

前提条件

在继续操作之前,请确保您了解基本 AR 概念以及如何配置 ARCore 会话

与其他 ARCore API 兼容

由于会话数据的处理方式,ARCore API 在播放期间生成的结果可能与在录制期间观察到的不同。在后续播放会话期间,它们可能会产生不同的结果。例如,随着时间推移,检测到的可跟踪对象的数量、其检测的精确时间及其姿态可能有所不同。

与云锚点的兼容性

您可以在录制或回放会话时托管和解析云锚点

正在录制

启动、停止和检查 ARCore 现场录像的状态。

录制 ARCore 现场录像

如需录制整个 ARCore 现场录像,请调用 Session.StartRecording()。如果录制已在进行中,则此方法将失败。即使会话暂停,系统也可能会继续进行录制。如果发生这种情况,ARCore 将继续捕获传感器数据,同时将摄像头画面录制为黑屏。

ARCoreRecordingConfig config = new ARCoreRecordingConfig();
config.Mp4DatasetFilepath = "path/to/file.mp4";

Session.StartRecording(config);

停止录制

如需停止录制,请调用 Session.StopRecording()

Session.StopRecording();

查看录制状态

ARRecordingManager.RecordingStatus 可随时用于确定当前 RecordingStatus

Debug.Log("Current Recording Status: " + Session.RecordingStatus);

播放

播放先前录制的 AR 现场录像。会话会实时播放,并且无法调整会话播放或速度。

播放先前录制的课程

如需播放先前录制的会话,请调用 Session.SetPlaybackDataset() 并提供要播放的数据集的文件路径。您必须暂停会话才能使用此方法。继续会话,以使更改生效。

开始播放后,通过停用 ARCoreSession 暂停会话将暂停处理所有摄像头图像帧,以及数据集中任何其他记录的传感器数据。当会话重新启用后,通过重新启用 ARCoreSession,系统不会以这种方式舍弃了摄像头图片帧和传感器帧数据。由于已处理的数据存在缺口,因此会话的 AR 跟踪通常会受到影响。

// Pause the current session when providing the path.
session.enabled = false;

// In the next frame, provide a filepath for the dataset you wish to play back.
session.SetPlaybackDataset("path/to/file.mp4");

// In the frame after that, resume the session.
session.enabled = true;

从头开始播放

如需从数据集的开头重新开始播放,请暂停会话并调用 Session.SetPlaybackDataset(),指定相同的 MP4 录制内容,然后再恢复会话。

// Pause the current session when re-setting the path.
session.enabled = false;

// In the next frame, specify the same dataset.
session.SetPlaybackDataset(filepath); // filepath is the same path you used before

// In the frame after that, resume playback from the beginning of the dataset.
session.enabled = true;

播放其他会话

如需播放其他数据集,请先调用 Session.SetPlaybackDataset() 并指定新的数据集,然后再恢复会话。

// Pause the current session when re-setting the path.
session.enabled = false;

// In the next frame, specify a new dataset.
session.SetPlaybackDataset(newFilepath); // newFilepath is a different path than the one you used before

// In the frame after that, resume playback from the beginning of the new dataset.
session.enabled = true;

查看播放状态

ARPlaybackManager.PlaybackStatus 可随时用于确定当前播放状态。

Debug.Log("Current Playback Status: " + session.PlaybackStatus);

后续步骤