我正在使用node.js回放音频流,如广播电台或mp3流从网络。数据流动情况如下:
电台(mp3音频) -> My node.js脚本-> lame mp3解码器(节点-lame) -> PCM输出到声卡(节点-声音)。
问题是,由于网络延迟,播放有时会中断。所以我所做的就是把所有的数据块缓冲到一个变量中。一旦变量大小达到(1Mb),我就开始播放来自变量的声音,而不是直接播放流。解决了坏的回放。
我的问题是-我可能不需要等到缓冲区大小达到1Mb。我确信有一个算法或一些计算,以检测平均网络速度或延迟和确定一个最佳缓冲区大小的不间断播放。当然,我可以想出一些草率的解决方案,通过试验和错误,但我想知道是否有任何算法或技术,我试图完成的?
我搜索了一下,找出一些关于DSP的帧大小的白皮书,但是这里的社区的建议会很棒。
发布于 2014-08-07 11:31:07
缓冲需要预测,但是需要预测是非常困难的,特别是如果是关于未来的话。:-)
如果你在做一些简单的事情,你的缓冲区大小决定了你点击播放时的延迟,直到你听到声音。如果作为用户,您可以容忍长时间的延迟,那么相应地设置一个大缓冲区。如果没有,许多更好的缓冲算法(可能包括您的电话的语音频道)都会改变回放速率,播放音频的速度比名义速率稍慢,直到建立一个较大的缓冲区为止。如果你能控制你的音频硬件,这是最好的解决方案--你可以慢慢地建立几MB的缓冲区,而不会影响从点击播放到听音频的延迟。用户通常不会注意到中等速率的变化--大多数美国空中广播电台都加快了2%+的歌曲播放速度,以适应更多的广告,而且几乎没有人注意到。有5%的人注意到了。在一定的缓冲区大小,您可以返回到名义速率,并享受不间断的播放。
有许多方案试图训练到完美的大小,但你的本地无线网络,以及网站播放的可靠性,使得一个一刀切的算法很难。人们会指向YouTube、Netflix、Hulu等--但这些都不是实时的,所以这是另外一个问题。Twitch.tv有活动的内容,并且在开始时有一个缓冲延迟。
https://stackoverflow.com/questions/21215016
复制相似问题