【发布时间】:2011-06-16 15:57:39
【问题描述】:
我能够使用 AVAssetWriter 创建 *.mov 文件。我使用了从使用 AVCaptureSession 获得的屏幕截图图像和音频 CMSampleBuffer,并将其传递给 AVAssetWriter 的输入,并且它起作用了。
现在我想将 *.mov 文件与 ipod/iphone 音乐库中的音乐(很可能是 *.mp3)合并。所以我最初的想法是使用 AVAssetReader 从 *.mp3 和 *.mov 文件中获取样本并将样本传递给 AVAssetWriter。这行得通吗?只需阅读文档,我认为这是可能的。
我玩了一会儿这个想法,但我无法让它发挥作用。
我的第一次尝试是使用 2 个 AVAssetReader,每个文件一个。我使用 AVAssetReaderAudioMixOutput 作为第一个阅读器的输出,然后使用 AVAssetReaderVideoCompositionOutput 作为第二个阅读器的输出。问题是使用 AVAssetReaderVideoCompositionOutput 要求您将 AVVideoComposition 传递给它。我在创建 AVVideoComposition/AVMutableVideoComposition 时遇到了问题,所以我放弃了这个解决方案。我不明白为什么需要传递 AVVideoComposition,我只是想获取电影的样本。
所以我的第二次尝试类似,但我没有使用 AVAssetReaderVideoCompositionOutput 作为第二个阅读器的输出,而是使用了 2 AVAssetReaderTrackOutput。所以现在我有 2 个阅读器,总共有 3 个输出,我尝试使用输出中的示例并将其传递给 AVAssetWriter 以创建一个 *.mov 文件。我能够运行它,没有错误/崩溃。但我无法播放生成的 *.mov 文件。它的播放时长是 0。同样,AVAssetReader+AVAssetWriter 的想法没有运气。
所以我的问题/s:你可以使用 AVAssetReader 和 AVAssetWriter 来合并两个文件吗?有没有人尝试过这样做并使其工作?我应该只使用 AVMutableVideoComposition 吗?
如有必要,我会发布我的代码。
【问题讨论】:
标签: iphone ios video audio avfoundation