Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用AVAssetReader和AVAssetWriter将*.mp3与*.mov文件合并_Iphone_Ios_Video_Audio_Avfoundation - Fatal编程技术网

Iphone 使用AVAssetReader和AVAssetWriter将*.mp3与*.mov文件合并

Iphone 使用AVAssetReader和AVAssetWriter将*.mp3与*.mov文件合并,iphone,ios,video,audio,avfoundation,Iphone,Ios,Video,Audio,Avfoundation,我能够使用AVAssetWriter创建一个*.mov文件。我使用了使用AVCaptureSession获得的屏幕截图图像和音频CMSampleBuffer,并将其传递给AVAssetWriter的输入,结果成功了 现在,我想将*.mov文件与ipod/iphone音乐库中的音乐(很可能是*.mp3)合并。所以我最初的想法是使用AVAssetReader从*.mp3和*.mov文件中获取样本,并将样本传递给AVAssetWriter。这样行吗?仅仅通过阅读文档,我认为这是可能的 我对这个想法想了

我能够使用AVAssetWriter创建一个*.mov文件。我使用了使用AVCaptureSession获得的屏幕截图图像和音频CMSampleBuffer,并将其传递给AVAssetWriter的输入,结果成功了

现在,我想将*.mov文件与ipod/iphone音乐库中的音乐(很可能是*.mp3)合并。所以我最初的想法是使用AVAssetReader从*.mp3和*.mov文件中获取样本,并将样本传递给AVAssetWriter。这样行吗?仅仅通过阅读文档,我认为这是可能的

我对这个想法想了一会儿,但没能实现

我的第一次尝试是使用2个Avassetrader,每个文件一个。我使用AVAssetReaderAudioMixOutput作为第一个读卡器的输出,然后使用AVAssetReaderAudioMixOutput作为第二个读卡器的输出。问题在于,使用AvassetradeServiceDeCompositionOutput需要向其传递一个AVVideoComposition。我在创建AVVideoComposition/AVMutableVideoComposition时遇到问题,所以我放弃了这个解决方案。我不明白为什么我需要通过AV视频合成,我只想得到电影的样本

因此,我的第二次尝试与之类似,但我没有使用AvassetraderDeCompositionOutput作为第二个读卡器的输出,而是使用了2个AvassetraderTrackOutput。现在我有2个阅读器,总共有3个输出,我尝试使用输出中的示例并将其传递给AVAssetWriter以创建一个*.mov文件。我能够运行它,没有错误/崩溃。但我无法播放生成的*.mov文件。它的播放持续时间是0。所以再一次,Avassetrader+AVAssetWriter的想法没有运气

所以我的问题是:你能用AVAssetReader和AVAssetWriter合并两个文件吗?有没有人试过这样做,并使它发挥作用?我应该改用AVMutableVideoComposition吗


如果有必要,我会发布我的代码。

您可以使用Avassetrader和AVAssetWriter来合并这两个文件,但这可能比您需要的控制/功率曲线更远

AVAssetExportSession可能更适合,因为您可以在几行代码中合并音频和视频曲目:

  • 创建包含mp3和mov的AVComposition作为AVCompositionTracks
  • 使用AVAssetExportSession导出AVComposition

  • 谢谢你的回复。我只是想说清楚。通过将mp3与电影合并,我的意思是使mp3成为电影的背景声音。使用AVAsset+AVAssetWriter是否可以做到这一点?我假设它可以用AVComposition来完成。两种方法都可以,但AVAssetWriter更难。