2010-07-22 65 views
0

我使用AudioQue在iPhone中編寫了語音流應用程序。在音頻錄製開始時,我啓動了網絡連接,並使用inUserData參考將NSAudioOutStream的實例傳遞到 AudioInputCallbackiPhone中存在延遲問題的音頻數據流

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網絡中,客戶端 - 服務器換向不穩定。 任何人都有相同的經歷或有人可以建議小費來解決這個問題。

+0

爲什麼很難格式化代碼?有一個預覽顯示你的帖子看起來有多可怕。爲什麼在提交問題之前不要一瞥呢? – spender 2010-07-22 08:34:07

回答

0

解決此問題的一種方法是使用Queue插入音頻緩衝區(大小爲16000字節),並初始化其他某個線程以逐個緩衝隊列併發送到服務器。 但是任何人都可以告訴我如何在兩個線程之間同步一個隊列。