借助 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);
后续步骤
- 了解如何向录制的会话添加自定义数据。