HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 你如何发布MTAudioProcessingTap?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
MTAudioProcessingTap的头文件说它的初始化和准备回调将通过无准备和最终化回调来平衡.但是,在 Apple’s example中,这些回调永远不会被调用(我添加了对它们的记录,@R_395_9447@检查).头文件表示在取消分配对象时将调用它们.

在Apple的示例中,Tap被传递到audiomixinputParameters中的retain参数,该参数被传递到音频混合中,在那里它不再可公开访问:

@H_231_9@mTAudioProcessingTapRef audioProcessingTap; if (noErr == MTAudioProcessingTapCreate(kcfAllocatorDefault,&callBACks,kMTAudioProcessingTapCreationFlag_PreEffects,&audioProcessingTap)) { audiomixinputParameters.audioTapProcessor = audioProcessingTap; CFRelease(audioProcessingTap); au@L_681_0@mix.inputParameters = @[audiomixinputParameters]; _au@L_681_0@mix = au@L_681_0@mix; }

我希望Au@L_681_0@mix负责在自己的dealloc方法中释放它,并在发布相关的PlayerItem时释放Au@L_681_0@mix.

Apple的例子使用的AVPlayer只播放一个项目,所以也许它不需要直接释放任何东西.但在我的情况下,我正在使用AVQueuePlayer,所以我不断传递新的AVPlayerItems.我认为它正在泄漏我为每个玩家项目创建的Taps(以及相关的音频单元),即使播放器项目被取消分配.

当我完成其关联的播放器项目时,解除MTAudioProcessingTap并获取其无准备和最终确定的回调的正确方法是什么?

更新:我发现它实际上仍然可以通过音频混合访问,但是像这样释放它不会触发无准备和最终的回调:

((AVMutableAudiomixinputParameters *)au@L_681_0@mix.inputParameters[0]).audioTapProcessor = nil;

这也不是:

@H_231_9@mTAudioProcessingTapRef audioProcessingTap = ((AVMutableAudiomixinputParameters *)au@L_681_0@mix.inputParameters[0]).audioTapProcessor; CFRelease(audioProcessingTap);

解决方法

我有同样的问题.为了使它工作,我不得不重置播放器项的au@L_681_0@mix,tap处理器(Apple的示例项目中的MYAudioTapProcessor)并手动释放MTAudioProcessingTapRef:

@H_231_9@mTAudioProcessingTapRef tap = ((AVMutableAudiomixinputParameters *)_audioTapProcessor.au@L_681_0@mix.inputParameters[0]).audioTapProcessor; _player.currentItem.au@L_681_0@mix = nil; _audioTapProcessor = nil; CFRelease(tap);

这会导致调用finalize回调.

编辑:似乎不需要CFRelease,请参阅注释.

大佬总结

以上是大佬教程为你收集整理的ios – 你如何发布MTAudioProcessingTap?全部内容,希望文章能够帮你解决ios – 你如何发布MTAudioProcessingTap?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。