编程语言
首页 > 编程语言> > javascript-如何捕获HTML5麦克风输入到icecast?

javascript-如何捕获HTML5麦克风输入到icecast?

作者:互联网

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

该解决方案必须完全基于浏览器/基于Web的,不能有其他软件.
服务器在Rails 5.0.0.1上.

我应该从哪里开始?

我正努力在网上找到任何相关信息,因为一切都在谈论将音频文件上传/录制为完整文件,而不是流.

解决方法:

The solution must be solely browser/web-based, no additional software.

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

现在有新标准ReadableStream可以在任何一天使用,您可以制作ReadableStream(您的编码音频)和PUT it to a server.一旦可用,就可以实现.

The server is on Rails 5.0.0.1.

因为您说过所有内容都必须存在于浏览器中,所以不知道为什么要提到它.无论如何,让我告诉您如何使用服务器端代理实现此操作.

在客户端,您需要使用getUserMedia()捕获音频.(请确保使用adapter.js,因为最近更改了规范,并且您不想手动处理约束对象的更改.)一旦有了,就可以可以发送PCM样本(我建议先从32位浮点数减少到16位有符号数),或者可以使用编解码器(如AAC或MP3客户端).如果在客户端中执行编解码器,则只能发送一两个流.如果在服务器端进行编解码器,则由于CPU要求,您可以派生任意数量的内容,但是根据派生的流,您将占用更多的带宽.

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

要将数据发送到服务器,您需要一个二进制Web套接字.

在服务器端,如果要将编解码器保留在服务器端,则FFmpeg可以简化此操作.

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

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

AudioPump Web Encoder

标签:html5,icecast,audio,javascript,ruby-on-rails
来源: https://codeday.me/bug/20191026/1937754.html