2012-01-04 79 views
2

我想使用iOS上的内置摄像头制作双屏幕我试过下面的代码,但它只显示一个视图。iOS中的双摄像头输出

这是一个自然的结果,我知道。

下面是我用什么代码..

- (void)prepareCameraView:(UIView *)window 
{ 
    AVCaptureSession *session = [[AVCaptureSession alloc] init]; 
    session.sessionPreset = AVCaptureSessionPresetMedium; 

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

    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] 
                  initWithSession:session]; 
    captureVideoPreviewLayer.frame = window.bounds; 
    [window.layer addSublayer:captureVideoPreviewLayer];  
    AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

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

    [session addInput:input]; 

    [session startRunning]; 
} 

?我怎样才能在iOS双屏?

+0

为什么你不能在iOS中使用摄像头覆盖视图功能 – Ganesh 2012-01-04 08:57:36

+0

http://stackoverflow.com/questions/16543075/avcapturesession-with-multiple-previews – Johnny 2014-08-07 18:27:01

回答

-3

试试这个:

- (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]; 
    } 

} 

注意,它使绝对没有检查实际上有2个摄像头并将其拆分其垂直所以这在景观可能是最好的观察。您需要在该代码中添加一些检查,并在使用之前确定您想要如何布置每个摄像头的图层。

+0

如果你运行这段代码,你的第一次会话将会在第二次会议中立即中断(假设您的第二次会议甚至允许您开始添加输入)。而且,这段代码不会编译。 – 2012-01-04 09:06:25

+0

它为我编译。你第一次会话立即被打断是什么意思?你确定?说实话,我没有真正尝试过这一点,但我不明白为什么它不起作用。 – mattjgalloway 2012-01-04 09:08:19

+0

它编译为你,因为你编辑,所以它会:p和是的,我敢肯定。您无法同时运行两个视频捕获会话。第一个会得到一个中断通知,或者第二个将无法启动,具体取决于mediaserverd决定处理的事情。 – 2012-01-04 09:11:30