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

2024-02-29

我试图从视频文件(7 秒长)中抓取各个帧,但遇到了巨大的内存问题。

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

我一打电话[myAVAssetReader startReading]内存猛增了 25 兆,并且从那时起它只会变得更糟。

即使我只是打电话[myAVAssetReader startReading] then [myAVAssetReader cancelReading] and [myAVAssetReader release]25兆从未发布。一旦我进入循环收集帧,情况只会变得更糟:

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正在使用?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐