Algorithm 使用node.js进行缓冲音频播放的算法/技术

Algorithm 使用node.js进行缓冲音频播放的算法/技术,algorithm,node.js,buffer,audio-streaming,Algorithm,Node.js,Buffer,Audio Streaming,我正在使用node.js播放音频流,例如广播电台或来自web的mp3流。数据流如下所示: 电台(mp3音频)->My node.js脚本->lame mp3解码器(node lame)->PCM输出到声卡(node sound)。 问题在于,由于网络延迟,播放有时会中断。所以我做的是将所有数据块缓冲到一个变量中。一旦变量大小达到大约(1Mb),我就开始播放变量的声音,而不是直接播放流。解决了播放中断的问题 我的问题是-我可能不需要等到缓冲区大小达到1Mb。我确信有一个算法或一些计算来检测平均网络

我正在使用node.js播放音频流,例如广播电台或来自web的mp3流。数据流如下所示:

电台(mp3音频)->My node.js脚本->lame mp3解码器(node lame)->PCM输出到声卡(node sound)。

问题在于,由于网络延迟,播放有时会中断。所以我做的是将所有数据块缓冲到一个变量中。一旦变量大小达到大约(1Mb),我就开始播放变量的声音,而不是直接播放流。解决了播放中断的问题

我的问题是-我可能不需要等到缓冲区大小达到1Mb。我确信有一个算法或一些计算来检测平均网络速度或延迟,并确定不间断播放的最佳缓冲区大小。当然,我可以通过反复试验得出一些草率的解决方案,但我想知道是否有任何算法或技术可以实现我的目标


我在谷歌上搜索了一些关于DSP帧大小等的白皮书,但这里社区的建议非常好。

缓冲需要预测,但是。:-)

如果你正在做一些简单的事情,你的缓冲区大小决定了从点击播放到听到音频的延迟。如果,作为一个用户,您可以容忍长时间的延迟,那么相应地设置一个大的缓冲区。如果不是,许多更好的缓冲算法(可能包括您手机的语音通道)会改变播放速率,播放音频的速度略慢于标称速率,直到形成较大的缓冲区。如果你对你的音频硬件有这样的控制,这是最好的解决方案——你可以慢慢地建立几MB的缓冲区,而不会影响从点击播放到听到音频的延迟。用户通常不会注意到适中的播放速率变化——大多数美国无线电台会将歌曲播放速度提高2%以上,以适应更多的商业广告,但几乎没有人注意到。5%的人确实注意到了。在特定的缓冲区大小下,您可以返回到标称速率,并享受不间断播放


有许多计划试图训练到完美的大小,但您的本地wifi和网站播放的可靠性,使得“一刀切”算法很难实现。人们会指向YouTube、Netflix、Hulu等等——但这些都不是直播的,所以这是另一个问题。Twitch.tv有直播内容,并且在开始时有缓冲延迟。

您可以使用滚动指数平均值来估计延迟-您可能对流比特率比实际网络速度更感兴趣,因为这决定了您需要缓冲多少才能“安全”。