如何创建实时音频流队列?
Posted
技术标签:
【中文标题】如何创建实时音频流队列?【英文标题】:How to create a real-time audio streaming queue? 【发布时间】:2014-04-30 15:24:24 【问题描述】:所以我正在考虑创建一个节点应用程序,用户可以在其中将歌曲添加到“队列”并将歌曲实时广播给所有用户,但环顾四周后,我不太确定如何实现这一点.
我阅读的主要文章是这篇文章:http://pedromtavares.wordpress.com/2012/12/28/streaming-audio-on-the-web-with-nodejs/
看起来icecast服务器可以很好地解决这个问题,但是节点有没有办法将歌曲推送到队列中以由icecast服务器播放?到目前为止,从我所读到的似乎管理播放的歌曲的唯一方法是指定播放列表或手动添加歌曲,并且当队列中没有歌曲时告诉服务器不播放任何东西似乎也是一个潜在的问题。
【问题讨论】:
【参考方案1】:我最近一直在做一个类似的项目。我的解决方案是使用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
【讨论】:
以上是关于如何创建实时音频流队列?的主要内容,如果未能解决你的问题,请参考以下文章