【问题标题】:Broadcast Live Streaming Audio Server using Node.js使用 Node.js 广播直播音频服务器
【发布时间】:2022-01-27 07:09:26
【问题描述】:

我的目标是使用 JavaScript 创建一个托管在 localhost 上的网络广播电台,后端部分为 node.js 服务器,前端部分为 HTML/CSS/JavaScript。我的收音机会很简单,目标是创建一个服务器,该服务器将持续播放一首歌曲(或使用 .mp3 格式的多首歌曲),以便每个连接的客户端都可以使用它们。

流媒体部分并不难。到目前为止,我正在努力的部分是实现同时向所有消费者“广播”传输。下图更好地解释了我的想法:

是否有人提供代码示例以便我可以轻松理解并同时实现它以供我的项目使用?

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

【问题讨论】:

    标签: javascript node.js backend audio-streaming broadcast


    【解决方案1】:

    这正是 SHOUTcast/Icecast 和兼容服务器所做的。您基本上只需要将音频数据复制到每个客户端。

    您可以将普通 HTTP 用于流式传输协议。客户不需要知道或关心他们正在直播。一个简单的音频元素可以工作:

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

    在服务器端,您确实需要确保您发送的流以这样一种方式对齐,即客户端可以直接拾取并播放它。好消息是,对于原始 MP3 和 ADTS(通常包装 AAC)流,它们播放所需的所有数据都在每一帧中,所以你可以“针落”,从任意位置流,客户端会计算出来吧。

    在您的 Node.js 应用程序中,它看起来有点像这样:

    Input Stream -> Buffer(s) -> Clients HTTP Responses
    

    事实上,如果您愿意,您甚至可以删除缓冲区部分。当数据来自编解码器时,您可以将其写入所有客户端。缓冲区对于确保快速开始播放很有用。大多数客户端将需要一些缓冲数据来嗅探流类型和兼容性,以及填充自己的播放缓冲区以实现流畅的流传输。

    这就是它的全部内容!

    【讨论】:

    • 我可以很容易地理解客户端部分的声明,我同意。服务器端部分的逻辑也可以很容易地采用。但问题是,我将如何在正确的时间戳正确地实现“落针”?我用管道尝试了几件事,但没有一个真正奏效。你有什么代码建议吗?
    • 非常感谢您为提供服务器端部分的想法示例所做的努力。如果您需要我失败的任何尝试,只需发表评论,我也会发布它们。
    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2018-07-02
    • 2012-02-19
    • 2012-09-14
    • 2013-08-05
    相关资源
    最近更新 更多