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

标签 ios swift avfoundation arkit 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,并且一次只能运行一个捕获 session ——如果你运行一个捕获 session ,你会抢占 ARKit 的 session ,这会阻止 ARKit 工作。

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

您还可以将 ARKit 相机像素缓冲区(参见 ARFrame.capturedImage)提供给其他使用实时相机图像的技术,例如 Vision 框架。 Apple 有一个 sample code project演示这种用法。

关于ios - 在 iPhone X 上的 ARKit ARSession 期间从前置摄像头录制视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50880868/

相关文章:

ios - 通过 AVCaptureMovieFileOutput 和 AVMutableDataItems 在 QuickTime 文件中存储任意元数据

ios - 在 XCode 6.2 中下载 iOS 7.1 模拟器进行离线安装

swift - 在 Swift 中,为什么以全局队列为目标的自定义串行队列不能同时执行?

ios - 在导航栏上关闭半透明会使 View 不对齐

iOS 13.2 MKTileOverlay 偶尔不会渲染

iPhone App - 在横向模式下显示 AVFoundation 视频

ios - 切换到前置摄像头时 AVFoundation 摄像头崩溃(刷新摄像头)

iOS倒坐标乱

ios - Swift - 在 UIView 的两个子类中重写一个方法

ios - FBSDK登录错误码: 308 in Objective-C