2013-10-12 26 views
5

AVFoundation kullanarak bir kamera uygulamaya çalışıyorum. Sanırım herşeyi doğru yapıyorum. Bu iAVFoundation kamera önizleme katmanı çalışmıyor

  1. 3 numaralı maddede belirtildiği cihazı kullanarak bir aygıt girişi olsun geri
  2. kamerayı almak için cihazlar aracılığıyla oturumunu
  3. döngü Video Çeşidi
  4. olsun cihazlarını oluşturmak yapıyorum ve bir CALayer fro almak AVCaptureStillImageOutput
  5. seti çıkış ayarlarını türünde bir çıkış oluşturmak oturumda
  6. eklemek ve oturumu
  7. eklemek görüşümü 2
  8. başlangıç ​​oturumu

Yani çalışan # belirtilen katmanına eklemek AVCaptureVideoPreviewLayer

  • bir örneğini oluşturmak (I görüntüsü 2 ile ne demek aşağıda açıklayacağım) m ı Biri diğerinden 2 görüntüye sahip. Üstte bir Görünüm 1 ve aşağıdaki görünüm 2'dir. Görünüm 1 özel kamera kontrolleri ile sağlaması gerekiyordu. .

    self.session = [[AVCaptureSession alloc]init]; 
    [self.session setSessionPreset:AVCaptureSessionPresetHigh]; 
    NSArray *devices = [[NSArray alloc]init]; 
    devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; 
    for (AVCaptureDevice *device in devices){ 
        if([device position] == AVCaptureDevicePositionBack){ 
         self.device = device; 
         break; 
        } 
    } 
    NSError *error; 
    self.input = [[AVCaptureDeviceInput alloc]initWithDevice:self.device error:&error]; 
    if([self.session canAddInput:self.input]){ 
        [self.session addInput:self.input];  
    } 
    
    
    self.stillImageOutput = [[AVCaptureStillImageOutput alloc]init]; 
    NSDictionary *outputSettings = @{AVVideoCodecKey : AVVideoCodecJPEG}; 
    [self.stillImageOutput setOutputSettings:outputSettings]; 
    
    [self.session addOutput:self.stillImageOutput]; 
    
    CALayer *cameraLayer = self.cameraView.layer; 
    self.cameraView.backgroundColor = [UIColor clearColor]; 
    
    AVCaptureVideoPreviewLayer *preview = [[AVCaptureVideoPreviewLayer alloc]initWithSession:self.session]; 
    [cameraLayer addSublayer:preview]; 
    
    [self.session startRunning]; 
    

    Ne olsun 1 (onun arka plan olarak .png imajı vardır bunun altında görünümü, görünüm 2 görünür, böylece görüntü bir delik vardır: İşte

    kodudur) ve görünüm 2 görülebilir ama ne yapmam gerektiğini görmüyorum. Çünkü ben 2'yi görmek için arka plan rengini değiştirdim, tüm siyahı görüyorum. Fotoğraf makinesinin gördüklerini görmem gerekiyor.

  • cevap

    7

    Önizleme katmanınızın doğru çalışması için çerçeve, maskToBounds ve yerçekimi ayarlamanız gerekir. Ben böyle yaptım:

    CALayer *cameraLayer = self.cameraView.layer; 
    self.cameraView.backgroundColor = [UIColor clearColor]; 
    [cameraLayer setMasksToBounds:YES]; 
    AVCaptureVideoPreviewLayer *preview = [[AVCaptureVideoPreviewLayer alloc]initWithSession:self.session]; 
    [preview setVideoGravity:AVLayerVideoGravityResizeAspectFill]; 
    [preview setFrame:[cameraLayer bounds]]; 
    
    
    [cameraLayer addSublayer:preview]; 
    
    İlgili konular