阅读这篇文章后:如何发布 MTAudioProcessingTap?,按照克里斯的建议,一键点击似乎有效,并且调用了 unprepare 和 finalize 回调。
但是,我有不止一个音轨和一个水龙头。与 Apple 的 WWDC 示例不同,我MYAudioTapProcessor
不再生成音频混合,因为有多个音轨,因此多个AVMutableAudioMixInputParameters
给了audioMix
's inputParameters
。
使用多次点击时,我将MYAudioTapProcessor
s的 NSMutableArray 存储在_audioProcessors
对播放器的强引用playerItem
和audioMix
包含AVPlayer
. 拆除播放器时,我遵循以下模式:
for (int i = 0; i < _audioMix.inputParameters.count; i++) {
MTAudioProcessingTapRef tap = ((AVMutableAudioMixInputParameters *)_audioMix.inputParameters[i]).audioTapProcessor;
CFRelease(tap);
}
_audioMix = nil;
_playerItem = nil;
_player = nil;
_audioProcessors = nil;
然而几乎每次,水龙头的 unprepare 和 finalize 回调之一都不会被调用,并且 MTAudioProcessingTap 会在内存中徘徊。存储和取消分配多个点击以确保每个点击的回调触发的正确方法是什么?