【问题标题】:How to capture HTML5 microphone input to icecast?如何将 HTML5 麦克风输入捕获到 icecast?
【发布时间】:2016-10-16 09:42:39
【问题描述】:

通过HTML5 / Javascript(无flash)捕获麦克风音频流然后将其发送到已经设置好的icecast服务器的步骤和方法是什么?

解决方案必须完全基于浏览器/网络,无需其他软件。 服务器在 Rails 5.0.0.1 上。

我应该从哪里开始?

我很难在网上找到任何相关信息,因为所有内容都在谈论将音频文件上传/录制为完整文件,而不是流。

【问题讨论】:

    标签: javascript ruby-on-rails html audio icecast


    【解决方案1】:

    该解决方案必须完全基于浏览器/网络,没有额外的软件。

    目前不可能,因为有no way to make a streaming HTTP PUT request。也就是说,要通过XHRFetch 发出HTTP 请求,请求正文必须是不可变的。

    ReadableStream 的新标准现在随时可用,允许您制作 ReadableStream(您的编码音频)和PUT it to a server。一旦可用,这是可能的。

    服务器在 Rails 5.0.0.1 上。

    不知道你为什么提到它,因为你说它必须全部存在于浏览器中。无论如何,让我告诉你我是如何使用服务器端代理实现的。

    客户端,您需要使用getUserMedia() 捕获音频。 (一定要使用adapter.js,因为规范最近发生了变化,你不想手动处理约束对象的变化。)一旦你有了,你可以发送PCM样本(我建议减少从 32 位浮点到 16 位签名),或者您可以使用 AAC 或 MP3 客户端等编解码器。如果您在客户端中执行编解码器,您将只能发送一两个流。如果您在服务器端进行编解码器,由于 CPU 要求,您可以根据需要导出任意数量,但您将占用更多带宽,具体取决于您导出的流。

    对于客户端上的编解码器,您可以使用 MediaRecorder,或通过 emscripten(或类似工具)编译为 JavaScript 的编解码器。 Aurora.js 有一些用于解码的编解码器,但我相信其中至少有一个编解码器也有编码。

    要将数据获取到服务器,您需要一个二进制 Web 套接字。

    在服务器端,如果您将编解码器保留在那里,FFmpeg 会让这一切变得简单。

    获得编码后的音频后,您需要向 Icecast 或类似设备发出 HTTP PUT 请求,并在带外更新元数据,或将元数据混合到您要 PUT 的容器中服务器。


    自我推销:如果您不想自己做所有这些,我有一些您可以从我这里获得许可的代码,称为 AudioPump Web 编码器,它完全可以满足您的要求。您可以根据需要对其进行修改,获取组件并将它们嵌入到您的项目中,等等。如果您有兴趣,请发送电子邮件至 brad@audiopump.co。

    【讨论】:

      猜你喜欢
      • 2013-07-21
      • 2020-05-09
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多