我正在该服务器上编写客户端/服务器应用程序,发送捕获从某些外部设备(例如话筒)捕获的音频样本并将其发送给客户端的实时音频数据。然后客户想要播放这些样本。我的应用程序将运行在本地网络,所以我没有带宽问题(我的声音是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