从防火墙后面到 Kurento/WebRTC 的 RTSP

RTSP to Kurento/WebRTC from behind firewall

我们目前有一位 Kurento signaling server in node.js that creates a room and allows one-to-one, one-to-many, and many-to-many WebRTC conferencing. It can also pull an RTSP stream (via 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 以便我们可以创建一个 玩家端点?这将需要打开 Kurento 媒体服务器端口,并且我们将复制大部分信令服务器。

这样的事情可能吗?如果可能的话,你能举个例子说明怎么做吗?

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

RTSPtoWebRTC is a RTSP -> WebRTC bridge, but it does the signaling for you. It can be used as a library as well like rtsp-bench

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

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