从防火墙后面到 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
我们目前有一位 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