我使用OpenCV处理来自实时视频源的帧,并且处理非常密集。这可能需要2-3秒。可以忽略处理帧时记录的所有帧。
基本上,我们在前台显示连续的帧流。我们采用下一个可用的框架并在后台处理它。在此帧处理的下一个2-3秒内,我希望所有下一帧继续在前台不间断地显示。我不需要处理这些。但是,一旦背景框架完成,我想抓住最新的可用框架并将其发送出去进行处理。
我是Swift排队的新手。我认为这是我应该看的队列,有人能指出我正确的方向吗?
答案 0 :(得分:1)
可能最简单的方法是使用背景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()
}
}
}
}