使用WebRTC浏览器实时流式传输音频=>服务器



我正在尝试将一些音频流从我的浏览器发送到某个服务器(udp,也尝试websockets)。 我正在使用webrtc录制音频流,但是在将数据从nodeJS客户端传输到我的服务器时遇到问题。 知道吗?是否可以使用WebRTC(OpenWebRTC)将音频流发送到服务器?

要将音频从浏览器传输到服务器,您有几种不同的可能性。

网络套接字

只需通过二进制 Web 套接字将音频数据发送到您的服务器即可。 您可以将 Web Audio API 与 ScriptProcessorNode 结合使用,以捕获原始 PCM 并无损发送。 或者,您可以使用 MediaRecorder 录制 MediaStream 并使用 Opus 等编解码器对其进行编码,然后可以通过 Web 套接字进行流式传输。

在Facebook的GitHub存储库中有一个使用视频执行此操作的示例。 仅流式传输音频在概念上是一回事,因此您应该能够调整该示例。

HTTP (未来)

在不久的将来,您将能够使用 WritableStream 作为 Fetch API 的请求正文,从而允许您使用来自浏览器的流源创建普通的 HTTP PUT。 这基本上与您使用 Web 套接字所做的相同,只是没有 Web 套接字层。

网络RTC (数据通道)

使用WebRTC连接和服务器作为"对等体",您可以打开数据通道并发送与通过Web套接字或HTTP发送的完全相同的PCM或编码音频。

这增加了大量的复杂性,但没有真正的好处。 不要使用此方法。

WebRTC (媒体流)

WebRTC调用支持直接处理MediaStreams。 您可以附加一个流,让WebRTC堆栈负责协商编解码器,适应带宽变化,丢弃未到达的数据,保持同步以及协商限制性防火墙环境中的连接。 虽然这让事情在表面上变得更容易,但这也非常复杂。 没有任何 Node 的软件包.js可以向您公开 MediaStreams,因此您只能处理其他软件......没有一个像它可能的那样容易集成。

大多数走这条路的人都会将 gstreamer 作为 RTP 服务器来处理媒体组件。 我不相信这是最好的方法,但这是我目前所知道的最好的方法。

最新更新