Я пишу приложение для iPhone, которое должно записывать звук со встроенного микрофона, а затем отправлять эти аудиоданные на сервер для обработки.
Приложение использует разъем для подключения к серверу иAudio Queue Services, чтобы сделать запись.В чем я не уверен, так это когда отправлять данные.Audio Queue Services запускает обратный вызов каждый раз, когда он заполняет буфер некоторыми аудиоданными.NSOutputStream запускает событие каждый раз, когда у него есть свободное место.
Моей первой мыслью было отправить данные на сервер с помощью функции обратного вызова аудио-очереди.Но кажется, что это столкнется с проблемой, если у NSOutputStream не будет свободного места в это время.
Затем я подумал о буферизации данных, когда они возвращаются из Аудио-очереди, и об отправке некоторых каждый раз, когда NSOutputStreamзапускает событие доступного пространства.Но это может показаться проблемой, если отправка на сервер опережает запись звука, тогда возникнет ситуация, когда нечего писать о событии доступного пространства, поэтому событие не будет запущено снова и передача данныхбудет эффективно остановлен.
Так, каков наилучший способ справиться с этим?Должен ли я иметь таймер, который запускается несколько раз и посмотреть, есть ли свободное место и есть ли данные, которые нужно отправить?Кроме того, я думаю, что мне нужно будет выполнить некоторую синхронизацию потоков, чтобы я мог вынимать порции данных из буфера для отправки по сети, а также добавлять порции данных в буфер по мере того, как запись продолжается, не рискуя исказить мой буфер.