【问题标题】:RTSP to Kurento/WebRTC from behind firewall从防火墙后面的 RTSP 到 Kurento/WebRTC
【发布时间】:2021-02-28 02:21:16
【问题描述】:

我们目前在 node.js 中有一个 Kurento 信号服务器,它创建一个房间并允许一对一、一对多和多对多的 WebRTC 会议。它还可以作为演示者将 RTSP 流(通过PlayerEndpoint)拉入房间。

我们的一个要求是在不修改防火墙设置(例如打开 RTSP 流的端口)的情况下访问位于防火墙后面的 RTSP 流。

我们的一个想法是在防火墙后面的本地网络上安装一个“摄像头控制器”,通过端口 443 (https) 上的 websocket 连接到我们的信令服务器(云),该端口通常对出站流量开放。 websocket 连接将得到升级,为我们提供了与控制器通信的方法。当用户想要查看摄像头时,信令服务器会向摄像头控制器发送一条消息,并让它通过普通的 WebRTC 方法(使用kurento-utils-js)作为演示者发起 WebRTC 调用。

我们遇到的问题是如何将 RTSP 流推送到 Kurento。使用kurento-utils-js,我们正在创建一个WebRTCPeer (WebRtcPeerSendonly),但我们无法通过这种方式获取RTSP 流。

我们目前有这样的东西:

let video = document.createElement("video");
video.id = username;
video.autoplay = true;

document.getElementById("main").appendChild(video);

let constraints = {
    audio: true,
    video: {
      mandatory: {
        maxWidth: 320,
        maxFrameRate: 15,
        minFrameRate: 15
      }
    }
  };

let options = {
    localVideo: video, // This works for webcams, but how do we get RTSP stream in here?
    onicecandidate: onIceCandidate,
    mediaConstraints: constraints
  };

participant.rtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(options, function (err) {
      if (err) {
        return console.error(err);
      }
      this.generateOffer(onOffer);
    });

const onIceCandidate = (candidate, wp) => {
    console.log("sending ice candidates");
    let message = {
      event: "candidate",
      senderId: participant.id,
      roomName: data.roomname,
      candidate: candidate
    };
    sendMessage(message);
  };

const onOffer = (err, offer, wp) => {
    console.log("sending offer");
    let message = {
      event: "receiveVideoFrom",
      senderId: participant.id,
      roomName: data.roomname,
      sdpOffer: offer
    };
    sendMessage(message);
  };

我们是否需要让相机控制器直接连接到 Kurento(通过kurento-client)而不是使用kurento-utils-js,以便我们可以创建PlayerEndpoint?这将需要打开 Kurento 媒体服务器端口,并且我们将复制大部分信令服务器。

这样的事情有可能吗,如果可以,你能举个例子说明如何做吗?

【问题讨论】:

    标签: node.js webrtc rtsp ip-camera kurento


    【解决方案1】:

    如果可以的话,我会使用 RTSP 代理在网络内运行 WebRTC 代理,然后让它连接到 Kurento。

    RTSPtoWebRTC 是一个 RTSP -> WebRTC 网桥,但它会为您发送信号。它可以用作库,也可以像rtsp-bench

    您要做的是向 Kurento 发出信号,因此您的拓扑将如下所示。

    RTSP -> WebRTC -> | NAT | -> Kurento -> Viewers 
    
    

    【讨论】:

    • 您是说网络内的“代理”将直接连接到 KMS,而不是连接到我们已经在网络外拥有的信令服务器?我们如何将 RTSP 输入连接到由外部信令服务器管理并具有现有参与者的房间?
    猜你喜欢
    • 1970-01-01
    • 2016-06-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多