2011-09-01 12 views
0

AVAssetWriterを使用してフレームを取得し、処理してからMOVファイルに書き込むには、AVCaptureVideoDataOutputを使用しています。私は、データ入力のための最小限のフレームレートを設定することを理解し、私は私が私がAVCaptureVideoDataOutputからのフレームレートの取得

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

の所与のサイクルの実際のフレーム持続時間を取得できますか

myDataOutput.minFrameDuration = someCMTime;

を書く必要があります実際の期間が必要なので、資産ライターの正確な継続時間を入力することができます。私は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

関連する問題