1

XCode-6.4、iOS-8.4.1 を使用:

AVCaptureSession を使用して、さらにズームアウトしたいと思います (iPhone カメラが処理できる範囲で!)。

私はすでに "setVideoZoomFactor" メソッドを 1 に設定して使用しています (= 許容される最小値)。これは非常にうまく機能します(一番下のコード例を参照してください...)。しかし、その後、次の観察を行いました(写真モードのカメラは、ビデオモードよりもさらにズームアウトする可能性があることを認識しています)。

写真モードの 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 に答える