ios - 在 iPhone X 上的 ARKit ARSession 期间从前置摄像头录制视频
问题描述
我正在使用一个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 这样的应用程序允许用户同时记录和使用 True Depth 传感器,所以我想我的要求是完全可行的。谢谢!
解决方案
ARKit 运行它自己的AVCaptureSession
,并且一次只能运行一个捕获会话——如果你运行一个捕获会话,你就抢占了 ARKit,这会阻止 ARKit 工作。
但是,ARKit 确实提供了对其从捕获会话中接收到的相机像素缓冲区的访问,因此您可以通过将这些样本缓冲区提供给AVAssetWriter
. (这与您在录制视频时使用的工作流程基本相同AVCaptureVideoDataOutput
......与.相比,这是一种较低级别的视频录制方式AVCaptureMovieFileOutput
。)
您还可以将 ARKit 相机像素缓冲区(请参阅 参考资料ARFrame.capturedImage
)提供给使用实时相机图像的其他技术,例如 Vision 框架。Apple 有一个示例代码项目演示了这种用法。
推荐阅读
- php - 计数以“custom_”开头的 $_POST 回复
- php - 如何将多维数组添加到 laravel 数据库
- android - android studio的MainActivity未解决的类错误
- javascript - Javascript在对象数组中查找具有匹配属性的对象,如果存在则获取另一个属性
- typo3 - 从调度程序任务中的存储库中删除所有()
- android - 如何创建具有透明背景和阴影的形状,但在形状轮廓后面不应该看到阴影?
- python - 使用线程模块对不同域的并行 GET 请求
- django - 如何使用 Django 将我的主页重定向到我的主域?
- spring-boot - 难以设置连接面项目以提供第一页
- java - 正确缩进 Java/Kotlin 控制台输出