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

我正在使用ARSessionARFaceTrackingConfiguration来跟踪我的脸部。 同时,我想从我的iPhone X的前置摄像头录制一个video。为此,我正在使用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 ,一次只能运行一个捕获会话 – 如果你运行捕获会话,你抢占ARKit,这会阻止ARKit工作。

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

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