录制和播放简介

平台专用指南

绝大多数增强现实体验都是“实时”的。这种体验要求用户在特定时间处于特定位置,并且手机设置为特殊的 AR 模式,并打开 AR 应用。例如,如果用户想要查看 AR 沙发在客厅中的样子,他们必须将沙发“放”在屏幕环境中。

Recording and Playback API 消除了这项“实时”要求,让您能够打造随时随地可供随时随地观看的 AR 体验。Recording API 可将相机的视频串流、IMU 数据或您选择保存在 MP4 文件中的任何其他自定义元数据存储为 MP4 文件。然后,您可以通过 Playback API 将这些录制的视频馈送到 ARCore,该 API 会将 MP4 视为实时会话 Feed。您仍然可以使用实时相机会话,但借助这个新的 API,您的 AR 应用可以选择使用预先录制的 MP4 文件,而不是实时会话。

最终用户也可以使用此功能。无论身在现实生活中的哪个角落,他们都可以从自己的原生图库中获取使用 Recording and Playback API 录制的任何视频,然后编辑或播放 AR 对象、特效和滤镜。借助此功能,用户可以在通勤上班的火车上或躺在床上做 AR 购物。

使用 Recording API 和 Playback API 进行开发的用例

Recording and Playback API 消除了构建 AR 应用的时间和空间限制。您可以在自己的项目中以多种方式使用它。

一次录制,随时随地测试

您可以使用 Recording API 录制视频,然后使用任何兼容的设备回放,而无需每次需要测试 AR 功能时都要去一个地点。要在购物中心打造体验?您不需要在每次想要测试更改时都转到此页面。您只需记录一次访问操作,然后就可以在自己舒适的办公桌上迭代和开发应用。

缩短迭代时间

对于要测试的每种场景,您只需录制一次视频,然后在迭代阶段在多个不同的设备上播放,而不必为要支持的每台 Android 设备录制视频。

减轻开发团队的手动测试负担

在发布包含 ARCore 深度数据或最新跟踪改进的新功能时,您可以利用预先录制的数据集,而无需为每个新功能创建自定义数据集。

设备兼容性

您需要 ARCore 才能通过 Recording and Playback API 录制数据,但不需要它来回放内容。使用此功能录制的 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 时,设备的估计位置、磁力计读数和罗盘读数