Socket.io Webrtc连接对等呼叫功能

Socket.io Webrtc连接对等呼叫功能,socket.io,webrtc,Socket.io,Webrtc,我知道这可能是一个漫长的过程,但我希望有人能给我指出正确的方向 我建立了一个简单的点对点视频连接,并将其封装在一个函数中,这样我就可以通过单击按钮调用它,但它没有运行。 当它没有包装在“activateVideoStream”函数中,只是加载时,它就可以正常工作。我觉得问题在于异步函数,但我不能完全理解它 代码如下: 让isAlreadyCalling=false; const remoteVideo=document.getElementById(“远程视频”); 常数{ RTPEERCON

我知道这可能是一个漫长的过程,但我希望有人能给我指出正确的方向

我建立了一个简单的点对点视频连接,并将其封装在一个函数中,这样我就可以通过单击按钮调用它,但它没有运行。 当它没有包装在“activateVideoStream”函数中,只是加载时,它就可以正常工作。我觉得问题在于异步函数,但我不能完全理解它

代码如下:

让isAlreadyCalling=false;
const remoteVideo=document.getElementById(“远程视频”);
常数{
RTPEERCONNECTION,
RTCSessionDescription
}=窗口;
让peerConnection;
函数activateVideoStream(){
常量配置={
“ICEServer”:[{
“URL:“stun:stun.l.google.com:19302”
}]
};
console.log(“激活视频流”);
peerConnection=新的RTCPeerConnection(配置);
navigator.getUserMedia({
视频:没错,
音频:正确
},
流=>{
const localVideo=document.getElementById(“本地视频”);
if(本地视频){
localVideo.srcObject=流;
}
stream.getTracks().forEach(track=>peerConnection.addTrack(track,stream));
},
错误=>{
console.warn(错误消息);
}
);
peerConnection.ontrack=函数({
溪流:[溪流]
}) {
if(远程视频){
remoteVideo.srcObject=流;
}
};
}
异步函数callUser(socketId){
console.log(“呼叫用户”);
remoteVideo.style.display=“block”;
const offer=wait peerConnection.createOffer();
wait peerConnection.setLocalDescription(新的RTCSessionDescription(提供));
socket.emit(“callUser”{
提供
致:socketId
});
}
socket.on(“callmake”,异步数据=>{
控制台日志(“发出呼叫”);
等待peerConnection.setRemoteDescription(
新RTCSessionDescription(data.offer)
);
const answer=wait peerConnection.createAnswer();
wait peerConnection.setLocalDescription(新的RTCSessionDescription(应答));
remoteVideo.style.display=“block”;
emit(“makeAnswer”{
答复,,
收件人:data.socket
});
});
socket.on(“AnswerMake”,异步数据=>{
控制台日志(“作出回答”);
等待peerConnection.setRemoteDescription(
新RTCSessionDescription(data.answer)
);
如果(!isAlreadyCalling){
callUser(data.socket);
isAlreadyCalling=true;
}

});何时调用哪个函数?尽管套接字已在侦听使用peerconnection,但您仅在activateVideoStream中初始化peerconnection。peerconnection可能尚未初始化