5

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

4

1 回答 1

6

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

网络套接字

只需通过二进制网络套接字将音频数据发送到您的服务器。您可以使用带有 ScriptProcessorNode 的 Web Audio API 来捕获原始 PCM 并无损发送。或者,您可以使用 MediaRecorder 记录 MediaStream 并使用像 Opus 这样的编解码器对其进行编码,然后您可以通过 Web Socket 进行流式传输。

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

HTTP(未来)

在不久的将来,您将能够使用 WritableStream 作为 Fetch API 的请求主体,从而允许您使用来自浏览器的流源进行正常的 HTTP PUT。这与使用 Web Socket 所做的基本相同,只是没有 Web Socket 层。

WebRTC(数据通道)

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

这增加了很多复杂性,没有真正的好处。不要使用这种方法。

WebRTC(媒体流)

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

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

于 2018-01-17T05:43:50.657 回答