2015-08-07 4 views
-1

У меня есть проигрыватель на базе CoreAudio, который передает удаленные mp3-файлы.Приложение на основе CoreAudio перестает играть, если в приложении добавлен какой-либо пользовательский интерфейс

Он использует NSURLConnection для извлечения mp3-данных -> использует AudioConverter для преобразования потока в PCM -> и передает поток в AUGraph для воспроизведения звука.

В моем демонстрационном приложении плеер полностью работает (он содержит только кнопку воспроизведения), но когда я добавляю плеер в другой проект, но в сочетании с проектом, который уже делает сетевые вызовы и обновляет пользовательский интерфейс, игрок не воспроизводится звук за несколько секунд.

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

+0

Это очень сложная вещь, которую вы делаете. Немного трудно помочь без дополнительной информации. Попытайтесь сузить точно, когда произойдет сбой, и спросите (или отредактируйте) более конкретный вопрос. Если вам нужны советы по отладке, вы должны пересмотреть свой вопрос в отношении помощи при отладке. Это может быть что-то простое, как обновление пользовательского интерфейса из фонового потока, вызывающего крах, но я просто буду гадать, потому что у меня недостаточно информации. – dave234

+0

@Dave - спасибо за ваше предложение, я повторно разместил вопрос с более подробной информацией http://stackoverflow.com/questions/31899339/audio-stream-stops-playing-audio-after-nsurlconnections-connectiondidfinishload – 3254523

ответ

0

Вы не упоминаете ничего в своей архитектуре программного обеспечения о буферизации данных между получением его через NSURLConnection и при отправке его на ваш плеер.

Данные придут в куски с непоследовательной скоростью прибытия.

Пожалуйста, ознакомьтесь с этими ответами, которые я разместил относительно буферизации и сетевого дрожания.

Network jitter

и

Network jitter and buffering queue

В двух словах, вы можете получить данные и немедленно отправить его в плеер, потому что следующие данные не могут прибыть вовремя.

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