ARSession和录制视频

时间:2019-04-08 12:03:46

标签: ios avfoundation video-processing arkit

我正在手动编写录像机。不幸的是,如果您想同时录制视频并使用ARKit,则很有必要。我已经弄清楚了大部分内容,但是现在我需要对其进行一些优化,因为我的手机同时运行ARKit,Vision和此录音机变得非常热。

要制作记录器,您需要将AVAssetWriterAVAssetWriterInput(和AVAssetWriterInputPixelBufferAdaptor)一起使用。输入具有isReadyForMoreMediaData属性,您需要先检查该属性,然后才能编写另一个框架。我正在实时录制(或尽可能接近)。

现在,当ARKit.ARSession给我一个新会话时,我立即将其传递给AVAssetWriterInput。我要做的是将其添加到队列中,并进行循环检查,以查看是否有可编写的示例。对于我的一生,我无法弄清楚如何有效地做到这一点。

我只想像这样运行一个while循环,但这似乎不是一个好主意:

func startSession() {
    // …
    while isRunning {
        guard !pixelBuffers.isEmpty && writerInput.isReadyForMoreMediaData else {
            continue
        }
        // process sample
    } 
}

我可以在ARSession.delegateQueue之外的其他线程中运行此线程吗?我不想因为相机被保留太长时间而遇到CVPixelBuffer的问题。

0 个答案:

没有答案