Потоковая передача аудиоданных с задержкой в ​​iPhone - PullRequest
0 голосов
/ 22 июля 2010

Я написал приложение для потоковой передачи голоса в iPhone, используя AudioQue.При запуске аудиозаписи я инициировал сетевое соединение и передал экземпляр NSAudioOutStream в AudioInputCallback, используя ссылку inUserData.

void AudioInputCallback(
  void *inUserData, 
  AudioQueueRef inAQ, 
  AudioQueueBufferRef inBuffer, 
  const AudioTimeStamp *inStartTime, 
  UInt32 inNumberPacketDescriptions, 
  const AudioStreamPacketDescription *inPacketDescs) {
      RecordState* recordState = (RecordState*)inUserData;
      if(!recordState->recording) {
         NSLog(@"Record ending...");
      }
      else{
        [recordState->soStream write:inBuffer->mAudioData maxLength:inBuffer->mAudioDataByteSize];
        NSLog([NSString stringWithFormat:@"Count:%d Size:%d¥n", sentCnt++, inBuffer->mAudioDataByteSize]); 
      } 
      recordState->currentPacket += inNumberPacketDescriptions;
      AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL); 
  }

В соответствии с параметрами инициализации AudioQueue длина inBuffer составляет 16000 байт.Однако в WIFi приложение работает без каких-либо сомнений.Но в сети 3G коммутация клиент-сервер не стабильна.Любой имеет такой же опыт, или кто-то может предложить совет, чтобы решить эту проблему.

1 Ответ

0 голосов
/ 24 июля 2010

Одним из способов решения этой проблемы является использование очереди для вставки аудио-буфера (размером 16000 байт) и инициализация некоторого другого потока, чтобы время от времени ставить в буфер буферы и отправлять их на сервер.Но любой может сказать мне, как синхронизировать одну очередь из двух потоков.

...