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

时间:2018-06-15 18:20:34

标签: ios swift avfoundation arkit iphone-x

我正在使用ARSessionARFaceTrackingConfiguration相结合来追踪我的脸。同时,我想从我的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这样的应用程序允许用户同时记录和使用真实深度传感器,所以我想我所要求的是完全可行的。谢谢!

1 个答案:

答案 0 :(得分:1)

ARKit运行自己的AVCaptureSession,并且一次只能运行一个捕获会话-如果运行捕获会话,则会抢占ARKit,这会阻止ARKit正常工作。

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

您还可以将ARKit相机像素缓冲区(请参见ARFrame.capturedImage)馈送至其他与实时相机图像配合使用的技术,例如Vision框架。苹果公司有sample code project演示了这种用法。