在 iPhone X 上的 ARKit ARSession 期间从前置摄像头录制视频

Record video from front facing camera during ARKit ARSession on iPhone X

我正在使用 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 等应用程序允许用户同时记录和使用真实深度传感器,所以我想我的要求是完全可行的。谢谢!

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

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

您还可以为 ARKit 相机像素缓冲区提供数据(请参阅 ARFrame.capturedImage) to other technologies that work with live camera imagery, like the Vision framework. Apple has a sample code project 演示此类用法。