2013-07-03 25 views
5

我創建一個新的會話,並啓動它在iPhone上是這樣的:停止AVCaptureSession iPhone需要8秒

AVCaptureSession* session; 
... 
[session startRunning]; 

這工作得很好。但是,稍後停止會話:

[session stopRunning]; 

通常需要大約8秒!有誰知道爲什麼這是可能的,可以做些什麼來使其更快?

+1

試試這個:http://stackoverflow.com/questions/11905505/avcapturesession-stop-running-take-a-long-long-time – nickcheng

+1

是的,這似乎解決了這個問題。當您將其添加爲答案時,我會接受它。 –

回答

2

我遇到了類似的問題。調用stopRunning將凍結應用程序8到10秒。

我終於找到了這個問題這樣的:我是除主線程以外的線程調用stopRunning。此輔助線程用於AVCaptureSession的所有事務。發生此問題是因爲調度調用stopRunning後,我堵住了主線程等待它完成。不幸的是,stopRunning發佈了一些主線程和塊等待,要完成。事情stopRunning在等待最終超時,並報告在一個錯誤 - (空)onRuntimeError:(NSNotification *)N回調: 錯誤域= AVFoundationErrorDomain代碼= -11819「無法完成操作」的UserInfo = 0x19e43c90 {NSLocalizedRecoverySuggestion =再試一次後來,NSLocalizedDescription =無法完成行動}

在我的情況的解決方案是在調用stopRunning後根本就沒有阻塞主線程。幸運的是,這是很容易做到(和蘋果的東西或多或少建議反正)。

我注意到有關這一主題的其他問題的變化,以及解決方案一直是返工的代碼。希望這將有助於更好地理解爲什麼這個問題發生的。

+0

這使我注意到,我在我的應用程序關閉這是造成長時間的延遲在會議開始之前,主線程調用startRunning()。我改變它在主線程上運行,它再次正常工作。 –

3

從Apple文件:

Discussion

This method is used to stop the flow of data from the inputs to the outputs connected to the AVCaptureSession instance that is the receiver. This method is synchronous and blocks until the receiver has completely stopped running.

因爲它是同步的,你可以把它變成一個異步調用,以避免凍結UI線程。


添加更多的評論:

的想法上面沒有做stopRunning更快。它只是停止凍結UI線程。