【问题标题】:Live streaming audio with WebRTC browser => server使用 WebRTC 浏览器实时流式传输音频 => 服务器
【发布时间】:2018-06-25 07:23:15
【问题描述】:

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

【问题讨论】:

    标签: webrtc audio-streaming audio-recording live-streaming openwebrtc


    【解决方案1】:

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

    网络套接字

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

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

    HTTP(未来)

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

    WebRTC(数据通道)

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

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

    WebRTC(媒体流)

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

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

    【讨论】:

    • HTTP 现在可以流式传输了吗?
    • 还有哪些学习直播架构/系统设计的好地方
    • @MuhammadUmer 不,HTTP PUT 还不支持 ReadableStream 作为主体,现在浏览器开发人员似乎反对它。有人担心代理和其他服务器将无法处理分块传输编码。坦率地说,我认为这种担忧被夸大了,但对标准了解更多的人正在努力关注每个人并保持兼容。也许在 HTTP/2 中。与此同时,我们被困在使用 Web Sockets 解决这个问题。
    • @MuhammadUmer 至于你关于在哪里/如何学习的第二个问题......我唯一的建议就是边做边学。流媒体可能非常不透明......有很多遗留标准决定了事情的发展方式。但是,当你进入它时,它并不算太糟糕!
    猜你喜欢
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2012-11-20
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多