2013-09-05 3 views
3

У меня есть базовое приложение для iOS, которое использует AVPlayer для воспроизведения локальных файлов с прикрепленным MTAudioProcessingTap. Я добавил всплывающее окно UIAlertView с текстовым полем, чтобы добавить пользовательские URL-адреса в список воспроизведения приложения, но когда предупреждение отображается с использованием [alert show], звуковая система выходит из строя. Если я покажу предупреждение перед тем, как какой-либо трек будет воспроизведен, начните воспроизведение трека, а затем снова отобразите предупреждение, он будет работать нормально - почти так же, как если бы на первый показ был некоторый штраф CPU-шипа (хотя я ничего не вижу на инструментах).UIAlertView разрывает аудиопроцесс AVPlayer

Alert:

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

alert.alertViewStyle = UIAlertViewStylePlainTextInput; 

[alert show]; 

Ошибки:

  • Log сообщение: <ClientProcessingTapManager> AudioQueueProcessingTapGetSourceAudio posting message to kill mediaserverd (36078)
  • MTAudioProcessingTapGetSourceAudio() возвращает код состояния 268451843 затем на следующий пакет 268435459.

Update: Проблема происходит только во время отладки, так получается, что это не остановит всю работу. Тем не менее, мне все равно было бы интересно разобраться в этом.

ответ

1

Чтобы положить это в кровать, я в конце концов пришел к выводу, что это проблема с производительностью. Во всех других обстоятельствах, с которыми я столкнулся, AudioQueueProcessingTapGetSourceAudio posting message to kill mediaserverd (36078), похоже, вызывается, когда вы выполняете «слишком много» работы внутри цикла обработки MTAudioProcessingTap. Я думаю, что показать UIAlertView в моем случае было толкать устройство по краю.

Что касается «слишком большой» работы, я понятия не имею, и нет никаких упоминаний ни в одной из документации в файле заголовка для MTAudioProcessingTap. На нескольких устройствах, на которых я тестировал свое приложение, я мог увеличить работу, выполняемую в аудиокоде, до тех пор, пока общий процессор не достигнет около 20%, а затем появится сообщение об ошибке, и кран перестанет называть обратный вызов обработки. Это должен быть либо искусственно установленный предел, либо по какой-то причине мой цикл обработки не может выполнить свою гарантию в реальном времени, независимо от количества используемого процессора.

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 Simulator v. 6.1.

+0

Спасибо за предложение - к сожалению, нет радости. Предупреждение создается внутри обратного вызова «IBAction», поэтому, по-видимому, он уже находится в основном потоке. –

+0

Я отредактировал свой ответ, попробуйте посмотреть пример кода. – wzbozon

Смежные вопросы