我正在使用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
,一次只能运行一个捕获会话 — 如果您运行捕获会话,则会抢占 ARKit,这会阻止 ARKit 工作。
但是,ARKit 确实提供对从其捕获会话接收的相机像素缓冲区的访问,因此您可以通过将这些示例缓冲区馈送到AVAssetWriter
来录制视频。(这基本上与您从AVCaptureVideoDataOutput
录制视频时使用的工作流程相同......与AVCaptureMovieFileOutput
相比,这是一种较低级别的视频录制方式。
您还可以将 ARKit 摄像机像素缓冲区(请参阅ARFrame.capturedImage
(馈送到处理实时摄像机图像的其他技术,例如视觉框架。Apple 有一个示例代码项目来演示这种用法。