2013-07-17 81 views
0

基本想法是創建一個應用程序,該應用程序可以記錄來自一臺設備的音頻,並通過套接字將其通過Wlan發送到將播放該設備的其他設備。簡而言之,一個Lan語音聊天程序。Android:使用AudioTrack和套接字手動流式傳輸音頻

我使用AudioRecord對象從麥克風錄製實時音頻,然後將錄製的數據讀入字節數組,然後將字節數組寫入TCP套接字。接收設備然後從套接字讀取該字節數組並將其寫入到AudioTrack對象的緩衝區中。

其像

音頻記錄 - >字節數組 - >插座---> LAN --->插座 - >字節數組 - > AudioTrack

的進程正在使用的同時反覆循環。

雖然音頻在播放其幀之間的滯後。即當我說你好接收者聽到他 - ll - O。雖然音頻已完成,但緩衝區塊之間存在滯後。

據我知道的滯後是由於在局域網傳輸

耽誤我怎樣改進呢? 我應該使用什麼方法,以便在商業在線聊天應用程序(如skype和gtalk)中平滑使用?

回答

0

聽起來就像你需要一個更長的緩衝區來處理局域網上音頻傳輸的變化。爲了解決這個問題,你可以在套接字字節數組和音軌之間創建一箇中間緩衝區。您的緩衝區可以是AudioTrack對象中使用的緩衝區大小的x倍。因此,像這樣:

插座字節 - >音頻緩衝 - >緩衝區得到送入音軌 - >音頻軌道

當音頻開始記錄,不玩任何東西,直到它完全填滿的時間越長緩衝。之後,您可以將音頻軌道緩衝區大小的塊傳送到您的音頻軌道對象。

+0

但是不會緩衝開始減少,因爲音頻將以比它到達的速度更大的速率進行供給 – Allahjane

+0

隨着緩衝區顯示較晚,緩衝區將會減少。但是,也應該填補作爲晚期終於到達。需要考慮的一件事就是將緩衝區提交到網絡的時間與錄製音頻的採樣率對齊。另一件需要考慮的事情是,你可能無法獲得緩衝區。因此,在播放音頻到接收器之前的延遲應該足夠慷慨,以便有時間處理。 – Ehz