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

4
我正在使用一个结合了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 这样的应用程序允许用户同时录制并使用 True Depth 传感器,因此我想我的要求完全可行。谢谢!

1个回答

9

ARKit运行自己的AVCaptureSession,一次只能运行一个捕获会话 - 如果您运行了一个捕获会话,则会预占ARKit的会话,从而防止ARKit工作。

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

您还可以将ARKit相机像素缓冲区(请参见ARFrame.capturedImage)馈送到其他用于实时相机图像的技术中,如Vision framework。Apple有一个演示这种用法的示例代码项目


非常好的消息。我会尽快尝试并回复您。谢谢Rick。 - lucamegh
嗨Rickster,目前示例代码项目链接已经失效了。你知道它是否已经被移动到其他地方了吗? - mikey
编辑了帖子以修复链接。 - rickster
@rickster - 我按照你的建议尝试从RealityKit和我正在使用Arduino构建的捕获设备中录制视频和音频,结果是一样的:没有音频的视频。这是我的一个问题,关于这个问题,我在这里提出了一个问题:https://stackoverflow.com/questions/62937153/this-code-generates-videos-that-play-fine-but-play-without-audio-why - Duck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接