3

我在这里和其他论坛上看到过多次以不同形式提出的这个问题。有些问题得到了回答,有些则没有。有一些回答者或作者声称取得了成功。我已经实施了那些声称成功的例子,但还没有看到相同的结果。

当从 AVCaptureSession 获取样本缓冲区时,我能够成功地使用 AVAssetWriter(和 AVAssetWriterInputPixelBufferAdaptor)同时写入图像数据和音频数据。但是,如果我有以其他方式生成的 CGImageRef,并“从头开始”构建 CVPixelBufferRef,则 AVAssetWriterInputPixelBufferAdaptor 的 appendPixelBuffer:withPresentationTime 方法会在几帧上成功,然后在所有后续帧上都会失败。生成的电影文件当然是无效的。

您可以在以下位置查看我的示例代码: http: //pastebin.com/FCJZJmmi

这些图像是有效的,并通过在调试窗口中显示它们来验证(参见第 50-53 行)。该应用程序已经过 Instruments 测试,在应用程序运行过程中内存利用率较低。它不会收到任何内存警告。

据我所知,我已遵循可用的文档。为什么示例代码会失败?需要做什么来修复它?

如果有人成功让 AVAssetWriterInputPixelBufferAdaptor 使用他们自己的图像,请加入。

4

2 回答 2

9

使用示例中的 AVAssetWriter 制作包含一系列图像的电影 - https://github.com/caferrara/img-to-video

于 2012-11-22T09:27:54.123 回答
3

完成这项工作需要做两件事。

如果您正在调试自己的 AVAssetWriterInputPixelBufferAdaptor,请注意确保您不会跳过 CMTime,并确保您永远不会重复 CMTime(每次总是慢一帧)。

于 2011-02-01T00:11:15.853 回答