16

私は、ユーザーがiPhoneカメラを使用して写真を撮ることができるアプリを構築しており、ユーザーがカスタムオーバーレイを使用している場合でも、タップしてフォーカス機能を使用できるように、利用可能な場合はAVFoundation(iOS4)を使用しています。

私が抱えている問題は、captureStillImageAsynchronouslyFromConnectionが完了するまでに数秒かかることです。その間、メインのビデオフィードをフリーズフレーム化して、ビデオがまだ実行されているという混乱した状態にならないようにしますが、ユーザーはスナップしました。写真(そしてカメラのシャッター音が消えた)。

静止画キャプチャをリクエストした直後に[sessionstopRunning]を呼び出してみましたが、予期しない結果になります。その場合、静止画補完ブロックは起動されないことがよくあります。

シャッターが当たったらすぐにビデオプレビューレイヤーを「一時停止」させる方法について何かアイデアはありますか?

4

4 に答える 4

21

あなたはただあなたを設定する必要がありますcaptureVideoPreviewLayer.connection.enabled = NO;

詳細については、ここで私の答えを参照してください:

AVCaptureSessionを一時停止しますか?

于 2013-04-15T12:00:28.127 に答える
5

私は同じことを試みています。私の場合、captureStillImageAsynchronouslyFromConnectionが戻るのに0.5秒かかるので、完了ハンドラーで何らかの処理を行っているのではないでしょうか。

その場合、私は2つのオプションを考え出しました。どちらも私には十分ではありませんが、あなたには役立つかもしれません。

私が思いついたのは次のいずれかです。
*完了ハンドラーが呼び出されたときにキャプチャセッションでstopRunningを呼び出し(この場合も0.5秒)、処理後にstartRunningを再度呼び出します。
*オーバーレイの上にUIImageViewを配置し、処理中にカメラまたはビデオストリームから最後に撮影した画像をこのimageviewに保存します。

両方のソリューションから私を落胆させたのは、どちらもプロセスに数秒かかることでした。しかし、私はそれが役立つか、方向性を与えることを願っています。

乾杯、オード。

于 2010-08-22T16:05:22.967 に答える
4

単純なフリーズフレーミングは、画面上の画像がすでに撮影されているという印象をユーザーに与えますが、これは誤りです。少なくとも、薄暗い画像を表示します。Camera.appは、「シャッター」を閉じることで問題を回避します。

AVCaptureVideoPreviewLayer alphaを0.5に変更して、まだ実行中であっても、薄暗い画像の印象を与えることができる場合があります。

もう1つのオプションは、AVCaptureVideoDataOutputといくつかの画像操作を使用して静止画像を取得することです。残念ながら、AVCaptureVideoDataOutputとAVCaptureStillImageOutputの両方を同時に使用することはできないようです。回避策は、次のビデオフレームを取得して「写真を撮る」機能を実装することです(もちろん、これはビデオの解像度によって制限されますが、フレームで画像処理を行うだけの場合は問題ありません)。

于 2010-08-19T00:33:40.190 に答える
0

古い答えですが、好奇心旺盛な人のためのアップデートがあります。iOS5では、AVCaptureStillImageOutputとAVCaptureVideoDataOutputを同時に使用できます。次のビデオフレームと静止画像を同時にキャプチャすることで、ある程度の成功を収めました。UIを非表示にし、AVCaptureVideoDataOutputから画像を取得したときにフェードインする単純なフェードアウトアニメーションを使用します。captureStillImageAsynchronouslyFromConnection:completionHandler:このプロセスは、AVCaptureVideoDataOutputから出力される画像が小さく、品質が低いため、AVCaptureStillImageOutputを介して静止画像を待機するよりもはるかに高速です。

于 2012-02-27T20:43:14.910 に答える