如何将实时音频从浏览器流式传输到 Icecast 服务器



有没有办法将实时音频输入从浏览器发送到Icecast服务器?

我正在使用getUserMediaAPI 来接收音频输入,我希望这是到 Icecast 服务器的实时流。

getAudioInput(){
const constraints = { 
video: false, 
audio: {deviceId: this.state.deviceId ? {exact: this.state.deviceId} : undefined},
};
window.navigator.getUserMedia(
constraints, 
this.streamAudio, 
this.handleError
);
}

在我的streamAudio函数中,我想将其流式传输到Icecast服务器。我可以用某种xmlhttprequest来做到这一点,还是需要通过套接字来完成?

不幸的是,这在今天是不可能的。 另请参阅:使用 ReadableStream 作为请求正文进行提取

基本上,浏览器不允许流式传输的 HTTP 请求正文。 因此,您无法对动态生成的数据执行长时间运行的 HTTP PUT。 在发送请求之前,必须完全解析请求正文。

浏览器内有关 Fetch 和 Streams 接口的规范指出,应该可以使用流作为请求正文,但目前没有浏览器实现它。

目前只有两种方法可以从浏览器中获取流。 其中之一是使用 Web 套接字。 这是最简单的方法,需要您处理媒体数据的编码(通常通过 MediaRecorder API(。 第二种方法是使用WebRTC。 使用WebRTC,您可以直接使用其MediaStream处理(很难在服务器端进行(,也可以使用其数据流。 如果您只是将数据直接发送到服务器,那么使用数据流与 Web 套接字相比没有真正的好处。

我过去曾构建过使用 WebSocket 方法的基于 Web 的客户端。 另请参阅:https://stackoverflow.com/a/40073233/362536

最新更新