gpt4 book ai didi

ios - 如何准备和完成回调以触发多个 MTAudioProcessingTaps?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:19 25 4
gpt4 key购买 nike

阅读这篇文章后:How do you release an MTAudioProcessingTap? ,按照克里斯的一次点击建议似乎有效,并且调用了 unprepare 和 finalize 回调。

但是,我有不止一个音轨,每个音轨都需要点击一下。与 Apple 的 WWDC 示例不同,我的 MYAudioTapProcessor 不再生成音频混合,因为有多个轨道,因此多个 AVMutableAudioMixInputParameters 提供给 audioMix' s 输入参数

当使用多次点击时,我将 MYAudioTapProcessor 的 NSMutableArray 存储在 _audioProcessors 中,强引用播放器 playerItem audioMix 在包含 AVPlayer 的 View Controller 中。拆除播放器时,我遵循以下模式:

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;

但几乎每一次,其中一个 tap 的 unprepare 和 finalize 回调永远不会被调用,并且 MTAudioProcessingTap 会在内存中徘徊。存储和解除分配多个点击以确保触发每个点击的回调的正确方法是什么?

最佳答案

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

在我的案例中,这是一个与拆解播放器无关的问题。事实证明,对 periodicTimeObserversboundaryTimeObservers 的强引用仍在 AVPlayer 上导致播放器停留的时间超过预期。

当离开 View Controller 时(我想销毁 AVPlayer 的时间),我删除了从 AVPlayer 创建的所有 AVPlayerLayer从他们的 super View 中删除它们,然后采取与上述相同的步骤,除了我没有使用 CFRelease 释放单个水龙头。这是通过 nil-ing _audioMix_playerItem 解决的。

关于ios - 如何准备和完成回调以触发多个 MTAudioProcessingTaps?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19370752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com