1

使用 XCode-6.4、iOS-8.4.1:

使用 AVCaptureSession,我想进一步缩小(尽可能多的 iPhone 相机可以管理!)

我已经使用设置为 1 的“setVideoZoomFactor”方法(= 允许的最小值)。这很好用(请参阅最底部的代码示例......)。但后来我做了以下观察(认识到照片模式下的相机可能比视频模式下更远地缩小):

照片模式下的 iPhone 相机显示的变焦与视频模式下的相机完全不同(至少对于我的 iPhone 5S 而言)。您可以使用 iPhone 上的本机“相机应用程序”测试自己。在 PHOTO 和 VIDEO 之间切换,您会看到 Photo-mode 可能会比 video-zoomfactor=1) 进一步缩小。这怎么可能???

此外,有什么方法可以实现与照片模式相同的最小缩放因子,也可以在 iOS 下使用 AVCam 的视频模式实现?????

这是我的 5S iPhone 的照片模式和视频模式之间的缩放差异的说明(见图):

在此处输入图像描述

这是 AVCamViewController 的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Create the AVCaptureSession
    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    [self setSession:session];

    // Setup the preview view
    [[self previewView] setSession:session];

    // Check for device authorization
    [self checkDeviceAuthorizationStatus];

    dispatch_queue_t sessionQueue = dispatch_queue_create("session queue", DISPATCH_QUEUE_SERIAL);
    [self setSessionQueue:sessionQueue];

    // http://stackoverflow.com/questions/25110055/ios-captureoutputdidoutputsamplebufferfromconnection-is-not-called

    dispatch_async(sessionQueue, ^{
        self.session = [AVCaptureSession new];
        self.session.sessionPreset = AVCaptureSessionPresetMedium;
        NSArray *devices = [AVCaptureDevice devices];
        AVCaptureDevice *backCamera;
        for (AVCaptureDevice *device in devices) {
            if ([device hasMediaType:AVMediaTypeVideo]) {
                if ([device position] == AVCaptureDevicePositionBack) {
                    backCamera = device;
                }
            }
        }

        NSError *error = nil;
        AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:backCamera error:&error];
        if (error) {
            NSLog(@"%@",error);
        }
        if ([self.session canAddInput:input]) {
            [self.session addInput:input];
        }
        AVCaptureVideoDataOutput *output = [AVCaptureVideoDataOutput new];
        [output setSampleBufferDelegate:self queue:sessionQueue];
        output.videoSettings = @{(id)kCVPixelBufferPixelFormatTypeKey:@(kCVPixelFormatType_32BGRA)};
        if ([self.session canAddOutput:output]) {
            [self.session addOutput:output];
        }

        // Apply initial VideoZoomFactor to the device
        NSNumber *DefaultZoomFactor = [NSNumber numberWithFloat:1.0];
        if ([backCamera lockForConfiguration:&error])
        {
// HERE IS THE ZOOMING DONE !!!!!!
            [backCamera setVideoZoomFactor:[DefaultZoomFactor floatValue]];
            [backCamera unlockForConfiguration];
        }
        else
        {
            NSLog(@"%@", error);
        }

        [self.session startRunning];
    });
}
4

1 回答 1

1

如果您的问题是您的应用程序通过与本机 iOS 相机应用程序相比正在缩放照片,那么此设置可能会对您有所帮助。我有“这个”问题,下面的解决方案解决了它。

解决方案:配置会话

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Create the AVCaptureSession
    AVCaptureSession *session = [[AVCaptureSession alloc] init];   
    [self setSession:session];
--> self.session.sessionPreset = AVCaptureSessionPresetPhoto;  <---
...
}

您必须知道,设置仅适用于照片,不适用于视频。如果您尝试使用视频,您的应用程序将崩溃。

您可以根据需要(照片或视频)配置会话对于视频,您可以使用此值:AVCaptureSessionPresetHigh

BR。

于 2016-02-26T16:02:29.550 回答