iPhone CoreAudio зависает при остановке - PullRequest
2 голосов
/ 22 июня 2010

У меня есть приложение для iPhone, которое записывает аудио, а затем транслирует его по сети. В ответ на «остановку» с дальнего конца он ставит в очередь уведомление о прекращении записи. Увы, когда он доходит до вызова AudioQueueStop, приложение просто зависает (то есть Stop никогда не завершается). Благодаря уведомлению все манипуляции с AudioQueue происходят в одном потоке.

Кто-нибудь знает, что здесь происходит?

Редактировать: я настроил слушателя в потоке пользовательского интерфейса, который обрабатывает рекордер.

Затем из моего сетевого потока я использую "postNotificationName", полагая, что это было сообщение в потоке пользовательского интерфейса, и все будет выполняться из этого потока. Это не похоже на случай. Когда я нарушаю точку, вызываемую функцией postNotificationName, создается впечатление, что вызов выполняется в сетевом потоке, а НЕ в потоке пользовательского интерфейса.

Полагаю, это моя ошибка. Кто-нибудь знает, как заставить это работать, уведомляя UIThread, чтобы обработать это?

Edit2: ОК, я переписал его, чтобы использовать executeSelectorOnMainThread. И он все еще падает.

Что касается положительных моментов, я только что узнал, как получить намного больше информации из XCode, чтобы я мог видеть, как идет стек вызовов:

semaphore_timedwait_signal_trap
semaphore_timedwait_signal
_pthread_cond_wait
pthread_cond_timedwait_relative_np
CAGuard :: WaitFor
ClientAudioQueue :: ServicePendingCallbacks
AudioQueueStop
[И т.д.]

У кого-нибудь есть идеи, почему он зависает?

1 Ответ

1 голос
/ 22 июня 2010

Как вы называете AudioQueueStop ?Функция поддерживает два режима: синхронный и асинхронный.

Предпочтительным способом является использование асинхронного останова, так как функция немедленно вернется, а остальные буферы будут воспроизведены / записаны.

Если выхотите идти синхронно, и вы зависаете, тогда, возможно, где-то есть тупик или состояние гонки.Вы пытались приостановить приложение под отладчиком и проверить стековые фреймы потоков, чтобы увидеть, в чем проблема?

...