你們好。 目前小弟要作一個語音通話的app. 如今分析了sdk自帶的speakHere的demo.它裏面是使用AudioQueue實現先錄製成一個文件。而後再播放這個文件。沒有達到同時錄音和播放。 我想達到的目的是同時錄音和播放。因而我修改demo以下。加入一個ringbuffer, 首先,我把錄音出來的數據寫入一個ringbuffer.如寫入10秒鐘數據後中止錄音,其次,啓動播放聲音的過程,它的回調函數voidAQPlayer::AQBufferCallback(void *inUserData,AudioQueueRef inAQ,AudioQueueBufferRef inCompleteAQBuffer)從ringbuffer裏面讀出數據。這種狀況是能夠播放的。可是一樣還不是同時錄音和播放。 上面的實驗只能說明我從ringbuffer中讀數據出來播放沒有問題;接下來我同時啓動錄音和播放的過程,這時候問題來啦。錄音的回調函數能夠正常寫數據到ringbuffer中。但是播放的回調函數只回調三次,大概讀了三秒數據以後就不回調啦。不知道爲何?奇怪的是,當我中止錄影以後,播放的回調函數開始工做啦。把ringbuffer中的數據一幀幀地播放完畢。難道不支持同時錄音和播放? 因而goolge了很久,發現也有人遇到這種狀況,但是都沒有解決方案。一些方法是這樣:UInt32 category = kAudioSessionCategory_PlayAndRecord; error = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category); 但是個人程序裏面已經有這句啦。就是不能同時播放。那一些通訊軟件是如何作的呢?如skype等等。請高人指點迷津。 |
|