我正在使用 OpenCV 处理来自实时视频源的帧,处理过程非常密集。这可能需要 2-3 秒。在处理帧时忽略所有记录的帧是可以的。
基本上,我们在前台显示了连续的帧流。我们获取下一个可用帧并在后台处理它。在此帧处理的接下来 2-3 秒内,我希望接下来的所有帧继续不间断地显示在前景中。我不需要处理这些。但是,一旦背景帧完成,我想抓取最新的可用帧并将其发送出去进行处理。
我是 Swift 队列的新手。我认为这是我应该查看的队列,任何人都可以指出正确的方向吗?
最佳答案
可能最简单的是使用后台 DispatchQueue。异步处理帧,然后切换回主队列以显示结果并递归调用函数,直到您决定停止。切换回主线程以进行任何 UI 更新尤为重要。
func processNextAvailableFrame() {
DispatchQueue.global(qos: .background).async {
// Grab a frame to process
// Process frame
DispatchQueue.main.async {
// Back on main thread, show result of processing frame
// Call processFrame() again, as needed.
let shouldKeepGoing = true // determine this somehow
if shouldKeepGoing {
self.processNextAvailableFrame()
}
}
}
}
关于ios - Swift 3 - 只有一个项目的队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44768472/