2010-08-18 34 views
12

我正在構建一個應用程序,允許用戶使用iPhone攝像頭捕捉圖片,並在AVFoundation可用時使用(iOS4),因此用戶可以使用點擊對焦功能,即使自定義覆蓋。立即凍結AVCaptureSession

我遇到的問題是,captureStillImageAsynchronouslyFromConnection需要幾秒鐘才能完成,在此期間,我想,這樣就不會有一個混亂的狀態定格主視頻飼料,其中的視頻仍然是正在運行,但用戶拍攝了一張照片(並且相機快門聲已關閉)。

我試過在請求靜止圖像捕獲後調用[會話stopRunning],但這會導致不可預知的結果;在這種情況下,靜止圖像完成塊通常不會被觸發。

關於如何在快門被擊中後如何讓視頻預覽層「暫停」的任何想法?

+0

我也是,我已經看到了其他建議,斷開會話,然後將相機是完全破碎,不穩定。 – RainCast 2016-10-24 19:49:38

回答

5

我正在嘗試同樣的事情。雖然在我的情況下captureStillImageAsynchronouslyFromConnection需要0.5秒返回,所以也許你正在完成處理程序中做一些處理?

如果是這樣的話,我想出了2個選擇,這兩者都是不足夠的,對我來說可能會爲你做

我來到得到的是兩種:
*調用stopRunning在完成處理程序被調用時捕獲會話(同樣,在我的情況下爲0.5秒),然後再處理後再調用startRunning
*在疊加層上有一個UIImageView,並在您處理時存儲最後拍攝的照片,無論是來自相機還是視頻流。

兩種解決方案讓我感到沮喪的是,它們都爲這個過程增加了幾秒鐘的時間。但我希望它有幫助,或者給出一個方向。

乾杯, Oded。

+0

經過多次嘗試,這是正確的答案。 – RainCast 2016-10-25 22:52:56

4

簡單的凍結框架給了用戶一個印象,即屏幕上的圖像已被拍攝,至少是假的,我會顯示一個變暗的圖像。 Camera.app通過關閉「快門」來解決問題。

您或許可以將AVCaptureVideoPreviewLayer alpha更改爲0.5,從而給出變暗圖像的印象,即使它仍在運行。

另一種選擇是使用AVCaptureVideoDataOutput和一些圖像操作來獲取靜止圖像。不幸的是,似乎不可能同時使用AVCaptureVideoDataOutput和AVCaptureStillImageOutput;一種解決方法是通過抓取下一個視頻幀來實現「拍攝照片」功能(當然,這受限於視頻分辨率,但如果您只是想在幀上進行圖像處理,那很好)。

0

舊的答案,但這裏有一個好奇的更新:在iOS5中,您可以同時使用AVCaptureStillImageOutput和AVCaptureVideoDataOutput。我在拍攝下一個視頻幀和靜止圖像時取得了不錯的成功。我使用一個簡單的淡出動畫來隱藏UI,然後在從AVCaptureVideoDataOutput獲取圖像時淡入。此過程比通過AVCaptureStillImageOutput的captureStillImageAsynchronouslyFromConnection:completionHandler:等待靜止圖像的速度要快得多,這很可能是由於來自AVCaptureVideoDataOutput的較小和較低質量的圖像造成的。

16

你只需要設置你的captureVideoPreviewLayer.connection.enabled = NO;

有關詳細信息,請參閱我的答案在這裏:

AVCaptureSession pause?

+0

嘗試過這一點,並導致相機中出現一些奇怪的行爲。 – RainCast 2016-10-24 19:52:39

+0

奇怪的行爲,包括拍攝看起來非常藍的照片....有時在曝光時很暗。 – RainCast 2016-10-25 22:34:45

+0

在哪個iOS版本中,你有那些奇怪的行爲? – DisableR 2016-10-27 07:21:38