【问题标题】:How to record video in RealityKit?如何在 RealityKit 中录制视频?
【发布时间】:2020-04-19 07:56:49
【问题描述】:

我在 Xcode 中有一个 RealityKit 项目,我想记录 ARView。我考虑过 ReplayKit,但那是为了屏幕录制,我只想用它的摄像头录制 ARView。我考虑了 Afathi 的开源项目 ARVideoKit,但它不支持 RealityKit ......关于不同渲染路径的东西。我找到了一篇描述如何在 ARKit 应用程序中实现录制功能的 Medium 文章,但问题是它需要方法:func renderer(_ renderer: SCNSceneRenderer),它在 RealityKit 中不可用,因为它专门是 SceneKit 方法。

【问题讨论】:

  • 您可以使用ReplayKit,然后可以根据ARView的帧裁剪之前的视频。您还可以消除辅助窗口中不需要的 GUI 元素。
  • 我也有同样的情况,但我不会使用 ReplayKit。您不仅需要绕过它记录 UI 元素的事实(这是可能的),而且还要求您的用户允许记录您的屏幕(这很丑陋)。我将尝试研究如何将session(_ session: ARSession, didUpdate frame: ARFrame) 委托方法中生成的 YUV 视频输出转换为 RGB,并以与录制视频类似的方式写入 AVCaptureSession。
  • @JCutting8 你成功了吗?我也在努力。
  • 我也有同样的情况。还没有找到有效的解决方案?
  • 使用 ReplayKit,最佳解决方案!

标签: swift arkit realitykit


【解决方案1】:

我的回答假设您熟悉使用 AVAssetWriter 录制视频和音频。

在 ARKit session(_:didUpdate:) 方法中提供了一个捕获的帧。返回的ARFrame 对象有一个名为capturedFrameCVPixelBuffer。像处理常规视频录制会话一样处理帧,除了不是在 captureOutput(_:didOutput:from:) 方法中捕获,而是在此处捕获。如果您还打算从麦克风录制音频,您可能仍然需要 captureOutput(_:didOutput:from:) 音频方法。

就我而言,我将捕获的帧转换为MTLTexture,并使用Metal 处理我的视频帧,然后将它们传递给AVAssetWriter。我想在录制之前在我的相机框架上画画。不幸的是,这样做非常复杂,恐怕不是快速而简短的复制+粘贴答案。希望将您指向 ARKit 返回的 capturedFrame 对象是您开始的好地方。

如何使用AVAssetWriter 录制视频的示例: https://programmersought.com/article/80131041234/;jsessionid=38CBA6743FB3C440DE9D2B25A6854B28

如果您想在将 3D 模型编码为视频之前将其绘制到捕获源中,您还需要精通 Metal: https://developer.apple.com/documentation/metalkit/

【讨论】:

  • 由于在 Github 上使用过几个相关库,因此我在录制视频方面经验丰富。您介意将您的代码的某些部分开源吗?我目前在一个项目中与github.com/Silence-GitHub/BBMetalImage 合作,但我最近的客户更喜欢RealityKit 的相机功能。如果不是开源的,我也很乐意给你我的电子邮件。非常感谢您的帮助,因为我不认为我可以自己阻止这一切:)
  • 用这种方法,AR模型保存在框架中?还是只是一个视频源?
  • @RubenNahatakyan 不确定,因为在我的情况下,我只需要相机输入,然后用金属在它上面画图。所以在我的情况下,我刚刚得到了摄像头。
  • @RubenNahatakyan - session(_:didUpdate:) 提供的 capturedFrame 是原始相机图像,不包括场景中渲染的 AR 内容。
  • 这将只生成视频源的视频,不会显示任何 AR 3d 对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 2013-09-28
  • 2016-01-19
相关资源
最近更新 更多