簡體   English   中英

Android:使用AudioTrack和Socket手動高效地流音頻

[英]Android : manually streaming audio effeciently using AudioTrack and Socket

基本思想是創建一個應用程序,該應用程序可以記錄來自一台設備的音頻,並使用套接字通過Wlan將其發送到另一台設備上進行播放。 簡而言之,是Lan語音聊天程序。

我正在使用AudioRecord對象記錄來自麥克風的現場音頻,然后將記錄的數據讀入字節數組,然后將字節數組寫入TCP套接字。 然后,接收設備從套接字讀取該字節數組,並將其寫入AudioTrack對象的緩沖區。

就像是

音頻記錄->字節數組->套接字-> LAN --->套接字->字節數組-> AudioTrack

使用while循環重復該過程。

盡管音頻在那里播放,但在幀之間仍然滯后。 也就是說,當我說“你好”時,接收者聽到了 盡管音頻已完成,但緩沖區之間存在延遲。

據我所知,滯后是由於局域網傳輸的延遲

我該如何改善? 我應該使用哪種方法使它在Skype和gtalk等商業在線聊天應用程序中保持流暢?

聽起來您在某個地方需要更長的緩沖區來處理局域網上音頻傳輸的差異。 為了解決這個問題,您可以在套接字字節數組和音頻軌道之間創建一個中間緩沖區。 您的緩沖區可以是AudioTrack對象中使用的緩沖區大小的x倍。 所以像這樣:

套接字字節->音頻緩沖區->要饋送到音頻軌道的緩沖區->音頻軌道

當音頻開始記錄時,請不要播放任何內容,直到它完全填滿了較長的緩沖區。 之后,您可以將音軌緩沖區大小的塊輸入到音軌對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM