使用Node.js广播直播流音频服务器

3
我的目标是使用JavaScript和node.js服务器创建一个本地主机托管的网络电台,前端部分使用HTML/CSS/JavaScript。我的电台将会很简单,目标是创建一个服务器,不断广播一首歌曲(或多首歌曲,使用.mp3格式),以便连接的每个客户端都可以听到。
流媒体部分并不难。我目前遇到的困难是同时向所有消费者进行“广播”传输。下面的图片更好地解释了我的想法:

Broadcast transmission

有没有人有代码示例,以便我能轻松理解并同时实现它用于我的项目?

有人遇到过类似的情况吗?

1个回答

0

这正是SHOUTcast/Icecast及兼容服务器所做的。你只需要将音频数据复制到每个客户端即可。

您可以使用普通的HTTP作为流媒体协议。客户端不需要知道或关心他们正在直播流。一个简单的音频元素就可以工作:

<audio src="https://stream.example.com/some-stream" preload="none" controls></audio>

在服务器端,您确实需要确保发送的流以客户端可以轻松拾取并播放的方式对齐。好消息是,对于原始MP3和ADTS(通常包装AAC)流,播放所需的所有数据都在每个帧中,因此您可以“needle drop”,从任意位置流式传输,并且客户端将自行解决。
在您的Node.js应用程序内部,它看起来会像这样:
Input Stream -> Buffer(s) -> Clients HTTP Responses

实际上,如果您愿意,甚至可以省略缓冲部分。当数据从编解码器中传入时,您可以将其直接写入所有客户端。缓冲区对于确保快速启动播放非常有用。大多数客户端都需要一些缓冲数据来嗅探流类型和兼容性,并填充自己的播放缓冲区以实现平滑流媒体。

这就是全部内容!


我可以轻松理解客户端部分的陈述,并且我同意。同时,服务器端部分的逻辑也可以很容易地采用。但问题是,我如何在正确的时间戳下正确地实现“针落”?我尝试过使用管道进行多种尝试,但它们都没有真正奏效。你有任何代码建议吗? - DiMis
我非常感谢你提供服务器端代码示例方面的思路。如果需要我的任何失败尝试,请留言,我也会将它们发布出来。 - DiMis

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