当前位置: 首页 > 知识库问答 >
问题:

如何获得未准备和完成回调以触发多个MTAudioProcessingTaps?

阎淮晨
2023-03-14

读了这篇文章后:如何发布MTAudioProcessingTap?,按照chris的建议进行一次点击似乎有效,并调用unprepare和finalize回调。

但是,我有不止一个音轨,每个音轨都有一个水龙头。与Apple的WWDC示例不同,我的MYAudioTapProcess不再生成音频混音,因为有多个音轨,因此多个AVMutableAudioMixInputParameters给定给audioMixinputParameters

当使用多个点击时,我在音频处理器中存储一个NSMutableArray of MYAudioTapProcessor,强引用播放器项和包含AVPlayer的视图控制器中的audioMix。在拆卸播放器时,我遵循以下模式:

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;

然而,几乎每一次,其中一个水龙头的未准备和结束回调永远不会被调用,MTAudioProcessingTap挂在内存中。存储和释放多个水龙头以确保每个水龙头的回调触发的正确方法是什么?

共有1个答案

凌宏大
2023-03-14

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

在我的情况下,这是一个与拆卸球员无关的问题。事实证明,仍然在AVPlayer上的对PeriodicTimeObservators和BoundaryTimeObservators的强烈引用导致播放器逗留的时间比预期的长。

当离开视图控制器时(我想销毁AVPlayer的时间),我从他们的超级视图中删除了从AVPlayer创建的任何AVPlayerLayer,并将它们归零,然后采取与上述相同的步骤,除了我没有使用CFRelease释放单独的水龙头。这是通过nil-ing_audioMix_playerItem来解决的。

 类似资料:
  • 问题内容: (做了很多修改,因为它是类的一部分,等等。) 目前,这有点让人讨厌,因为计时器的使用似乎很垃圾。我会使用$ .when和$ .done,但是我不知道可能有多少房间,所以我不知道什么时候放什么。 如何确保仅在所有AJAX请求返回后才调用run_the_rest_of_the_app()? 问题答案: 在进行AJAX调用之前, 完成AJAX调用后(在回调中):

  • 问题内容: 嗨,下面的Javascript是在我提交表单时调用的。它首先从文本区域分割一堆网址,然后: 1)在表格中为每个网址添加行,并在最后一列(“状态”列)中显示“未开始”。 2)再次循环遍历每个URL,首先它进行ajax调用以检查状态(status.php),该状态将返回0到100之间的百分比 。3)在同一循环中,它通过ajax启动实际过程(process.php),当进程完成时(请记住连续

  • 我想要一个完整的未来,只发出完成的信号(例如,我没有返回值)。 我可以将CompletableFuture实例化为: 但是我应该向完整的方法提供什么呢?例如,我不能做

  • 我对RxJava并不完全陌生,但我被一项看似简单的任务所阻碍。 我有一个数据源,它公开了一个反应式API,我所要做的就是获取一些数据,返回它,并在没有其他消息发出时自动关闭连接。 这是我的代码: conn.query()和conn.close()在不同的调度程序中异步执行。此代码不起作用,因为conn.close()返回一个没有订阅服务器的Completable。此外,如果我手动订阅doOnCom

  • 有些方法返回。这是一个典型的模式,分多个层: 假设返回一个(它向数据库写入一些内容,发送一条消息等)。如果我只是用替换它,那么一切都按预期工作,否则就不是这样了。更具体地说,单声道从未完成,它贯穿所有处理,但在结束时错过了终止信号。所以这些东西实际上是写在数据库中的,消息实际上是发送的,等等。 为了证明没有终止是问题所在,这里有一个有效的黑客: null 我不能在应用程序之外用简单的单工作流复制这

  • 问题内容: 我有一个循环,可以调用API并将结果编译成数组。我如何等待所有调用完成后才能恢复执行?我看到了一系列有关如何等到打完一个电话的答案,但我不知道如何检查所有这些。如果我做一个while循环,一直等到’obj’是正确的长度,则页面只会停顿直到调用完成,这不是我想要的。请帮助? 问题答案: 如果您使用jQuery的deferred,这很容易。有一种方法,等待多个诺言完成,然后运行回调。那就是