如何设置实时音频流http服务器?

问题描述 投票:0回答:2

我希望构建一个应用程序,将音频(mp3、ogg 等)从我的麦克风传输到网络浏览器。

我想我可以使用 html5 音频标签从我的服务器读取/播放流。

我真正困惑的是如何设置流http端点。我需要什么技术,我的服务器应该如何构建才能从我的麦克风获取实时音频并从我的服务器访问?

例如,对于流媒体 mp3,我是否在录制时不断响应 mp3 帧?

感谢您的帮助!

http html5-audio audio-streaming audio-recording
2个回答
4
投票

首先,让我们将这个问题分成几个部分。您拥有音频捕获(录音)、编码/编解码器、服务器和接收客户端。

Capture -> Codec -> Server -> Several Clients

对于音频捕获,您需要使用 Web Audio API 以及 getUserMedia。这将允许您从录音设备获取 32 位浮点 PCM 样本。该数据流占用大量带宽……立体声流需要几兆比特。该流不能直接在 HTML5 音频标签中播放,虽然您可以使用 Web Audio API 在接收端播放它,但它会占用太多带宽而无法使用。您需要使用编解码器来降低带宽使用量。

您想要查看的编解码器包括 MP3、AAC(及其变体,例如 HE-AAC)和 Opus。并非所有浏览器都支持所有编解码器。 MP3 是最广泛兼容的,但 AAC 在给定比特率下可提供更好的质量。 Opus 是一种免费且开放的编解码器,但仍然没有得到最大程度的客户采用。无论如何,目前还没有一个编解码器可以在浏览器中运行并具有真正的稳定性。 (尽管它正在开发中!有很多使用 Emscripten 制作的测试项目。)我通过将样本的位深度减少到 16 位有符号整数并将此 PCM 流发送到服务器来执行编解码器来解决这个问题,通过二进制 websocket。

该编码服务器获取 PCM 流并通过编解码器服务器端运行它。在这里您可以使用任何您想要的东西,例如许可的编解码器二进制文件或封装了多个编解码器的 FFmpeg 等工具。

接下来,该服务器将数据流式传输到真正的流媒体服务器(例如 Icecast)。 SHOUTcast 和 Icecast 服务器获取编码流并通过类似 HTTP 的连接将其中继到许多客户端。 (Icecast 符合 HTTP 标准,而 SHOUTcast 很接近,但不完全符合,这可能会导致兼容性问题。)

设置流媒体服务器后,只需在

<audio>
标签中引用流 URL 即可。

希望这能让您开始。根据您的需求,您也可以考虑使用 WebRTC,它可以为您完成所有这些工作,但不会为您提供质量选项,也不会扩展到超出少数用户。


0
投票

vlc 擅长于此。

  1. 选择您的文件
  2. 选择http
  3. 更改端口(推荐但不是必需的)
  4. 选择.mp3 - 音频
  5. 端口转发

转到您的网站并将其指向 http://{public-up 或域名}:PORT

© www.soinside.com 2019 - 2024. All rights reserved.