捕获视频文件的输出以进行逐帧处理

时间:2011-02-18 17:58:06

标签: iphone ios video

我试图从视频文件中获取单个帧(7秒长)并遇到巨大的内存问题。

我正在使用AVURLAsset加载资产,然后创建AVAssetReader和随附的AVAssetReaderTrackOutput(带有像素格式kCVPixelFormatType_32BGRA)。一切似乎工作得很好,除了大量的内存命中,最终几乎立即让我的应用程序关闭操作系统。

一旦我打电话给[myAVAssetReader startReading],记忆就会增加25兆,并且只会从那里变得更糟。

即使我只是致电[myAVAssetReader startReading]然后[myAVAssetReader cancelReading][myAVAssetReader release],也不会释放25 megs。一旦我进入循环收集帧,它只会变得更糟:

CMSampleBufferRef sample = [output copyNextSampleBuffer];

    while( sample != NULL )
    {
         CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer( sample );

         // Lock the image buffer
         CVPixelBufferLockBaseAddress( imageBuffer, 0 );

            // Do stuff with the imageBuffer

         // We unlock the  image buffer
         CVPixelBufferUnlockBaseAddress( imageBuffer, 0 );

         // done with the sample
         CFRelease( sample );

         sample = [output copyNextSampleBuffer];
    }

有关如何释放AVAssetReader正在使用的内存的任何线索?

0 个答案:

没有答案