2011-10-13 30 views
6

Tôi đã triển khai máy ảnh bằng cách sử dụng khung công tác AVFoundation được cung cấp trong iOS 4 & 5, nhưng đã gặp phải sự cố không nhất quán với chức năng captureStillImageAsynchronouslyFromConnection:completionHandler: trong đó khối xử lý hoàn thành không bao giờ được gọi. Âm thanh màn trập không phát ra và bản xem trước bị treo trong tình huống này.iOS AVFoundation captureStillImageAsynchronouslyFromConnection: completionHandler: Treo Vô hạn

Tôi đã theo dõi cả hai video của Apple (WWDC 2010 & 2011) và hướng dẫn không phải của Apple (blog và bài đăng SO) để triển khai chụp ảnh tĩnh ở độ phân giải Ảnh mà ít hoặc không cải thiện. Tôi đã có thể để tái tạo phần nào ổn định dưới điều kiện sau:

  • Nếu tôi đặt đèn flash để AVCaptureFlashModeAuto và chụp ảnh trong ánh sáng thấp, nó bị treo và không bao giờ chạy khối hoàn thành. Đèn flash nhấp nháy, nhưng âm thanh màn trập thì không. Với cùng mã, tôi có thể chụp ảnh ở ánh sáng bình thường, nơi âm thanh màn trập phát ra, đèn flash không chạy và khối hoàn thành chạy.
  • Nếu tôi không đặt flashMode hoặc đặt nó thành tắt, tôi có thể chụp một số ảnh, nhưng sau một số nhỏ (từ 1 đến 5, thông thường) khối hoàn thành sẽ ngừng kích hoạt. Để làm rõ, một kịch bản có thể là:
    1. Chụp ảnh và xem ở màn hình xác nhận
    2. Quay trở lại để có hình ảnh
    3. Lặp lại 1 & 2 một vài lần
    4. Hit chụp ảnh và nó bị treo trước khối hoàn thành.

Thực hiện My

Tôi có giao diện xử lý trong một ViewController và lớp riêng biệt để xử lý tất cả những thứ AVFoundation. Một biến cá thể của lớp riêng biệt xử lý các công cụ AVFoundation là trong ViewController. Nó khác với triển khai ví dụ, nhưng tôi không thấy lý do tại sao nó nên gây ra loại lỗi thường xuyên này.

Nhiều quan sát

  • Ngay cả khi kiểm tra [stillImageOutput isCapturingStillImage], nó sẽ tiếp tục quay trở lại sai và tiếp tục chạy captureStillImageAsynchronouslyFromConnection chức năng
  • Nếu tôi chuyển sang ứng dụng khác, khóa điện thoại, hãy chắc chắn hành động khác trong ứng dụng hoặc chạm vào nút 'Chụp ảnh' một triệu lần tôi có thể nhận được khối hoàn thành để trả lại lỗi. Chúng khác nhau dựa trên hành động nào. Thông thường là 11800, 11801 và 11830. Chúng dường như không liên quan đến hang.
  • Tôi đã để điện thoại thử nghiệm của chúng tôi (iPhone 4 GSM) ngồi trong một giờ để xem liệu nó có được xử lý hay không. Không có con xúc xắc.

Tôi rất muốn biết nếu có điều gì đó mà tôi có thể bị thiếu, một thuộc tính không được đặt hoặc một vấn đề đã biết xảy ra xung quanh.

Cảm ơn.

(Tôi thấy một bài đăng tương tự nhưng không có câu trả lời nào giải quyết được sự cố của tôi. Tôi cần Photo res trong ứng dụng.Để tham khảo: iPhone SDK 4 AVFoundation - How to use captureStillImageAsynchronouslyFromConnection correctly?)

Trả lời

6

tôi nên đã thêm mã, nó có lẽ sẽ giúp bất cứ ai xem này, nhưng dù sao:

Nó chỉ ra rằng máy ảnh Flash có một tác động đáng kể, đủ về số lượng thời gian nó cần xử lý hình ảnh để gây ra sự cố khi chụp thứ gì đó không đồng bộ. Tôi đã vô tình kết thúc phiên chụp trước khi thông báo được gửi từ khối hoàn thànhHandler.

- (void) saveImageFromCamera { 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imageCapturedFromCamera) name:@"FTW_imageCaptured" object:nil]; 

    [cameraController captureStillImage]; 
    // WRONG: Session was stopped here before 
} 

- (void) imageCapturedFromCamera { 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"FTW_imageCaptured" object:nil]; 

    [sharedAppController setBackgroundImage:[cameraController stillImage]]; 
    sharedAppController.imageFromCamera = YES; 
    [self endCamera]; 
    // CORRECT: Should have stopped session here 

    [self updateBackgroundImage]; 
} 

Tôi hy vọng điều này có thể giúp bất kỳ ai khác chạy vào nội dung như thế này.

Các vấn đề liên quan