7

新しいセッションを作成し、iPhone で次のように開始します。

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

これはうまくいきます。ただし、後でセッションを停止します。

[session stopRunning];

通常は約8秒!これが可能である理由と、それを高速化するために何ができるかを知っている人はいますか?

4

2 に答える 2

3

同様の問題に遭遇しました。stopRunning を呼び出すと、アプリが 8 ~ 10 秒間フリーズします。

私は最終的にこの問題を突き止めました。メインスレッド以外のスレッドで stopRunning を呼び出していました。このセカンダリ スレッドは、AVCaptureSession へのすべてのトランザクションに使用されました。この問題は、stopRunning への呼び出しをディスパッチした後、メイン スレッドが完了するのを待ってブロックしたために発生しました。残念ながら、stopRunning はメイン スレッドに何かを投稿し、それが完了するまでブロックします。stopRunning が待機していたものが最終的にタイムアウトになり、- (void)onRuntimeError:(NSNotification*)n コールバックでエラーが報告されました: エラー Domain=AVFoundationErrorDomain Code=-11819 "Cannot Complete Action" UserInfo=0x19e43c90 {NSLocalizedRecoverySuggestion=Try again later ., NSLocalizedDescription=アクションを完了できません}

私の場合の解決策は、stopRunning を呼び出した後にメイン スレッドをブロックしないことでした。幸いなことに、私にとっては簡単に実行できました (Apple が多かれ少なかれ推奨していることでもあります)。

他の質問でこのテーマのバリエーションに気付きました.解決策は常にコードを作り直すことでした. これにより、問題が発生している理由をよりよく理解できることを願っています。

于 2014-08-12T15:06:10.713 に答える