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

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

【讨论】:

以上是关于如何创建实时音频流队列?的主要内容,如果未能解决你的问题,请参考以下文章

如何从实时流中播放音频

如何将实时音频流端点连接到直线语音端点?

如何处理音频字节以从实时音频流中提取 MFCC?

实时视频或音频流如何工作?

如何使用 nginx 缓存实时音频流(audio/mpeg)?

如何实时流式传输音频文件