【发布时间】: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