从AVCaptureVideoDataOutput获取帧速率

时间:2011-09-01 19:26:55

标签: iphone avfoundation

我正在使用AVCaptureVideoDataOutput来抓取帧,处理它们,然后使用AVAssetWriter将它们写入MOV文件。我知道要设置数据输入的最小帧速率,我只需要写

myDataOutput.minFrameDuration = someCMTime;

如何获得给定周期

的实际帧持续时间

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

我需要实际持续时间,以便我可以为资产编写者输入准确的持续时间。我一直在使用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 个答案:

答案 0 :(得分:1)

最后,问题是我使用AVAssetWriterInputPixelBufferAdaptor,这需要用户设置演示时间。相反,我最后只是通过在appendBuffer

上调用AVAssetWriterInput来直接添加框架