iOS在播放视频的同时处理音频流。

4
我正在尝试为iOS创建一个视频播放器,但需要读取一些额外的音频轨道。我一直在查看MPVideoPlayerController和AV Foundation中的AVPlayer,但都有点模糊。
我的目标是播放一个视频(从本地的.mp4文件),并且在电影播放时获取当前的音频缓冲区/帧,以便我可以进行一些计算和其他(与视频/音频无关)操作,这些操作依赖于当前播放的音频。这意味着视频应该继续播放,带有其音频轨道,但我也想要实时的原始音频数据用于计算(比如:获取某个频率的振幅)。
有没有人有示例或提示如何做到这一点?当然,我已经查看了苹果的AV Foundation库文档,但对我来说不够清晰。
1个回答

10
在长时间的谷歌搜索之后,我找到了一篇博客文章,介绍了iOS 6.0中引入的MTAudioProcessingTap,完美地解决了我的问题。
你可以在这里找到如何操作和博客文章:http://chritto.wordpress.com/2013/01/07/processing-avplayers-audio-with-mtaudioprocessingtap/ 希望现在它能帮助其他人......在使用各种不同的术语进行谷歌搜索时,唯一出现的是我自己的帖子。只要你不知道MTAudioProcessingTap的存在,你就不知道该如何在谷歌上搜索它 :-)

嗨,Niek,跟进一个问题,MTAudioProcessingTap是否支持多通道(> 2)?提前致谢! - Kitetaka
@PeiXiang 是的,请查看此答案中的链接。bufferListInOut->mBuffers 包含不同通道的集合,请参见博客文章底部的代码片段。 - Niek van der Steen
感谢@Niek,是的,bufferListInOut是一个可以包含多个缓冲区的列表,但是如果我们将超过两个通道塞入MTAudioProcessingTap中,系统会出现问题,并且MTAudioProcessingTap的“准备”回调永远不会被调用。考虑到它在其结构体内部具有“左”和“右”的概念,我怀疑是否不支持超过2个通道的情况... - Kitetaka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接