借助 Recording & Playback API,您可以录制会话并将其用作实时相机画面。不过,这些录制内容仅包含视频和传感器数据。您还可以向会话录制添加自定义数据,并在播放期间将数据返回给您,就像这些数据是相机图片的一部分一样。
ARCore 不会自动在录制内容中添加任何自定义数据。而是允许您在录制期间向 ARCore 帧添加自定义数据,并在播放期间从帧中检索这些数据。您需要自行编程,确保用户在重放会话时能获得预期的数据。
自定义数据的用例
向录制内容添加自定义数据可拓展 AR 应用的可能性。以下是一些具体的使用场景。
随时随地使用 AR
过去,用户只能在合适的地点和时间访问 AR 体验。如果他们想在客厅放置一盏 AR 灯,就必须亲自站在相应位置,才能看到灯在那里会是什么样子。借助自定义轨道,他们只需录制一次客厅,便可随时随地向场景中添加虚拟家具。
共同打造 AR 体验
无需实时会话,用户就有更多 AR 编辑选项,能够随时随地创建和访问独特的 AR 内容。例如,他们可以录制给定环境,添加增强现实效果,并与好友分享。
前提条件
在继续操作之前,请确保您了解基本 AR 概念以及如何配置 ARCore 会话。
使用自定义数据初始化录制
请按照以下步骤使用自定义数据初始化录音。如需开始、停止和检查录制会话,请参阅录制和播放 AR 会话。
- 获取
ARCoreRecordingConfig
。 - 使用自定义 UUID 创建新的
Track
。所有自定义数据都将保存在此处。 - 将
Track
添加到您在会话配置期间创建的ARCoreRecordingConfig
。
// Initialize a new track with a custom UUID.
// Make sure to save the UUID because it is the ID that you will use
// to get your data back during playback.
var track = new Track {
Id = Guid.Parse("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator
};
// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
List<Track> tracks = new List<Track>();
tracks.Add(track);
recordingConfig.Tracks = tracks;
所有新轨道都被视为单独的录音,每个录制的轨道都占有自己的 UUID。
使用其他数据配置轨道
使用描述会话录制的其他数据配置轨道。 例如,您可以通过添加注释来“标记”轨道,注释中说明了录制会话的地点和时间:“此会话是在下午在购物中心录制的。”
// Set additional data on this track.
// For example, describe where you recorded the session.
byte[] metadata = ...
track.Metadata = metadata;
使用 MIME 类型配置轨道
使用描述轨道中记录的数据类型的 MIME 类型配置轨道,以便与外部工具兼容。
如果您未指定类型,系统会将数据归类为 application/text
。ARCore 在读取数据时会忽略 MIME 类型。
// Set a MIME type for compatibility with external tools.
track.MimeType = "text/csv";
记录自定义数据轨迹
所有自定义轨道数据都会记录到帧中。您将数据记录到帧的时间与播放期间返回数据的时间相同。例如,如果您在 00:07:02
调用 RecordTrackData()
并传入值“A”,则在轨道播放时,您会在 00:07:02
标记处收到“A”。
如需记录自定义数据轨道,请调用 RecordTrackData()
。
// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
// Convert the lamp data into a byte array.
var lampData = new byte[] { (byte) Lamp.FLOOR }; // a floor lamp
recordingManager.RecordTrackData(trackGuid, lampData);
}
播放自定义数据轨道
在播放期间从会话录制内容中提取自定义数据。
初始化播放
使用自定义数据初始化播放与初始化常规会话录制的播放相同。
返回自定义数据
调用 GetUpdatedTrackData()
可检索帧上记录的自定义数据。您可以从同一帧中检索多个轨道数据。例如,如果您在录制期间对同一帧调用了 RecordTrackData()
两次,则在播放期间会收到两个 TrackData
实例。
// Fetch the data recorded on a select frame and place it in a
// container object.
var trackDataList = recordingManager.GetUpdatedTrackData(trackGuid);
将 TrackData
放入容器对象后,提取自定义数据的字节。
// Extract the bytes of custom data from the list of track data.
foreach (TrackData trackData in trackDataList) {
var data = trackData.Data;
Lamp lamp = Lamp.fromByte(data[0]); // This is the lamp!
}
后续步骤
- 请完成“录制和播放”Codelab,了解如何使用录制和播放功能构建自己的应用。