该解决方案必须完全基于浏览器/网络,没有额外的软件。
目前不可能,因为有no way to make a streaming HTTP PUT request。也就是说,要通过XHR 或Fetch 发出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。