在面向 Android 的 AR Foundation 上录制时添加自定义数据

借助 Recording & Playback API,您可以录制现场录像,并使用该 API 代替实时摄像头画面。不过,这些记录仅包含视频和传感器数据。您还可以向时段录制添加自定义数据,并让数据在播放期间返回给您,就像这些数据是相机图像的一部分一样。

ARCore 不会自动在录制内容中包含任何自定义数据。相反,它允许您在记录期间向 ARCore 帧添加自定义数据,并在播放期间从帧中检索相同的数据。您负责对应用进行编程,以便在用户播放会话时返回预期数据。

自定义数据的使用场景

为录制内容添加自定义数据可拓展 AR 应用的可能性。以下是一些具体用例。

随时随地使用 AR

过去,用户只能在合适的地点和时间获得 AR 体验。如果他们想在客厅放置 AR 灯,则必须亲自站在客厅看看灯具的实际效果。借助自定义轨道,他们可以录制一次客厅内容,然后根据自己的喜好随时在场景中添加虚拟家具。

共同打造 AR 体验

用户无需直播会话,就有更多的 AR 编辑选项,可以随时随地创建和访问独特的 AR 内容。例如,他们可以录制给定环境、添加增强现实效果,并与朋友分享。

前提条件

确保您了解基本 AR 概念以及如何配置 ARCore 会话,然后再继续。

使用自定义数据初始化记录

请按照以下步骤使用自定义数据初始化记录。如需开始、停止和查看录制会话,请参阅录制和播放 AR 课程

  1. 获取 ARCoreRecordingConfig
  2. 使用自定义 UUID 创建新的 Track。所有自定义数据都将保存在此处。
  3. 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 使用值“A”调用 RecordTrackData(),则在播放曲目时,您会在 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!
}

后续步骤