特定于平台的指南
Android(Kotlin/Java)
Android NDK (C)
Unity (AR Foundation)
Unreal Engine

绝大多数增强现实体验都是“实时”的。它们要求用户在特定时间位于特定地点,并将手机设置为特殊的 AR 模式,然后打开 AR 应用。例如,如果用户想查看 AR 沙发在客厅中的效果,就必须在自己身处客厅时,将沙发“放置”在屏幕上的环境中。
Recording and Playback API 摒弃了这种“实时”要求,让您能够创建可随时随地观看的 AR 体验。Recording API 会将摄像头的视频流、IMU 数据或您选择保存的任何其他自定义元数据存储在 MP4 文件中。然后,您可以通过 Playback API 将这些录制的视频馈送到 ARCore,后者会将 MP4 视为实时会话 Feed。您仍然可以使用实时相机会议,但借助此新 API,AR 应用可以选择使用预先录制的 MP4 文件,而不是实时会议。

最终用户也可以利用此功能。无论用户在现实生活中身处何地,他们都可以从原生图库中调出使用 Recording and Playback API 录制的任何视频,并添加或播放 AR 对象、效果和滤镜。借助此功能,用户可以在通勤上班的火车上或在床上放松时进行 AR 购物。
使用 Recording and Playback API 进行开发的用例
借助 Recording and Playback API,您可以摆脱时间和空间限制,轻松构建 AR 应用。以下是一些您可以在自己的项目中使用它的方式。
录制一次,随处测试
您无需每次测试 AR 功能时都亲自前往某个位置,而是可以使用 Recording API 录制视频,然后使用任何兼容的设备播放该视频。在购物中心打造体验?您无需每次想测试更改时都前往该页面。您只需记录一次访问,然后就可以在自己的办公桌上轻松进行迭代和开发。
缩短迭代时间
您无需为要支持的每部 Android 设备和要测试的每种场景都录制视频,只需录制一次视频,然后在迭代阶段在多部不同的设备上播放该视频。
减轻开发团队的手动测试负担
在发布新功能时,您可以利用预先录制的数据集,而不是为每个新功能创建自定义数据集,这些新功能会纳入 ARCore 的深度或最新的跟踪改进。
设备兼容性
您需要使用 ARCore 通过 Recording and Playback API 记录数据,但不需要使用 ARCore 播放内容。使用此功能录制的 MP4 实际上是包含额外数据的视频文件,可以使用任何视频播放器观看。您可以使用 Android 的 ExoPlayer 或任何兼容的播放器来检查这些数据,这些播放器既可以解复用 MP4,也可以管理 ARCore 添加的额外数据。
如何录制视频和 AR 数据以供回放
ARCore 会将录制的现场录像保存到目标设备上的 MP4 文件中。这些文件包含多个视频轨道和其他杂项数据。保存这些会话后,您可以让应用使用这些数据来代替实时摄像头会话。
录制内容中包含哪些信息?
ARCore 会以 H.264 视频格式捕获以下数据。您可以在任何支持切换轨道且与 MP4 兼容的视频播放器中访问该轨道。分辨率最高的轨道位于列表中的第一个位置,因为某些兼容 MP4 的视频播放器会自动播放列表中的第一个轨道,而不允许您选择要播放哪个视频轨道。
主要视频轨道(CPU 映像轨道)
主视频文件用于记录环境或场景,以便日后播放。默认情况下,ARCore 会将用于运动跟踪的 640x480 (VGA) CPU 图像记录为主要视频流。
ARCore 不会捕获渲染到屏幕上的(高分辨率)GPU 纹理作为透视摄像头图像。
如果您希望在播放期间提供高分辨率图像流,则必须配置可提供所需分辨率的 CPU 图像的摄像头。在此示例中:
- ARCore 将同时请求 640x480 (VGA) CPU 图像(用于运动跟踪)和配置的相机配置指定的高分辨率 CPU 图像。
- 捕获第二个 CPU 图像流可能会影响应用性能,并且不同的设备可能会受到不同的影响。
- 在播放期间,ARCore 会使用录制期间捕获的高分辨率 CPU 图像作为播放期间的 GPU 纹理。
- 高分辨率 CPU 图像将成为 MP4 录制中的默认视频流。
录制期间选择的相机配置决定了录制内容中的 CPU 图像和主视频流。如果您未选择具有高分辨率 CPU 图像的相机配置,则此视频将成为文件中的第一个轨道,并且无论您使用哪个视频播放器,都会默认播放此视频。
摄像头深度地图可视化
这是一个表示相机深度图的视频文件,该文件是从设备的硬件深度传感器(例如飞行时间传感器 [ToF 传感器])记录的,并已转换为 RGB 通道值。此视频仅供预览。
API 调用事件
ARCore 会记录来自设备陀螺仪和加速度计传感器的测量数据。它还会记录其他数据,其中一些数据可能属于敏感数据:
- 数据集格式版本
- ARCore SDK 版本
- “面向 AR 的 Google Play 服务”版本
- 设备指纹(
adb shell getprop ro.build.fingerprint的输出) - 有关用于 AR 跟踪的传感器的其他信息
- 使用 ARCore Geospatial API 时,设备的估计位置、磁力计读数和指南针读数