UIAlertView打破了AVPlayer的音频流程

时间:2013-09-05 06:53:44

标签: ios uialertview avplayer

我有一个基本的iOS应用程序,它使用AVPlayer来播放附加了MTAudioProcessingTap的本地文件。我添加了一个带有文本字段的UIAlertView弹出式窗口,以允许将自定义网址添加到应用的播放列表中,但是当使用[alert show]显示警报时,音频系统会失败。如果我在播放任何曲目之前显示警报,开始播放曲目,然后再次显示警报它工作正常 - 几乎就像第一个节目有一些CPU尖峰惩罚(虽然我在仪器上看不到任何东西)。

提醒:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Play Remote Track"
                                                message:@"Enter the address."
                                               delegate:self
                                      cancelButtonTitle:@"Cancel"
                                      otherButtonTitles:@"Play", nil];

alert.alertViewStyle = UIAlertViewStylePlainTextInput;

[alert show];

错误:

  • 记录消息:<ClientProcessingTapManager> AudioQueueProcessingTapGetSourceAudio posting message to kill mediaserverd (36078)
  • MTAudioProcessingTapGetSourceAudio()会在下一个数据包268451843上返回状态代码268435459

更新:问题仅在调试时发生,因此事实证明它不是一个showstopper。不过,我仍然有兴趣深入了解它。

2 个答案:

答案 0 :(得分:1)

试试这个:

#import <dispatch/dispatch.h>

dispatch_async(dispatch_get_main_queue(), ^{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Play Remote Track"
                                            message:@"Enter the address."
                                           delegate:self
                                  cancelButtonTitle:@"Cancel"
                                  otherButtonTitles:@"Play", nil];

        alert.alertViewStyle = UIAlertViewStylePlainTextInput;

        [alert show];
});

如果没有帮助,请尝试查看MTAudioProcessingTap Audio Processor Sample Code。我试图在视频显示时将你的AlertView调用到不同的地方,一切都很好 - 没有错误。这是iPad模拟器v.6.1。

答案 1 :(得分:1)

只是把这个放到床上,我最终得出结论,这是一个性能问题。在我遇到的所有其他情况下,当你在AudioQueueProcessingTapGetSourceAudio posting message to kill mediaserverd (36078)进程循环中进行“太多”工作时,似乎会调用MTAudioProcessingTap。我认为在我的案例中显示UIAlertView正在将设备推到边缘。

至于什么构成“太多”工作,我不知道,MTAudioProcessingTap的头文件中的任何文档都没有提及。在我测试我的应用程序的几个设备上,我可以增加音频循环中的工作,直到整体CPU大约为20%,然后出现kill消息,并且tap停止调用它的处理回调。它必须是人为强加的限制,或者出于某种原因,无论使用多少CPU,我的进程循环都无法实现其实时保证。