我使用AVAssetWriter创建了一个*.mov文件。我使用了来自AVCaptureSession的截图和音频CMSampleBuffer,并将其传递给AVAssetWriter的输入,这样就可以工作了。
现在我想将*.mov文件与iPod / iPhone音乐库中的音乐(很可能是*.mp3)合并。因此,我的初始想法是使用AVAssetReader从*.mp3和*.mov文件中获取样本,并将样本传递到AVAssetWriter。这样行吗?仅通过阅读文档,我认为这是可能的。
我尝试了一下这个想法,但没能让它起作用。
我的第一次尝试是使用2个AVAssetReaders,每个文件一个。我使用AVAssetReaderAudioMixOutput作为第1个读取器的输出,然后使用AVAssetReaderVideoCompositionOutput作为第2个读取器的输出。问题是,使用AVAssetReaderVideoCompositionOutput需要您传递一个AVVideoComposition。我无法创建AVVideoComposition / AVMutableVideoComposition,所以我放弃了这个解决方案。我不明白为什么需要传递AVVideoComposition,我只想获取电影的样本。
因此,我的第二次尝试类似,但我使用2个AVAssetReaderTrackOutput而不是AVAssetReaderVideoCompositionOutput作为第2个读取器的输出。所以现在我有2个读取器,总共有3个输出,我尝试使用输出中的样本,并将其传递给AVAssetWriter创建一个*.mov文件。我能够运行它,没有错误/崩溃。但我无法播放结果为*.mov的文件。其播放时间为0。因此,使用AVAssetReader + AVAssetWriter的想法又失败了。
那么我的问题是:您可以使用AVAssetReader和AVAssetWriter合并两个文件吗?有人尝试过这样做并使其起作用吗?我应该只使用AVMutableVideoComposition吗?
如果需要,我将发布我的代码。
现在我想将*.mov文件与iPod / iPhone音乐库中的音乐(很可能是*.mp3)合并。因此,我的初始想法是使用AVAssetReader从*.mp3和*.mov文件中获取样本,并将样本传递到AVAssetWriter。这样行吗?仅通过阅读文档,我认为这是可能的。
我尝试了一下这个想法,但没能让它起作用。
我的第一次尝试是使用2个AVAssetReaders,每个文件一个。我使用AVAssetReaderAudioMixOutput作为第1个读取器的输出,然后使用AVAssetReaderVideoCompositionOutput作为第2个读取器的输出。问题是,使用AVAssetReaderVideoCompositionOutput需要您传递一个AVVideoComposition。我无法创建AVVideoComposition / AVMutableVideoComposition,所以我放弃了这个解决方案。我不明白为什么需要传递AVVideoComposition,我只想获取电影的样本。
因此,我的第二次尝试类似,但我使用2个AVAssetReaderTrackOutput而不是AVAssetReaderVideoCompositionOutput作为第2个读取器的输出。所以现在我有2个读取器,总共有3个输出,我尝试使用输出中的样本,并将其传递给AVAssetWriter创建一个*.mov文件。我能够运行它,没有错误/崩溃。但我无法播放结果为*.mov的文件。其播放时间为0。因此,使用AVAssetReader + AVAssetWriter的想法又失败了。
那么我的问题是:您可以使用AVAssetReader和AVAssetWriter合并两个文件吗?有人尝试过这样做并使其起作用吗?我应该只使用AVMutableVideoComposition吗?
如果需要,我将发布我的代码。