我正在使用node.js从Web播放音频流,例如广播电台或mp3流。数据流如下:
广播电台(mp3音频)->我的node.js脚本-> me脚的mp3解码器(node-lame)-> PCM输出到声卡(node-sound)。
问题是由于网络延迟,播放有时会中断。所以我要做的是将所有数据块缓冲到一个变量中。一旦变量大小达到(1Mb),我就开始从变量而不是直接从流中播放声音。解决了播放中断的问题。
我的问题是-我可能不需要等到缓冲区大小达到1Mb。确保存在用于检测平均网络速度或延迟并确定不间断回放的最佳缓冲区大小的算法或某种计算方法。当然,我可以从反复试验中得出一些草率的解决方案,但是我想知道是否有任何算法或技术可以帮助我实现目标?
我四处搜寻以找到有关DSP帧大小的一些白皮书,但这里的社区建议会很棒。
缓冲需要预测,但是“预测非常困难,尤其是关于未来的预测”。:-)
如果您正在做简单的事情,则缓冲区大小决定了从播放开始到听到音频的等待时间。如果作为用户,您可以在那里忍受较长的延迟,请相应地设置一个较大的缓冲区。如果不是这样,许多更好的缓冲算法(可能包括电话的语音通道)会改变播放速率,以比标称速率稍慢的速度播放音频,直到建立了较大的缓冲区。如果您可以控制音频硬件,那将是最好的解决方案-您可以缓慢建立数MB的缓冲区,而不会影响从单击播放到收听音频的延迟。用户通常不会注意到价格变化适中的情况-大多数美国无线电视台将歌曲播放速度提高了2%以上,以适合更多的商业广告,而且几乎没人注意到。很多人注意到5%。
有许多尝试将其训练到理想大小的方案,但是您的本地wifi以及站点播放的可靠性使“一刀切”的算法变得困难。人们会指向YouTube,Netflix,Hulu等,但是这些都不是真实的,所以这是一个不同的问题。Twitch.tv有直播内容,开始时会有缓冲延迟。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句