首页 > 解决方案 > 在 iPhone X 上的 ARKit ARSession 期间从前置摄像头录制视频

问题描述

我正在使用一个ARSession结合一个ARFaceTrackingConfiguration来跟踪我的脸。同时,我想从我的 iPhone X 的前置摄像头录制一段视频。为此我正在使用AVCaptureSession,但一旦我开始录制,ARSession就会被中断。

这是两个代码片段:

// Face tracking
let configuration = ARFaceTrackingConfiguration()
    configuration.isLightEstimationEnabled = false
let session = ARSession()
session.run(configuration, options: [.removeExistingAnchors, .resetTracking])

// Video recording
let camera = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .front)!
input = try! AVCaptureDeviceInput(device: camera)
session.addInput(input)
session.addOutput(output)

有人知道如何同时做这两件事吗?像 Snapchat 这样的应用程序允许用户同时记录和使用 True Depth 传感器,所以我想我的要求是完全可行的。谢谢!

标签: iosswiftavfoundationarkitiphone-x

解决方案


ARKit 运行它自己的AVCaptureSession,并且一次只能运行一个捕获会话——如果你运行一个捕获会话,你就抢占了 ARKit,这会阻止 ARKit 工作。

但是,ARKit 确实提供了对其从捕获会话中接收到的相机像素缓冲区的访问,因此您可以通过将这些样本缓冲区提供给AVAssetWriter. (这与您在录制视频时使用的工作流程基本相同AVCaptureVideoDataOutput......与.相比,这是一种较低级别的视频录制方式AVCaptureMovieFileOutput。)

您还可以将 ARKit 相机像素缓冲区(请参阅 参考资料ARFrame.capturedImage)提供给使用实时相机图像的其他技术,例如 Vision 框架。Apple 有一个示例代码项目演示了这种用法。


推荐阅读