我在这里和其他论坛上看到过多次以不同形式提出的这个问题。有些问题得到了回答,有些则没有。有一些回答者或作者声称取得了成功。我已经实施了那些声称成功的例子,但还没有看到相同的结果。
当从 AVCaptureSession 获取样本缓冲区时,我能够成功地使用 AVAssetWriter(和 AVAssetWriterInputPixelBufferAdaptor)同时写入图像数据和音频数据。但是,如果我有以其他方式生成的 CGImageRef,并“从头开始”构建 CVPixelBufferRef,则 AVAssetWriterInputPixelBufferAdaptor 的 appendPixelBuffer:withPresentationTime 方法会在几帧上成功,然后在所有后续帧上都会失败。生成的电影文件当然是无效的。
您可以在以下位置查看我的示例代码: http: //pastebin.com/FCJZJmmi
这些图像是有效的,并通过在调试窗口中显示它们来验证(参见第 50-53 行)。该应用程序已经过 Instruments 测试,在应用程序运行过程中内存利用率较低。它不会收到任何内存警告。
据我所知,我已遵循可用的文档。为什么示例代码会失败?需要做什么来修复它?
如果有人成功让 AVAssetWriterInputPixelBufferAdaptor 使用他们自己的图像,请加入。