2013-10-12 3 views
5

AVFoundationを使用してカメラを実装しようとしています。私はすべてが正しいと思う。これは私がAVFoundationカメラプレビューレイヤーが機能しない

  1. をやっているものですにセッション
  2. を作成バック
  3. にカメラを取得するための装置を介してビデオタイプ
  4. ループのデバイスを取得する#3で述べたデバイスを使用して、デバイスの入力を取得し、 CALayerのあちこちを取得
  5. をセッション
  6. に追加するタイプAVCaptureStillImageOutput
  7. セットの出力設定の出力を作成し、セッションに追加私の見解2を
  8. は7
  9. スタートがセッションを

だから、実行している#で述べた層に追加AVCaptureVideoPreviewLayer

  • のインスタンスを作成します(私はビュー2で何を意味するか下に説明します)は、M I 2つのビューが1つずつあります。一番上のものはビュー1であり、一つはビュー2です。ビュー1は、カスタムカメラコントロールを提供することになっています。

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

    私は何を取得するビュー1(それはその背景としての.pngイメージを持っているその下に表示するように画像が穴を有し、ビュー2が見えるようにすることができます。ここでは

    コードです)とビュー2が表示されますが、私は私が何を想定していないか分かりません。私はビュー2の背景色をクリアカラーに変更したので、私はすべて黒を見ます。私はカメラが見ているものを見るはずです。

  • 答えて

    7

    プレビューレイヤが正しく機能するように、frame、maskToBounds、およびgravityを設定する必要があります。これが私のやり方です

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