使用node.js进行缓冲audio播放的algorithm/技术

我正在使用node.js从networking播放audiostream,如广播电台或mp3stream。 数据stream如下所示:

广播电台(mp3audio) – >我的node.js脚本 – > lame mp3解码器(node-lame) – > PCM输出到soundcard(节点声音)。

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

我的问题是 – 我可能不需要等到缓冲区大小达到1Mb。 我确定有一个algorithm或一些计算来检测平均networking速度或延迟,并确定不间断播放的最佳缓冲区大小 。 当然,我可以想出一些草率的解决scheme,但我想知道是否有任何algorithm或技术,我想完成什么?

我search了一些关于DSP的帧大小的白皮书,但是来自社区的build议会很棒。

缓冲需要预测,但“预测是非常困难的,特别是如果是关于未来”的话 。 🙂

如果你正在做一些简单的事情,你的缓冲区大小决定了你从播放到听到audio的时间。 如果作为一个用户,你可以容忍一个长时间的延迟,相应地设置一个大的缓冲区。 如果没有,很多更好的缓冲algorithm(可能包括您的手机的语音通道)会改变回放速率,播放audio比标称速率略慢,直到build立一个较大的缓冲区。 如果你有这样的audio硬件控制,这是最好的解决scheme – 你可以慢慢build立几MB的缓冲区,而不会影响从播放到听audio的延迟。 用户通常不会注意到适度的速度变化 – 大多数美国的无线电台加快了歌曲播放速度2%以适应更多广告,几乎没有人注意到。 有5%的人注意到这一点。 在一定的缓冲区大小,你可以返回到名义上的速度,享受不间断的播放。

有许多scheme试图训练到完美的大小,但是你本地的wifi,以及网站播放的可靠性,使得一个通用的algorithm很难。 人们会指向YouTube,Netflix,Hulu等 – 但这些不是现场的,所以这是一个不同的问题。 Twitch.tv具有实时内容,并且在启动时有一个缓冲延迟。