0

我使用 AudioQue 在 iPhone 中编写了一个语音流应用程序。在录音开始时,我启动了网络连接并将 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 的 init 参数,长度inBuffer为 16000 字节。但是,毫无疑问,在 WIFI 应用程序中可以正常工作。但在 3G 网络中,客户端-服务器交换并不稳定。任何人都有相同的经验,或者有人可以提出解决此问题的提示。

4

1 回答 1

0

解决此问题的一种方法是使用 Queue 插入音频缓冲区(大小为 16000 字节)并初始化一些其他线程以逐次将缓冲区排入队列并发送到服务器。但是任何人都可以告诉我如何在两个线程之间同步一个队列。

于 2010-07-24T08:11:29.933 回答