我有一个应用程序,我将我的桌面和网络摄像头共享到我的Kurento服务器(同一管道中的两个不同端点),为两者启动记录端点,然后另一方面提醒客户端他们都准备好消费了。
我的问题是在我的客户端上有两个WebRtcPeerRecvonly对等体,如果在另一个做出请求消费之前没有完成,我要么获得相同桌面端点的视频,要么获得同一网络摄像头端点的两个视频。
webcam peer
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完成时设置基于promise的系统,如果是这样的话,当添加iceCandidates时,我会在这个过程中将它放在哪里?
编辑:我觉得重要的是要注意我将这些同伴分配给他们各自的参与者'分别在我的webcamViewerResponse / desktopViewerResponse中,当我遇到这个问题时,他们就不会从那些临时webRtcWebcamPeer / webRtcDesktopPeer变量中引用它们。
提前致谢。
答案 0 :(得分:0)
如果有人正在为此寻找答案,我找到了解决方案。不是最优雅的,但它在100%的时间都有效。
endpoint.on('OnIceComponentStateChanged', function(event) {
if(event.state==='CONNECTED'){
//resolve your promise to continue on with your next connection here.
}
});