2013-02-13 3 views
0

Я создаю собственное расширение для iOS, где я хочу реализовать сканер штрих-кода.Собственное расширение видеокамеры для IOS

Я следовал примеру AVCam, и я пробовал его в собственном приложении (полный xcode), и он работает нормально.

Теперь я хочу использовать этот код со времен мобильного проекта Flex. Я смог создать ANE и поместить его в проект Flex Mobile, и я могу назвать функции ANE.

Кажется, что все в порядке, но моя проблема в том, что я не вижу, что вы видите через камеру. Я имею в виду, у меня есть метод, когда я звоню, чтобы запустить камеру и начать захват. Я также внедрил делегат captureOutput, и самое странное, что когда я запускаю свое приложение, я вижу журналы внутри initcapture и captureOutput, так как приложение захватывает данные, но в iPad я не вижу камера.

Это часть кода я использую:

- (void)initCapture 
{ 
    NSLog(@"camera view capture init"); 
    /*We setup the input*/ 
    self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

    AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil]; 
    /*We setupt the output*/ 
    captureOutput = [[AVCaptureVideoDataOutput alloc] init]; 
    // If the queue is blocked when new frames are captured, those frames will be automatically dropped 
    captureOutput.alwaysDiscardsLateVideoFrames = YES; 
    //captureOutput.minFrameDuration = CMTimeMake(1, 10); Uncomment it to specify a minimum duration for each video frame 
    [captureOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()]; 
    // Set the video output to store frame in BGRA (It is supposed to be faster) 

    NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; 
    // Set the video output to store frame in 422YpCbCr8(It is supposed to be faster) 

    //************************Note this line 
    NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange]; 

    NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; 
    [captureOutput setVideoSettings:videoSettings]; 

    //And we create a capture session 
    self.captureSession = [[AVCaptureSession alloc] init]; 
    //We add input and output 
    [self.captureSession addInput:captureInput]; 
    [self.captureSession addOutput:captureOutput]; 


    if ([self.captureSession canSetSessionPreset:AVCaptureSessionPreset1280x720]) 
    { 
     NSLog(@"camera view Set preview port to 1280X720"); 
     self.captureSession.sessionPreset = AVCaptureSessionPreset1280x720; 
    } else 
     //set to 640x480 if 1280x720 not supported on device 
     if ([self.captureSession canSetSessionPreset:AVCaptureSessionPreset640x480]) 
     { 
      NSLog(@"camera view Set preview port to 640X480"); 
      self.captureSession.sessionPreset = AVCaptureSessionPreset640x480; 
     } 


    /*We add the preview layer*/ 

    self.prevLayer = [AVCaptureVideoPreviewLayer layerWithSession: self.captureSession]; 

    if ([self.prevLayer respondsToSelector:@selector(connection)]) 
     self.prevLayer.connection.videoOrientation = AVCaptureVideoOrientationLandscapeLeft; 
    else 
     self.prevLayer.orientation = AVCaptureVideoOrientationLandscapeLeft; 

    self.prevLayer.frame = CGRectMake(150, 0, 700, 700); 
    self.prevLayer.videoGravity = AVLayerVideoGravityResizeAspect; 
    [self.view.layer addSublayer: self.prevLayer]; 
} 

- (void) startScanning { 
    NSLog(@"camera view start scanning"); 
    self.state = LAUNCHING_CAMERA; 
    [self.captureSession startRunning]; 
    self.prevLayer.hidden = NO; 
    self.state = CAMERA; 
} 

#pragma mark AVCaptureSession delegate 

- (void)captureOutput:(AVCaptureOutput *)captureOutput 
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
     fromConnection:(AVCaptureConnection *)connection 
{ 
    NSLog(@"camera view Capture output"); 
} 

Как мне решить эту проблему?

спасибо.

ответ

1

Я думаю, что решил.

Вместо:

[self.view.layer addSublayer: self.prevLayer]; 

я поставил:

UIViewController *mainController = [UIApplication sharedApplication].keyWindow.rootViewController; 
[mainController.view.layer addSublayer: self.prevLayer]; 

Теперь я могу видеть камеру на моем гибкого применения.

Смежные вопросы