我已经在这里和其他论坛中以不同的形式多次询问过这个问题。有些问题得到了解答,有些则没有。回答者或作者声称有一些成功的地方。我已经实现了那些声称成功的例子,但还没有看到相同的结果。
当从AVCaptureSession获取样本缓冲区时,我能够成功地使用AVAssetWriter(和AVAssetWriterInputPixelBufferAdaptor)同时写入图像数据和音频数据。但是,如果我有以其他方式生成的CGImageRef,并且“从头开始”构建CVPixelBufferRef,则AVAssetWriterInputPixelBufferAdaptor的appendPixelBuffer:withPresentationTime方法会成功几帧,然后对所有后续帧都会失败。生成的影片文件当然无效。
您可以在以下位置查看我的示例代码:http://pastebin.com/FCJZJmMi
图像有效,并通过在调试窗口中显示来验证(参见第50-53行)。该应用程序已经过仪器测试,在整个应用程序运行期间内存利用率很低。它没有得到任何内存警告。
据我所知,我已经遵循了可用的文档。为什么示例代码失败?需要做些什么来解决它?
如果有人成功获得了AVAssetWriterInputPixelBufferAdaptor来处理自己的图片,请加入。
答案 0 :(得分:9)
使用示例中的AVAssetWriter制作包含一系列图像的电影 - https://github.com/caferrara/img-to-video
答案 1 :(得分:3)
完成这项工作需要两件事。
如果您正在调试自己的AVAssetWriterInputPixelBufferAdaptor,请注意确保不要跳过CMTime,并确保不再重复CMTime(每次只有一帧慢速总是)。