将本地 WebRTC 流推送到云端的 NodeJS 服务器

Push local WebRTC stream to a NodeJS server in the cloud

我有一个任务,但我似乎无法完成它。 我在 Raspberry Pi 上创建了一个非常简单的 WebRTC 流,它将用作视频聊天相机。 我使用 ionic 制作了一个简单的移动应用程序,它可以在 phone 连接到同一网络时显示我的 WebRTC 流。这一切都有效。

所以现在我有自己的本地流,它显示在我的应用程序上。 我现在希望能够将此流从我的 phone 广播到实时服务器,以便其他人可以观看。

我知道如何创建一个 NodeJS 服务器,它使用 'getUserMedia' 函数部署我的网络摄像头。但是我想 'push' 我的 WebRTC 流到实时服务器,这样我就可以为它检索 public URL。

有没有办法将我的本地 Websocket 推送到实时环境? 我正在使用本地 RTCPeerConnection 创建 MediaStream 对象

this.peerconnection = new RTCPeerConnection(this.peerservers);
    this.peerconnection.onicecandidate = (event) => {
      if (event.candidate && event.candidate.candidate) {
        var candidate = {
          sdpMLineIndex: event.candidate.sdpMLineIndex,
          sdpMid: event.candidate.sdpMid,
          candidate: event.candidate.candidate
        };
        var request = {
          what: "addIceCandidate",
          data: JSON.stringify(candidate)
        };
        this.websockets.send(JSON.stringify(request));
      } else {
        console.log("End of candidates.");
      }
    };

并将流对象绑定到我的 HTML 视频标签,我正在使用这个

onTrack(event) {
    this.remoteVideo.srcObject = event.streams[0];
  }

我的流 url 是这样的:MyLocalIP:port/streams/webrtc 所以我想用它创建一个 public URL 来广播它。

Is there a way to push my local Websocket to a live environment?

这并不简单,因为您需要的不仅仅是 vanilla webrtc(点对点)。你想要的是 SFU. Take a look at mediasoup.

要了解为什么需要这样做,请考虑如何在您当前的应用程序中建立 webrtc 连接。这是两个 方之间的协商(由信令服务器促进)。为了将其转变为多播设置,您将需要某种代理,然后与所有发送者和接收者建立单独的对等连接。

您可以使用 Socket.io 和 WebRTC,请参阅 sample here

var offerer = new PeerConnection('http://domain:port', 'message', 'offerer');
offerer.onStreamAdded = function(e) {
   document.body.appendChild(e.mediaElement);
};
var answerer = new PeerConnection('http://domain:port', 'message', 'answerer');
answerer.onStreamAdded = function(e) {
   document.body.appendChild(e.mediaElement);
};
answerer.sendParticipationRequest('offerer');