2013-10-12 4 views
5

그래서 AVFoundation을 사용하여 카메라를 구현하려고합니다. 나는 모든 일을 올바르게한다고 생각합니다. 이 제가AVFoundation 카메라 미리보기 레이어가 작동하지 않습니다.

  1. 는 # 3에서 설명한 장치를 이용한 디바이스의 입력을 얻을 백
  2. 에서 카메라를 얻는 장치를 통해 세션을
  3. 루프 비디오 형
  4. GET 장치를 생성하고 있는가 무엇이며 의 CALayer를 이리저리 얻을 AVCaptureStillImageOutput
  5. 설정된 출력 설정을 유형의 출력을 생성 세션
  6. 에 추가하고 세션
  7. 에 추가 내보기 2
  8. 7
  9. 시작 세션을

그래서 실행 #에서 언급 된 레이어에 추가 AVCaptureVideoPreviewLayer

  • 의 인스턴스를 생성 (내가보기 2 무엇을 의미하는 아래에 설명 할 것) M : 2 개의보기가 하나씩 있습니다. 상단에있는 것은보기 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

    프레임, maskToBounds 및 중력을 설정해야 미리보기 레이어가 올바르게 작동합니다. 이게 내가 한거야.

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