如何为多个MTAudioProcessingTaps获取无准备和最终确定的回调?

时间:2013-10-14 23:13:14

标签: ios objective-c avfoundation

阅读完这篇文章:How do you release an MTAudioProcessingTap?后,克里斯建议一次点击似乎有效,并且调用了无准备和最终确定的回调。

但是,我有一个以上的音轨和一个音轨。与Apple的WWDC示例不同,我的MYAudioTapProcessor不再生成音频混合,因为有多个曲目,因此AVMutableAudioMixInputParameters的{​​{1}}有多个audioMix

使用多次点按时,我会在inputParameters中存储MYAudioTapProcessor的NSMutableArray,对播放器_audioProcessors的强引用以及包含{的视图控制器中的playerItem {1}}。在拆除播放器时,我遵循以下模式:

audioMix

然而,几乎每一次,其中一个水龙头的无准备和最终确定的回调都没有被调用,MTAudioProcessingTap在内存中挂起。存储和取消分配多个分接头的正确方法是什么,以确保每个分接头的回调都会触发?

1 个答案:

答案 0 :(得分:1)

看起来引用的帖子是正确的方式。

在我的情况下,这是一个与拆除玩家无关的问题。事实证明,periodicTimeObservers上的boundaryTimeObserversAVPlayer仍有强烈的引用,导致玩家停留时间超过预期。

当离开视图控制器时(我想要销毁AVPlayer的时间),我从他们的超级视图中移除了从AVPlayerLayer创建的所有AVPlayer并对其进行了删除,然后采取与上述相同的步骤,除了我没有释放CFRelease的单独点击。这是由nil-ing _audioMix_playerItem来处理的。