视频捕获:在ios 6中丢弃的帧

时间:2014-04-26 12:23:40

标签: ios video avcapturedevice avcapture cmsamplebufferref

我正在使用AVFoundation框架使用AVCaptureSession编码视频。

录制视频和音频并在ios7(iPAD)中成功保存到相机胶卷 但不在我的ios 6(iPOD TOUCH)

以下代码将示例缓冲区添加到音频和视频AVAssetWriterInput。

   -(void) captureOutput:(AVCaptureOutput*)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection*)connection
    {
        CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
        CGSize imageSize = CVImageBufferGetEncodedSize(imageBuffer);
        NSString *desc = [captureOutput description];
        NSLog(@"Desc : %@",desc);

        //  also in the 'mediaSpecific' dict of the sampleBuffer
        //  UIImage *image = [self imageFromSampleBuffer:sampleBuffer];

            if (CMSampleBufferDataIsReady(sampleBuffer) )
            {
                if (encoder._writer.status == AVAssetWriterStatusUnknown)
                {
                    CMTime startTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
                    BOOL didStart = [encoder._writer startWriting];
                    [encoder._writer startSessionAtSourceTime:startTime];
                }

                if(captureOutput == outputDevice)
                {
                    //To catch image Buffer
                    [encoder._writerInput appendSampleBuffer:sampleBuffer];
                    frameCount++;
                }

                if(captureOutput == audioOutput)
                {
                    //To catch audio buffer
                    [encoder.audioWriterInput appendSampleBuffer:sampleBuffer];
                }
            }
        NSLog( @"frame captured at %.fx%.f", imageSize.width, imageSize.height );
    }

我得出的结论是,iPOD中捕获的大多数帧,即iOS 6,都是使用以下代码丢弃的。

- (void)captureOutput:(AVCaptureOutput *)captureOutput didDropSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
    if(captureOutput==outputDevice)
    {
        CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
        CGSize imageSize = CVImageBufferGetEncodedSize(imageBuffer);
        NSLog( @"Discarded Frame at %.fx%.f", imageSize.width, imageSize.height );
    }
}

请帮助我,我严重困在这里,无法前进。

建议我一些解决方案或至少你的有价值的想法和有关这些的假设 情况。

提前感谢你。

0 个答案:

没有答案