我正在該服務器上編寫客戶端/服務器應用程序,發送捕獲從某些外部設備(例如話筒)捕獲的音頻樣本並將其發送給客戶端的實時音頻數據。然後客戶想要播放這些樣本。我的應用程序將運行在本地網絡,所以我沒有帶寬問題(我的聲音是8K,8位立體聲,而我的網卡1000Mb)。在客戶端,我緩衝數據一段時間,然後開始播放。並且當數據從服務器到達時,我將它們發送到聲卡。這似乎工作正常,但有一個問題:
當我在客戶端的緩衝區完成後,我會體驗播放聲音的差距。
我認爲這是因爲服務器和客戶端的採樣時間不同,這意味着服務器上的8K與客戶端上的8K不一樣。
我可以通過暫停客戶端的播放和緩衝來解決這個問題,但是我的老闆不接受它,因爲我有適當的帶寬,我應該能夠播放聲音,沒有間隙或暫停。
所以我決定動態地改變客戶端的播放速度,但我不知道如何。
現場網絡音頻樣本的流暢播放
我在Windows中編程(本機),我目前使用waveOutXXX來播放聲音。我可以使用任何其他本地庫(DirectX/DirectSound,Jack或...),但它們應該在客戶端提供流暢的播放。
我與waveOutXXX多次編程,沒有任何問題,我知道它好,但我解決不了我的動態重採樣
另外,網絡數據緩衝也可能會產生影響,使得網絡堆棧首先嚐試預緩衝數據(以便更有效地以更大的塊形式發送),從而導致罕見地發送小塊數據和間隙在接收方。 – 2012-08-08 14:53:56
這是一個很好的說明,但由於我有一個連續的數據(每秒16K)是否真的影響網絡的緩衝?並且我緩衝了1秒鐘的數據,所以指定的問題不應該是可以在我的回放系統中產生空隙的東西 – BigBoss 2012-08-09 20:23:57
我認爲最好的做法是做一個測試,看看發生了什麼。 – 2012-08-09 20:27:29