3

我有一个基本的 iOS 应用程序,它使用AVPlayer播放带有MTAudioProcessingTap附件的本地文件。我添加了一个UIAlertView带有文本字段的弹出窗口,以允许将自定义 URL 添加到应用程序的播放列表中,但是当使用 显示警报时[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

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

4

2 回答 2

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 音频处理器示例代码。我试图在视频显示时将您的 AlertView 呼叫放到不同的地方,一切正常 - 没有错误。它是 iPad 模拟器 v. 6.1。

于 2013-09-05T08:33:04.730 回答
1

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

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

于 2014-01-03T16:05:56.320 回答