2012-01-04 80 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