Node.js - 使用 P2P 的客户端到服务器 WebRTC

Posted

技术标签:

【中文标题】Node.js - 使用 P2P 的客户端到服务器 WebRTC【英文标题】:Node.js - Client to Server WebRTC with P2P 【发布时间】:2021-10-19 14:37:06 【问题描述】:

在尝试使用客户端到服务器模型(如 Discord)实现 WebRTC 之后,我得出的结论是,实现此目的的方法是拥有 2 个客户端 - 服务器和客户端。音频流可以叠加并在 1 个单个流中发送回用户。

backend/server.js

const clientPeer = new Peer( initiator: true, wrtc );
    
clientPeer.on('connect', () => console.log('hi client, this is server'));
clientPeer.on('data', (data) => console.log('got a message from client peer: ', data));

前端/index.js

serverPeer.on('connect', () => console.log('Connected to server'));
serverPeer.on('stream', async (stream) => 
  const video = document.createElement('audio');

  ('srcObject' in video)
    ? video.srcObject = stream
    : video.src = window.URL.createObjectURL(stream);

  await video.play();
);

如何实现在客户端和服务器之间发送媒体流?

【问题讨论】:

我不完全理解您到底想要达到什么目标,但我认为 SFU(例如:mediasoup)可能与它相关/需要。 【参考方案1】:

一个可能的解决方案是:创建一个MediaRecorder 对象,它可以在客户端记录媒体流。这个对象随着时间的推移发出数据块。您可以通过 WebSocket 将这些块发送到服务器。在服务器端,你可以对数据块做你想做的事。 更多详情可以查看https://mux.com/blog/the-state-of-going-live-from-a-browser/。

https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder 另一种解决方案可以是:Making a node.js application a PEER with WebRTC

【讨论】:

我正在考虑使用 WebSocket 以块的形式发送数据,但不确定音频质量。如果音频质量很好,这可能是一个可行的解决方案。你知道这方面有什么好的代码示例吗? 我不确定质量,因为我们将此解决方案用作概念证明。但是,如果您与 WebSocket 的连接正常,并且您的机器与媒体记录器也正常,那么我认为质量也可以。请阅读有关此解决方案的博客文章,我对答案进行了更新。

以上是关于Node.js - 使用 P2P 的客户端到服务器 WebRTC的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 node.js 服务器上设置运行(服务器端)的 socket.io 客户端?

WebRTC 直播视频流 node.js

将数据从服务器(Node.js)发送到 GraphQL 服务器中的客户端(React 组件)

Android 客户端未从 node.js 服务器接收到 socket.io 消息

用于实时多人游戏的 Node.js UDP

node.js 的服务器端模板