在iPad上旋转AV视频预览区域

时间:2014-07-17 14:45:29

标签: ios xcode

我想在iPhone和iPad上使用视频预览图层,但在iPad上它不会旋转,而且它的高度错误。

这是我的代码:

- (void)capture
{
    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    NSError *error = nil;

    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device
                                                                        error:&error];
    if (!input)
    {
        NSLog(@"Error: %@", error);
        return;
    }

    [session addInput:input];

    //Turn on point autofocus for middle of view
    [device lockForConfiguration:&error];
    CGPoint point = CGPointMake(0.5,0.5);
    [device setFocusPointOfInterest:point];
    [device setFocusMode:AVCaptureFocusModeContinuousAutoFocus];
    [device unlockForConfiguration];



    //Add the metadata output device
    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    [session addOutput:output];

    NSLog(@"%lu",output.availableMetadataObjectTypes.count);
    for (NSString *s in output.availableMetadataObjectTypes)
        NSLog(@"%@",s);

        //You should check here to see if the session supports these types, if they aren't support you'll get an exception
        output.metadataObjectTypes = @[AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeQRCode];
        output.rectOfInterest = self.livevideo.bounds;


        AVCaptureVideoPreviewLayer *newCaptureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
        newCaptureVideoPreviewLayer.frame = self.view.layer.bounds;
        newCaptureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
        [self.livevideo.layer insertSublayer:newCaptureVideoPreviewLayer above:self.livevideo.layer];

    [session startRunning];
}

- (void)captureFront
{
    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    NSError *error = nil;

    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device
                                                                        error:&error];
    if (!input)
    {
        NSLog(@"Error: %@", error);
        return;
    }

    [session addInput:input];

    //Turn on point autofocus for middle of view
    [device lockForConfiguration:&error];
    CGPoint point = CGPointMake(0.5,0.5);
    [device setFocusPointOfInterest:point];
    [device setFocusMode:AVCaptureFocusModeContinuousAutoFocus];
    [device unlockForConfiguration];



    //Add the metadata output device
    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    [session addOutput:output];

    NSLog(@"%lu",output.availableMetadataObjectTypes.count);
    for (NSString *s in output.availableMetadataObjectTypes)
        NSLog(@"%@",s);

        //You should check here to see if the session supports these types, if they aren't support you'll get an exception
        output.metadataObjectTypes = @[AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeQRCode];
        output.rectOfInterest = self.livevideo.bounds;


        AVCaptureVideoPreviewLayer *newCaptureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
        newCaptureVideoPreviewLayer.frame = self.view.layer.bounds;
        newCaptureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;


        [session startRunning];
}

Image

0 个答案:

没有答案