簡體   English   中英

適用於IOS的攝像機本機擴展

[英]Video Camera native extension for 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");
}

我該如何解決?

非常感謝你。

我想我已經解決了。

代替:

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

我放:

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

現在,我可以在我的flex應用程序上看到相機了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM