Ios AVCaptureSession暂停会话
当我想暂停会话时,这是我唯一的解决方案:Ios AVCaptureSession暂停会话,ios,swift,xcode,avfoundation,avcapturesession,Ios,Swift,Xcode,Avfoundation,Avcapturesession,当我想暂停会话时,这是我唯一的解决方案: func pauseSession () { self.sessionQueue.async { if self.session.isRunning { self.session.stopRunning() } } } func resumeSession () { s
func pauseSession () {
self.sessionQueue.async {
if self.session.isRunning {
self.session.stopRunning()
}
}
}
func resumeSession () {
self.sessionQueue.async {
if !self.session.isRunning {
self.session.startRunning()
}
}
}
这似乎完全停止了会话,这很好,但看起来很昂贵
我似乎遇到的问题是,如果暂停和恢复在时间上彼此接近,整个应用程序会冻结大约10秒钟,直到恢复响应。这主要是因为它还没有完成最后一个过程(是停止还是启动)
有解决办法吗
本机摄像头应用程序似乎可以做到这一点。如果打开它,打开最后一张照片,您可以看到右上角的绿色指示灯熄灭,表示会话已暂停/停止。如果您向下滑动照片,会话将继续。如果您刷卡并取消,请再次快速刷卡,您可以看到会话一次又一次地快速暂停和恢复,没有任何问题。您可能需要将
async
更改为sync
self.sessionQueue.sync {
这不会阻塞主队列。它将序列化
sessionQueue
对主队列没有影响。在启动和停止时,它实际上会将UI冻结几秒钟。提到:startRunning()方法是一个阻塞调用,可能需要一些时间,因此您应该在串行队列上执行会话设置,以便主队列不会被阻塞(这会使UI保持响应)。您是否检查了它在未连接调试程序的发布版本中的行为?