kurento-utils,一个客户端中的多个 WebRtcPeer
kurento-utils, multiple WebRtcPeer's in one client
我有一个应用程序,我将我的桌面和网络摄像头共享到我的 Kurento 服务器(同一管道中的两个不同端点),为两者启动一个记录端点,然后在另一方面提醒客户端他们都准备好消费了。
我的问题是在我的客户端上有两个 WebRtcPeerRecvonly 对等点,如果一个在另一个发出消费请求之前没有完成,我要么得到同一个桌面端点的视频,要么得到同一个网络摄像头端点的两个视频。
网络摄像头同行
initWebcamUser(id){
let options = {
onicecandidate: (candidate) => {
socket.emit('onWebcamIceCandidate',{
candidate : candidate,
socket_id : id,
});
}
};
webRtcWebcamPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(options, function(error) {
this.generateOffer((error, offerSdp) => {
socket.emit('viewerWebcam',{
sdpOffer : offerSdp,
socket_id : id
});
});
});
}
和我的桌面同行。
initDesktop(socket_id){
let options = {
onicecandidate: (candidate) => {
socket.emit('onDesktopIceCandidate',{
candidate : candidate,
socket_id : socket_id,
});
}
}
webRtcDesktopPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(options, function(error) {
this.generateOffer((error, offerSdp) => {
socket.emit('viewerDesktop',{
sdpOffer : offerSdp,
socket_id : socket_id
});
});
});
}
我得出的结论是它们共享相同的内容 kurentoUtils.WebRtcPeer 就好像我在调用 initWebcamUser 之后在调用 initDesktop 之前设置了 2 秒的延迟 我在 100% 的时间内获得了正确的流.
我想这归结为一个问题,是否可以同时执行此操作?或者我应该在 WebcamPeer 完成时设置一个基于承诺的系统,如果是的话,我会把它放在这个过程中的什么地方,当添加 iceCandidates 时?
编辑:我觉得重要的是要注意我在我的 webcamViewerResponse / desktopViewerResponse 中分别将这些对等点分配给它们各自的 'participants',这样它们就不会从那些临时 webRtcWebcamPeer/webRtcDesktopPeer 变量中引用我遇到了这个问题。
提前致谢。
如果有人正在为此寻找答案,我找到了解决方案。不是最优雅的,但它在 100% 的时间都有效。
endpoint.on('OnIceComponentStateChanged', function(event) {
if(event.state==='CONNECTED'){
//resolve your promise to continue on with your next connection here.
}
});
我有一个应用程序,我将我的桌面和网络摄像头共享到我的 Kurento 服务器(同一管道中的两个不同端点),为两者启动一个记录端点,然后在另一方面提醒客户端他们都准备好消费了。
我的问题是在我的客户端上有两个 WebRtcPeerRecvonly 对等点,如果一个在另一个发出消费请求之前没有完成,我要么得到同一个桌面端点的视频,要么得到同一个网络摄像头端点的两个视频。
网络摄像头同行
initWebcamUser(id){
let options = {
onicecandidate: (candidate) => {
socket.emit('onWebcamIceCandidate',{
candidate : candidate,
socket_id : id,
});
}
};
webRtcWebcamPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(options, function(error) {
this.generateOffer((error, offerSdp) => {
socket.emit('viewerWebcam',{
sdpOffer : offerSdp,
socket_id : id
});
});
});
}
和我的桌面同行。
initDesktop(socket_id){
let options = {
onicecandidate: (candidate) => {
socket.emit('onDesktopIceCandidate',{
candidate : candidate,
socket_id : socket_id,
});
}
}
webRtcDesktopPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(options, function(error) {
this.generateOffer((error, offerSdp) => {
socket.emit('viewerDesktop',{
sdpOffer : offerSdp,
socket_id : socket_id
});
});
});
}
我得出的结论是它们共享相同的内容 kurentoUtils.WebRtcPeer 就好像我在调用 initWebcamUser 之后在调用 initDesktop 之前设置了 2 秒的延迟 我在 100% 的时间内获得了正确的流.
我想这归结为一个问题,是否可以同时执行此操作?或者我应该在 WebcamPeer 完成时设置一个基于承诺的系统,如果是的话,我会把它放在这个过程中的什么地方,当添加 iceCandidates 时?
编辑:我觉得重要的是要注意我在我的 webcamViewerResponse / desktopViewerResponse 中分别将这些对等点分配给它们各自的 'participants',这样它们就不会从那些临时 webRtcWebcamPeer/webRtcDesktopPeer 变量中引用我遇到了这个问题。
提前致谢。
如果有人正在为此寻找答案,我找到了解决方案。不是最优雅的,但它在 100% 的时间都有效。
endpoint.on('OnIceComponentStateChanged', function(event) {
if(event.state==='CONNECTED'){
//resolve your promise to continue on with your next connection here.
}
});