2011-09-01 5 views
0

AVCaptureVideoDataOutput을 사용하여 프레임을 잡고 처리 한 다음 AVAssetWriter을 사용하여 MOV 파일에 기록합니다. 내가 필요할 때만AVCaptureVideoDataOutput의 프레임 속도 받기

myDataOutput.minFrameDuration = someCMTime;

가 어떻게

- (void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection

I의 특정주기에 대한 실제 프레임 시간을 얻을 수 쓰기, 즉 데이터 입력의 최소 프레임 속도를 설정하는 이해 저작자의 정확한 기간을 입력 할 수 있도록 실제 기간이 필요합니다. 나는 CMSampleBufferGetDuration(sampleBuffer)을 사용하여 놀았지만 제한적으로 성공했습니다. 이 값을 얻는 방법에 대한 아이디어?

여기 내 현재 captureOutput 방법의 구현 : 결국

- (void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 
{ 
    if([writerInput isReadyForMoreMediaData]) 
    { 

     CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 

     if(imageBuffer){ 

      totalTime = CMTimeAdd(totalTime, CMSampleBufferGetDuration(sampleBuffer)); 


      if([adaptor appendPixelBuffer:imageBuffer withPresentationTime:totalTime]){ 
       NSLog(@"frame added"); 
       CVPixelBufferUnlockBaseAddress(imageBuffer,0); 
      }else{ 
       NSLog(@"frame NOT added"); 
      } 

     }else{ 
      NSLog(@"no buffer"); 
     } 
    }else{ 
     NSLog(@"writerinput not ready"); 
    } 
} 

답변

1

, 문제는 내가 프리젠 테이션 시간을 설정할 수있는 사용자가 필요로하는 AVAssetWriterInputPixelBufferAdaptor을 사용하고 있었다이었다. 대신, 프레임을 직접 추가하는 일은 appendBufferAVAssetWriterInput