所以我正在考虑创建一个节点应用程序,用户可以将歌曲添加到“队列”,并将歌曲实时播放给所有用户,但在环顾四周之后,我不太清楚如何实现这一目标.
我读到的主要文章是这一篇:http://pedromtavares.wordpress.com/2012/12/28/streaming-audio-on-the-web-with-nodejs/
看起来像一个icecast服务器可以很好地工作,但有没有办法让节点将歌曲推送到由icecast服务器播放的队列?到目前为止,我所阅读的内容似乎是管理播放歌曲的唯一方法是指定播放列表或手动添加歌曲,并告诉服务器在队列中没有歌曲时不播放任何内容似乎也是一个潜在的问题.
最佳答案 我最近一直在做一个类似的项目.我的解决方案是使用
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