您是否在客户端丢失任何数据包?如果是这样,你需要留下“空间”。如果收到数据包1,2,3,4,6,7,则需要为丢失的数据包留出空间(5)。
另一种可能性是所谓的时钟漂移问题。客户端和服务器上的时钟(水晶)彼此不完全同步。 这可能是由环境,温度变化等引起的。
让我们说在一个完美的世界中,您的服务器正在以48000赫兹生成音频样本20毫秒音频样本。您的客户正在使用48000赫兹的采样率播放它们。实际上,您的客户端和服务器并不完全是48000hz。您的服务器可能是48000.001,您的客户端可能是47999.9998。因此,您的服务器可能比您的客户端提供更快的速度,反之亦然。您要么过快地使用数据包,要么在运行缓冲区或滞后太远并且溢出客户端缓冲区。在你的情况下,听起来客户端播放速度太慢而且慢慢落后于服务器。你可能每分钟只会落后几毫秒,但这个问题将继续存在,看起来就像20世纪70年代的嘴唇同步功夫电影。
在其他设备中,通常有一个共同的时钟线来保持同步。例如,摄像机时钟,midi时钟。多轨录音机时钟。
通过IP传送数据时,客户端和服务器之间不共享通用时钟。因此,您的问题涉及在不同设备之间同步时钟。我使用这种通用方法成功地解决了这个问题:
因此,您的客户要求您调整播放的采样率。所以是的,你玩得更快或更慢。请注意,播放速率的变化将非常微妙。您可以将采样率设置为48000.0001 hz而不是48000 hz。音调的差异是人类无法察觉的,因为它只会导致音高差异百分之几。我解释了一种非常简化的方法。在开发这样的控制系统时,必须考虑许多其他细微差别和边缘情况。你不只是设置并忘记它。您需要一个控制系统来管理播放。
一个有趣的测试来证明这是两个设备使用完全相同的文件。长录音(比如3小时)是最好的。同时启动它们。播放3小时后,您会注意到一个先于另一个。
这篇文章解释说 流式传输音频和视频并非易事 。