如何创建实时音频流队列?

时间:2014-04-30 15:24:24

标签: node.js sockets audio shoutcast icecast

所以我正在考虑创建一个节点应用程序,用户可以将歌曲添加到“队列”中,并将歌曲实时播放给所有用户,但在环顾四周之后,我不太清楚如何实现这一点

我读到的主要文章是这一篇:http://pedromtavares.wordpress.com/2012/12/28/streaming-audio-on-the-web-with-nodejs/

看起来像一个icecast服务器可以很好地工作,但有没有办法让节点将歌曲推送到一个由icecast服务器播放的队列?到目前为止,我所阅读的内容似乎是管理播放歌曲的唯一方法是指定一个播放列表或手动添加歌曲,并告诉服务器在队列中没有歌曲时不播放任何内容也似乎是一个潜在的问题。 / p>

1 个答案:

答案 0 :(得分:2)

我最近一直在做类似的项目。我的解决方案是使用nodeshout(libshout的节点绑定)将音频数据从Node发送到Icecast。

查看streaming example。您可以像这样使用它:

function playSong(){
    // Choose next song
    const nextSong = "./song.mp3";
    const fileStream = new FileReadStream(nextSong, 65536);
    const shoutStream = fileStream.pipe(new ShoutStream(shout));

    shoutStream.on('finish',playSong);
}

playSong()

这将在歌曲后创建循环和播放歌曲。

提示:将icecast.xml的源超时时间延长至~30秒。在某些情况下,默认情况下,由于歌曲具有"快速启动",其中歌曲的开头具有较低的比特率(开始播放更快),因此它会导致流结束。

我已经用一个更进一步的例子做了一个要点:https://gist.github.com/Cretezy/3623fecb1418e21b5d1f77db50fc7e07