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

Posted

技术标签:

【中文标题】将本地 WebRTC 流推送到云端的 NodeJS 服务器【英文标题】:Push local WebRTC stream to a NodeJS server in the cloud 【发布时间】:2022-01-12 13:03:57 【问题描述】:

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

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

我知道如何创建一个 NodeJS 服务器,它使用“getUserMedia”功能部署我的网络摄像头。但我想将我的 WebRTC 流“推送”到实时服务器,以便检索它的公共 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];
  

我的流网址类似于:MyLocalIP:port/streams/webrtc 所以我想用它创建一个公共 URL 来广播它。

【问题讨论】:

【参考方案1】:

有没有办法将我的本地 Websocket 推送到实时环境?

这并不简单,因为您需要的不仅仅是普通的 webrtc(点对点)。你想要的是SFU。看看mediasoup。

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

【讨论】:

好的,这对我来说很清楚,但我不知道从哪里开始。有什么方法可以帮助我将我的 ws:// websocket URL 转发到远程服务器?我们可以付钱(不知道我是否可以在这里做出这样的回应),但我很想完成这项工作! 我愿意谈论这个。您可以通过电子邮件/linkedin 联系我吗?我的个人资料中的信息。【参考方案2】:

您可以使用 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');

【讨论】:

以上是关于将本地 WebRTC 流推送到云端的 NodeJS 服务器的主要内容,如果未能解决你的问题,请参考以下文章

通过 Autodesk Forge 将数据推送到云端

GCP - 谷歌云平台:有没有任何方法可以在没有任何版本控制系统的情况下将代码从 eclipse 推送到云端?

如何正确地在android上计算webrtc

Agora 网络直播到手机

将文件从 Google Cloud Storage 添加到云端硬盘

JS中的RTMP编码器?