阅读完这篇文章:How do you release an MTAudioProcessingTap?后,克里斯建议一次点击似乎有效,并且调用了无准备和最终确定的回调。
但是,我有一个以上的音轨和一个音轨。与Apple的WWDC示例不同,我的MYAudioTapProcessor
不再生成音频混合,因为有多个曲目,因此AVMutableAudioMixInputParameters
的{{1}}有多个audioMix
。
使用多次点按时,我会在inputParameters
中存储MYAudioTapProcessor
的NSMutableArray,对播放器_audioProcessors
的强引用以及包含{的视图控制器中的playerItem
{1}}。在拆除播放器时,我遵循以下模式:
audioMix
然而,几乎每一次,其中一个水龙头的无准备和最终确定的回调都没有被调用,MTAudioProcessingTap在内存中挂起。存储和取消分配多个分接头的正确方法是什么,以确保每个分接头的回调都会触发?
答案 0 :(得分:1)
看起来引用的帖子是正确的方式。
在我的情况下,这是一个与拆除玩家无关的问题。事实证明,periodicTimeObservers
上的boundaryTimeObservers
和AVPlayer
仍有强烈的引用,导致玩家停留时间超过预期。
当离开视图控制器时(我想要销毁AVPlayer
的时间),我从他们的超级视图中移除了从AVPlayerLayer
创建的所有AVPlayer
并对其进行了删除,然后采取与上述相同的步骤,除了我没有释放CFRelease
的单独点击。这是由nil-ing _audioMix
和_playerItem
来处理的。