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

4
我在考虑创建一个node应用程序,在其中用户可以将歌曲添加到“队列”中,并实时向所有用户广播歌曲,但是在查阅了相关资料后,我不确定该如何完成这个任务。
我阅读的主要文章是这篇:http://pedromtavares.wordpress.com/2012/12/28/streaming-audio-on-the-web-with-nodejs/ 看起来icecast服务器非常适合此目的,但是是否有一种方法让node将歌曲推送到待播放列表,以便icecast服务器播放?到目前为止,从我所读的内容来看,似乎唯一管理播放的方法是指定播放列表或手动添加歌曲,而在队列中没有歌曲可播放时告诉服务器不要播放任何东西也似乎是一个潜在的问题。
1个回答

3
我最近在做一个类似的项目。我的解决方案是使用nodeshout(libshout的node绑定)将音频数据从Node发送到Icecast。
请查看流示例。您可以这样使用它:
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秒。在某些情况下,默认设置会导致流结束,因为歌曲具有“快速启动”,即歌曲开头具有较低的比特率(以更快地开始播放)。
我已经制作了一个Gist,并提供了更详细的示例:https://gist.github.com/Cretezy/3623fecb1418e21b5d1f77db50fc7e07

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接