5

iOSデバイスの両方のカメラから同時に写真を撮ろうとしています。また、両方のカメラのライブプレビューを画面に表示したいと思います。私はこのコードを使用します:

- (void)prepareCameraView:(UIView *)window
{
    NSArray *captureDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];

    {
        AVCaptureSession *session = [[AVCaptureSession alloc] init];
        session.sessionPreset = AVCaptureSessionPresetMedium;

        CALayer *viewLayer = window.layer;
        NSLog(@"viewLayer = %@", viewLayer);

        AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
        captureVideoPreviewLayer.frame = CGRectMake(0.0f, 0.0f, window.bounds.size.width/2.0f, window.bounds.size.height);
        [window.layer addSublayer:captureVideoPreviewLayer];

        NSError *error = nil;
        AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:[captureDevices objectAtIndex:0] error:&error];
        if (!input)
        {
            NSLog(@"ERROR : trying to open camera : %@", error);
        }

        [session addInput:input];

        [session startRunning];
    }

    {
        AVCaptureSession *session = [[AVCaptureSession alloc] init];
        session.sessionPreset = AVCaptureSessionPresetMedium;

        CALayer *viewLayer = window.layer;
        NSLog(@"viewLayer = %@", viewLayer);

        AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
        captureVideoPreviewLayer.frame = CGRectMake(window.bounds.size.width/2.0f, 0.0f, window.bounds.size.width/2.0f, window.bounds.size.height);
        [window.layer addSublayer:captureVideoPreviewLayer];

        NSError *error = nil;
        AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:[captureDevices objectAtIndex:1] error:&error];
        if (!input)
        {
            NSLog(@"ERROR : trying to open camera : %@", error);
        }

        [session addInput:input];

        [session startRunning];
    }

}

ただし、アプリがフロントカメラのセッションを開始すると、バックカメラのセッションが停止し、静止画像が残ります。

両方のカメラからの出力をライブで表示する方法はありますか?

ありがとう

4

1 に答える 1

2

いいえ、ちがいます。AVCaptureSessionを使用する場合、一度に使用できるカメラフィードは1つだけです。

複数のAVCaptureInputsを同時に許可することはできません。したがって、一方のセッションが開始されるとすぐに、もう一方のセッションは停止します。

最善の策は、2つのセッションを作成し、最初のセッションを開始し、フレームが報告されたらすぐに停止して2番目のセッションを開始することです。次に、2番目を停止し、最初を開始します。これを続けます。これは機能しますが、受信する入力に顕著な遅延が発生します。

于 2013-03-16T11:21:50.087 に答える