录制和播放简介

针对具体平台的指南

绝大多数增强现实体验都是“实时”的。这种广告会要求用户在特定时间位于特定地点,将手机设置为特殊的 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 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 将请求 ARCore 需要的 640x480 (VGA) CPU 图像 由配置的 相机配置。
  • 捕获第二个 CPU 图像流可能会影响应用性能,并且 不同设备受到的影响可能不同
  • 在播放过程中,ARCore 将使用 在录制期间作为 GPU 纹理捕获的 API。
  • 高分辨率 CPU 图片将成为 MP4 录制。

录制期间所选的摄像头配置决定了录制中的 CPU 图片和主视频串流。如果您没有选择具有高分辨率 CPU 图片的摄像头配置,则此视频将成为文件中的第一个音轨,并且无论您使用哪种视频播放器,都会默认播放此视频。

相机深度图可视化

这是一个表示相机深度图的视频文件,通过设备的硬件深度传感器(例如飞行时间传感器(或 ToF 传感器))记录,并转换为 RGB 通道值。此视频只能用于预览。

API 调用事件

ARCore 通过设备的陀螺仪和加速度计传感器记录测量结果。它还记录了其他数据,其中一些可能是敏感数据:

  • 数据集格式版本
  • ARCore SDK 版本
  • 面向 AR 的 Google Play 服务版本
  • 设备指纹(adb shell getprop ro.build.fingerprint 的输出)
  • 有关用于 AR 跟踪的传感器的更多信息
  • 使用 ARCore Geospatial API 时,设备的估计位置、磁力计读数和罗盘读数