【问题标题】:iOS7 AVCapture captureOutput never gets callediOS7 AVCapture captureOutput 永远不会被调用
【发布时间】:2014-11-03 14:17:36
【问题描述】:

请理解我不能在这里上传整个代码。

我有

@interface BcsProcessor : NSObject <AVCaptureMetadataOutputObjectsDelegate> {}

而 BcsProcessor 有 setupCaptureSessioncaptureOutput 方法。

- (void)captureOutput:(AVCaptureOutput*)captureOutput didOutputMetadataObjects:(NSArray*)metadataObjects fromConnection:(AVCaptureConnection*)connection


- (NSString*)setUpCaptureSession {
    NSError* error = nil;

    AVCaptureSession* captureSession = [[[AVCaptureSession alloc] init] autorelease];
    self.captureSession = captureSession;

       AVCaptureDevice* __block device = nil;
    if (self.isFrontCamera) {

        NSArray* devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
        [devices enumerateObjectsUsingBlock:^(AVCaptureDevice *obj, NSUInteger idx, BOOL *stop) {
            if (obj.position == AVCaptureDevicePositionFront) {
                device = obj;
            }
        }];
    } else {
        device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    }

    AVCaptureDeviceInput* input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];

    AVCaptureMetadataOutput* output = [[[AVCaptureMetadataOutput alloc] init] autorelease];
    output.metadataObjectTypes = output.availableMetadataObjectTypes

    dispatch_queue_t outputQueue = dispatch_queue_create("com.1337labz.featurebuild.metadata", 0);
    [output setMetadataObjectsDelegate:self queue:outputQueue];

    captureSession.sessionPreset = AVCaptureSessionPresetPhoto;

    if ([captureSession canAddInput:input]) {
        [captureSession addInput:input];
    }

    if ([captureSession canAddOutput:output]) {
        [captureSession addOutput:output];
    }

    // setup capture preview layer
    self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession];

    // run on next event loop pass [captureSession startRunning]
    [captureSession performSelector:@selector(startRunning) withObject:nil afterDelay:0];

    return nil;
}

所以上面的代码设置了会话并添加了AVCaptureMetadataOutputBcsProcessor 应该接收捕获的元数据。但是我的 captureOutput 方法没有接收到任何数据,或者被调用。

我将不胜感激任何帮助或 cmets。

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    首先确保您的输入和输出已正确添加到会话中。您可以通过登录captureSession.inputscaptureSession.outputs 进行检查。

    其次确保 output.metadataObjectTypes 设置正确,这意味着availableMetadataObjectTypes 的输出不为空。如果您在添加输出之前调用它,我相信这将是空的。

    最后我没有看到你将预览层添加到视图层 在使用会话初始化图层后尝试...

    self.previewLayer.frame = self.view.layer.bounds;
    [self.view.layer addSublayer:previewLayer];
    

    【讨论】:

    • 感谢您的宝贵时间。但是我确实检查了代码中添加的输入和输出。还设置了类型output.metadataObjectTypes = output.availableMetadataObjectTypes,并在代码末尾设置了 previewLayer。我看到相机运行良好。但它只是没有将任何数据传递给captureOutput 方法。
    • output.availableMetadataObjectTypes 不返回空数组?如果是这样,请在将输出添加到 captureSession 后移动此行 output.metadataObjectTypes = output.availableMetadataObjectTypes。
    • 感谢零解决了这个问题。它进入 captureOutput 方法。 :)
    猜你喜欢
    • 1970-01-01
    • 2012-10-27
    • 2013-10-12
    • 2012-03-27
    • 2013-08-29
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    相关资源
    最近更新 更多