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");
}
}